crypto_quant/trade_main.py

90 lines
3.7 KiB
Python
Raw Permalink Normal View History

import core.logger as logging
from time import sleep
from core.biz.quant_trader import QuantTrader
from core.biz.strategy import QuantStrategy
2025-07-24 10:23:00 +00:00
from config import API_KEY, SECRET_KEY, PASSPHRASE, SANDBOX, TRADING_CONFIG, TIME_CONFIG
logger = logging.logger
class BizMain:
def __init__(self):
api_key = API_KEY
secret_key = SECRET_KEY
passphrase = PASSPHRASE
2025-07-24 10:23:00 +00:00
# sandbox = TRADING_CONFIG.get("sandbox", True)
sandbox = SANDBOX
symbol = TRADING_CONFIG.get("symbol", "BTC-USDT")
position_size = TRADING_CONFIG.get("position_size", 0.001)
self.trader = QuantTrader(api_key, secret_key, passphrase, sandbox, symbol, position_size)
# self.strategy = QuantStrategy(api_key, secret_key, passphrase, sandbox, symbol, position_size)
def start_job(self):
"""
1. 合约开空单流程
1.1. 获取当前价格
1.2 设置tdmode为cross张数为1每张货币单位为0.01杠杆为1缓冲比例为0.3
1.2. 计算保证金
1.4. 开空单
2. 现货卖出虚拟货币流程
2.1 获取当前虚拟货币数量
2.2 卖出0.01单位虚拟货币
3. 合约平空单流程
3.1 设置tdmode为cross张数为1
3.2 平空单
"""
td_mode = "cross"
quantity = 1
try:
# 1. 合约开空单流程
logger.info("[1] 合约开空单流程:")
# price = self.trader.get_current_price(self.trader.symbol_swap)
# logging.info(f"当前合约价格: {price}")
slot = 0.01
leverage = 1
buffer_ratio = 0.3
# margin, entry_price = self.trader.calculate_margin(quantity, leverage, slot, buffer_ratio)
# logging.info(f"所需保证金: {margin}, 开仓价格: {entry_price}")
order_id, entry_price = self.trader.place_short_order(td_mode, quantity, leverage, slot, buffer_ratio)
if order_id:
logger.info(f"开空单成功订单ID: {order_id}, 开仓价格: {entry_price}")
else:
logger.error("开空单失败")
except Exception as e:
logger.error(f"合约开空单流程异常: {e}")
sleep(1)
try:
# 2. 现货卖出比特币流程
logger.info(f"[2] 现货卖出{self.trader.symbol_prefix}流程:")
balance = self.trader.get_account_balance()
btc_balance = balance.get(self.trader.symbol_prefix, 0)
logger.info(f"当前{self.trader.symbol_prefix}余额: {btc_balance}")
sell_amount = 0.01
if btc_balance >= sell_amount:
order_id = self.trader.place_market_order('sell', sell_amount)
if order_id:
logger.info(f"现货卖出{sell_amount}{self.trader.symbol_prefix}成功订单ID: {order_id}")
else:
logger.error(f"现货卖出{self.trader.symbol_prefix}失败")
else:
logger.error(f"{self.trader.symbol_prefix}余额不足,无法卖出{sell_amount}{self.trader.symbol_prefix}")
except Exception as e:
logger.error(f"现货卖出{self.trader.symbol_prefix}流程异常: {e}")
sleep(1)
try:
# 3. 合约平空单流程
logger.info("[3] 合约平空单流程:")
result = self.trader.close_short_order(td_mode, quantity)
if result:
logger.info("平空单成功")
else:
logger.error("平空单失败")
except Exception as e:
logger.error(f"合约平空单流程异常: {e}")
if __name__ == "__main__":
biz_main = BizMain()
biz_main.start_job()