|
@@ -154,7 +154,7 @@ class Quant:
|
|
|
ipListNum = len(ipList)
|
|
ipListNum = len(ipList)
|
|
|
if int(self.params.ip) >= ipListNum:
|
|
if int(self.params.ip) >= ipListNum:
|
|
|
raise Exception("指定私有ip地址序号不存在")
|
|
raise Exception("指定私有ip地址序号不存在")
|
|
|
- # 创建ws实例
|
|
|
|
|
|
|
+ # 用于创建ws实例
|
|
|
name = self.exchange+'@'+self.params.pair
|
|
name = self.exchange+'@'+self.params.pair
|
|
|
self.trade_name = name
|
|
self.trade_name = name
|
|
|
self.market_update_time[name] = 0.0
|
|
self.market_update_time[name] = 0.0
|
|
@@ -171,7 +171,6 @@ class Quant:
|
|
|
cp.broker_id = self.params.broker_id
|
|
cp.broker_id = self.params.broker_id
|
|
|
cp.debug = self.params.debug
|
|
cp.debug = self.params.debug
|
|
|
cp.proxy = self.params.proxy
|
|
cp.proxy = self.params.proxy
|
|
|
- cp.interval = self.params.interval
|
|
|
|
|
cp.ip = int(self.params.ip)
|
|
cp.ip = int(self.params.ip)
|
|
|
self.ws = broker.newWs(self.exchange)(
|
|
self.ws = broker.newWs(self.exchange)(
|
|
|
params=cp,
|
|
params=cp,
|
|
@@ -767,13 +766,16 @@ class Quant:
|
|
|
# 当开启回测时才订阅交易盘口的成交流
|
|
# 当开启回测时才订阅交易盘口的成交流
|
|
|
_sub_trade = int(self.params.backtest)
|
|
_sub_trade = int(self.params.backtest)
|
|
|
_sub_fast = int(self.params.fast)
|
|
_sub_fast = int(self.params.fast)
|
|
|
|
|
+ # TODO 这是task1,要在这个交易所交易,pycharm定位有问题,这个ws不一定指向binance
|
|
|
self.loop.create_task(self.ws.run(is_auth=1, sub_trade=_sub_trade, sub_fast=0))
|
|
self.loop.create_task(self.ws.run(is_auth=1, sub_trade=_sub_trade, sub_fast=0))
|
|
|
|
|
+ # TODO 这是task n,用来做参考
|
|
|
for i in self.ref_name:
|
|
for i in self.ref_name:
|
|
|
# 启动参考ws 参考盘口使用fast行情性能消耗更大 使用普通行情可以节省性能
|
|
# 启动参考ws 参考盘口使用fast行情性能消耗更大 使用普通行情可以节省性能
|
|
|
self.loop.create_task(self.ws_ref[i].run(is_auth=0, sub_trade=0, sub_fast=_sub_fast))
|
|
self.loop.create_task(self.ws_ref[i].run(is_auth=0, sub_trade=0, sub_fast=_sub_fast))
|
|
|
await asyncio.sleep(1)
|
|
await asyncio.sleep(1)
|
|
|
###### 做交易前准备工作 ######
|
|
###### 做交易前准备工作 ######
|
|
|
# 买入平台币
|
|
# 买入平台币
|
|
|
|
|
+ # TODO v9情况下买入平台币会怎么样?
|
|
|
await self.rest.buy_token()
|
|
await self.rest.buy_token()
|
|
|
await asyncio.sleep(1)
|
|
await asyncio.sleep(1)
|
|
|
# 清空挂单和仓位
|
|
# 清空挂单和仓位
|
|
@@ -821,6 +823,7 @@ class Quant:
|
|
|
self.logger.info(f"数量精度{self.strategy.stepSize}")
|
|
self.logger.info(f"数量精度{self.strategy.stepSize}")
|
|
|
self.logger.info(f"价格精度{self.strategy.tickSize}")
|
|
self.logger.info(f"价格精度{self.strategy.tickSize}")
|
|
|
grid = float(self.params.grid)
|
|
grid = float(self.params.grid)
|
|
|
|
|
+ # 计算下单数量
|
|
|
if "spot" in self.exchange:
|
|
if "spot" in self.exchange:
|
|
|
long_one_hand_value = start_cash * float(self.params.leverrate) / grid
|
|
long_one_hand_value = start_cash * float(self.params.leverrate) / grid
|
|
|
short_one_hand_value = start_coin * mp * float(self.params.leverrate) / grid
|
|
short_one_hand_value = start_coin * mp * float(self.params.leverrate) / grid
|
|
@@ -1217,7 +1220,7 @@ class Quant:
|
|
|
try:
|
|
try:
|
|
|
# 休眠
|
|
# 休眠
|
|
|
await asyncio.sleep(_interval)
|
|
await asyncio.sleep(_interval)
|
|
|
- ###### 子进场早停风控 ######
|
|
|
|
|
|
|
+ ###### 子进程早停风控 ######
|
|
|
self.logger.info(f'当前净值{self.strategy.equity} 上次检测时净值{_last_equity} 当前累积利润{self.local_profit} 上次检测时利润{_last_local_profit}')
|
|
self.logger.info(f'当前净值{self.strategy.equity} 上次检测时净值{_last_equity} 当前累积利润{self.local_profit} 上次检测时利润{_last_local_profit}')
|
|
|
# 检查是否需要早停 没有成交 或者 亏损
|
|
# 检查是否需要早停 没有成交 或者 亏损
|
|
|
if self.strategy.equity <= _last_equity or self.local_profit <= _last_local_profit:
|
|
if self.strategy.equity <= _last_equity or self.local_profit <= _last_local_profit:
|
|
@@ -1295,6 +1298,7 @@ class Quant:
|
|
|
# 更新策略时间
|
|
# 更新策略时间
|
|
|
self.strategy.local_time = time.time()
|
|
self.strategy.local_time = time.time()
|
|
|
# 获取信号
|
|
# 获取信号
|
|
|
|
|
+ # TODO mode_signal∈[21, +无穷) 表示什么?
|
|
|
if self.mode_signal > 20:
|
|
if self.mode_signal > 20:
|
|
|
# 先执行onExit
|
|
# 先执行onExit
|
|
|
orders = self.strategy.onExit(self.tradeMsg)
|
|
orders = self.strategy.onExit(self.tradeMsg)
|
|
@@ -1304,6 +1308,7 @@ class Quant:
|
|
|
self._update_local_orders(orders)
|
|
self._update_local_orders(orders)
|
|
|
self.loop.create_task(self.rest.handle_signals(orders))
|
|
self.loop.create_task(self.rest.handle_signals(orders))
|
|
|
self.logger.debug(orders)
|
|
self.logger.debug(orders)
|
|
|
|
|
+ # TODO mode_signal∈[2, 20] 表示什么?
|
|
|
else:
|
|
else:
|
|
|
# 再执行onSleep
|
|
# 再执行onSleep
|
|
|
orders = self.strategy.onSleep(self.tradeMsg)
|
|
orders = self.strategy.onSleep(self.tradeMsg)
|
|
@@ -1412,6 +1417,7 @@ class Quant:
|
|
|
|
|
|
|
|
self.loop.create_task(self.before_trade())
|
|
self.loop.create_task(self.before_trade())
|
|
|
|
|
|
|
|
|
|
+ # TODO 启动方式干嘛用的?为什么要判断?
|
|
|
print(f'判断启动方式...')
|
|
print(f'判断启动方式...')
|
|
|
if self.father:
|
|
if self.father:
|
|
|
print('以父进程方式启动 最大允许运行时间为30天')
|
|
print('以父进程方式启动 最大允许运行时间为30天')
|