3.08K 浏览
0

程序大致如下:
klines = api.get_kline_serial(SYMBOL, 60 * 30)
while True:
api.wait_update()
if api.is_changing(klines1.iloc[-1],”close”):
ma1,ma2 = …
if ma1 > ma2:
target_pos.set_target_volume(1)
if ma1 < ma2:
target_pos.set_target_volume(0)
上述代码使得1分钟内成交几十笔同样价格的交易:价格A买;价格B平,以此循环几十次,直到手工kill掉进程。

1.逻辑上ma1 > ma2和ma1 < ma2肯定是互斥的。如此简单的逻辑,问题出在哪里? 因为api.is_changing(klines1.iloc[-1],”close”): 中”close”使得短时间内价格不停晃动,使得ma1、ma2在一段时间内不停更新,即ma1 > ma2 和 ma1 < ma2在同一分钟或一小段时间不停轮换成立?

2.改为 api.is_changing(klines1.iloc[-1],”datetime”): 那么相当于30分钟后才会更新ma1、ma2。那持仓最少30分钟?

我想1分钟监控一次条件,即1分钟更新一次ma1、ma2的条件,是否:加上deadline = time.time() + 60
api.wait_update(deadline = deadline) ,将”datetime”改为“close”就可了?

west 已回答的问题 2020年4月20日
0
  1. “因为api.is_changing(klines1.iloc[-1],”close”): 中”close”使得短时间内价格不停晃动,使得ma1、ma2在一段时间内不停更新,即ma1 > ma2 和 ma1 < ma2在同一分钟或一小段时间不停轮换成立?”

是的,这是很可能的,你可以自己在每次计算了ma1和ma2之后输出来看看,或者在target_pos.set_target_volume()前输出一些语句或者数据情况来做检查。

2. 你是触发条件之后才调仓,在两次调仓操作之间肯定是保持上一次成交之后的仓位的。一分钟监控一次条件的话你可以订阅一分钟线

west 已回答的问题 2020年4月20日