mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 09:18:08 +00:00
更新环境配置示例,添加 GRVT 相关的 API 凭证和选项,增强文档以支持新的交易所适配器,确保用户能够正确配置和使用 GRVT 交易功能。
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
import logging
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
|
||||
from pysdk import grvt_fixed_types, grvt_raw_types
|
||||
from pysdk.grvt_raw_base import GrvtApiConfig, GrvtError
|
||||
from pysdk.grvt_raw_env import GrvtEnv
|
||||
from pysdk.grvt_raw_signing import sign_order, sign_transfer, sign_withdrawal
|
||||
from pysdk.grvt_raw_sync import GrvtRawSync
|
||||
|
||||
|
||||
def get_config() -> GrvtApiConfig:
|
||||
logging.basicConfig()
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.DEBUG)
|
||||
conf = GrvtApiConfig(
|
||||
env=GrvtEnv(os.getenv("GRVT_ENV", "testnet")),
|
||||
trading_account_id=os.getenv("GRVT_SUB_ACCOUNT_ID"),
|
||||
private_key=os.getenv("GRVT_PRIVATE_KEY"),
|
||||
api_key=os.getenv("GRVT_API_KEY"),
|
||||
logger=logger,
|
||||
)
|
||||
logger.debug(conf)
|
||||
return conf
|
||||
|
||||
|
||||
def get_main_account_id(api: GrvtRawSync) -> str:
|
||||
resp = api.funding_account_summary_v1(grvt_raw_types.EmptyRequest())
|
||||
if isinstance(resp, GrvtError):
|
||||
raise ValueError(f"Received error: {resp}")
|
||||
if resp.result is None:
|
||||
raise ValueError("Expected funding_account_summary_v1 response to be non-null")
|
||||
return resp.result.main_account_id
|
||||
|
||||
|
||||
def get_test_order(
|
||||
api: GrvtRawSync, instruments: dict[str, grvt_raw_types.Instrument]
|
||||
) -> grvt_raw_types.Order | None:
|
||||
# Skip test if configs are not set
|
||||
if (
|
||||
api.config.trading_account_id is None
|
||||
or api.config.private_key is None
|
||||
or api.config.api_key is None
|
||||
):
|
||||
return None
|
||||
|
||||
order = grvt_raw_types.Order(
|
||||
sub_account_id=str(api.config.trading_account_id),
|
||||
time_in_force=grvt_raw_types.TimeInForce.GOOD_TILL_TIME,
|
||||
legs=[
|
||||
grvt_raw_types.OrderLeg(
|
||||
instrument="BTC_USDT_Perp",
|
||||
size="1.2", # 1.2 BTC
|
||||
limit_price="64170.7", # 80,000 USDT
|
||||
is_buying_asset=True,
|
||||
)
|
||||
],
|
||||
signature=grvt_raw_types.Signature(
|
||||
signer="", # Populated by sign_order
|
||||
r="", # Populated by sign_order
|
||||
s="", # Populated by sign_order
|
||||
v=0, # Populated by sign_order
|
||||
expiration=str(
|
||||
time.time_ns() + 20 * 24 * 60 * 60 * 1_000_000_000
|
||||
), # 20 days
|
||||
nonce=random.randint(0, 2**32 - 1),
|
||||
),
|
||||
metadata=grvt_raw_types.OrderMetadata(
|
||||
client_order_id=str(random.randint(0, 2**32 - 1)),
|
||||
),
|
||||
)
|
||||
return sign_order(order, api.config, api.account, instruments)
|
||||
|
||||
|
||||
def get_test_tpsl_order(
|
||||
api: GrvtRawSync, instruments: dict[str, grvt_raw_types.Instrument]
|
||||
) -> grvt_raw_types.Order | None:
|
||||
order = get_test_order(api, instruments)
|
||||
if order:
|
||||
order.metadata.trigger = grvt_raw_types.TriggerOrderMetadata(
|
||||
trigger_type=grvt_raw_types.TriggerType.TAKE_PROFIT,
|
||||
tpsl=grvt_raw_types.TPSLOrderMetadata(
|
||||
trigger_by=grvt_raw_types.TriggerBy.LAST,
|
||||
trigger_price="64000",
|
||||
),
|
||||
)
|
||||
return order
|
||||
|
||||
|
||||
def get_test_transfer(api: GrvtRawSync) -> grvt_fixed_types.Transfer | None:
|
||||
# Skip test if configs are not set
|
||||
if (
|
||||
api.config.trading_account_id is None
|
||||
or api.config.private_key is None
|
||||
or api.config.api_key is None
|
||||
):
|
||||
return None
|
||||
|
||||
funding_account_address = get_main_account_id(api)
|
||||
|
||||
return sign_transfer(
|
||||
grvt_fixed_types.Transfer(
|
||||
from_account_id=funding_account_address,
|
||||
from_sub_account_id="0",
|
||||
to_account_id=funding_account_address,
|
||||
to_sub_account_id=str(api.config.trading_account_id),
|
||||
currency="USDT",
|
||||
num_tokens="1",
|
||||
signature=grvt_raw_types.Signature(
|
||||
signer="",
|
||||
r="",
|
||||
s="",
|
||||
v=0,
|
||||
expiration=str(
|
||||
time.time_ns() + 20 * 24 * 60 * 60 * 1_000_000_000
|
||||
), # 20 days
|
||||
nonce=random.randint(0, 2**32 - 1),
|
||||
),
|
||||
transfer_type=grvt_fixed_types.TransferType.STANDARD,
|
||||
transfer_metadata="",
|
||||
),
|
||||
api.config,
|
||||
api.account,
|
||||
)
|
||||
|
||||
|
||||
def get_test_withdrawal(api: GrvtRawSync) -> grvt_raw_types.Withdrawal | None:
|
||||
# Skip test if configs are not set
|
||||
if (
|
||||
api.config.trading_account_id is None
|
||||
or api.config.private_key is None
|
||||
or api.config.api_key is None
|
||||
):
|
||||
return None
|
||||
|
||||
funding_account_address = get_main_account_id(api)
|
||||
|
||||
return sign_withdrawal(
|
||||
grvt_raw_types.Withdrawal(
|
||||
from_account_id=funding_account_address,
|
||||
to_eth_address="0xed3FF6F4E84a64556e8F7d149dC3533f0c7D9c49", # Just a test address
|
||||
currency="USDT",
|
||||
num_tokens="1",
|
||||
signature=grvt_raw_types.Signature(
|
||||
signer="",
|
||||
r="",
|
||||
s="",
|
||||
v=0,
|
||||
expiration=str(
|
||||
time.time_ns() + 20 * 24 * 60 * 60 * 1_000_000_000
|
||||
), # 20 days
|
||||
nonce=random.randint(0, 2**32 - 1),
|
||||
),
|
||||
),
|
||||
api.config,
|
||||
api.account,
|
||||
)
|
||||
Reference in New Issue
Block a user