云服务器升级到1.8.2,实盘不能运行,退到1.8.0才行,可是用set_target_volume()下的一单,居然回来折腾了4次才消停,止损固定30个点,第一次碰到,能给个解释吗?
能有复现的最小代码发给我们么?
框架如下,其他的省略
N=2 #交易手数
S=30 #固定止损
def XXX(quote, klines):
计算指标数值
return BUY,SELL
def opentrade(quote,klines):
if api.get_position(SYMBOL).pos_long==0 and api.get_position(SYMBOL).pos_short==0:
if quote.last_price>BUY:
print(quote.datetime, “多%d手” %(N))
target_pos.set_target_volume(N)
elif quote.last_price<SELL:
print(quote.datetime, "空%d手" %(N))
target_pos.set_target_volume(-N)
def closetrade(quote,klines):
if api.get_position(SYMBOL).pos_long==N:
A=api.get_position(SYMBOL).open_price_long
if quote.last_priceA+S:
print(quote.datetime, “多头止赢”)
target_pos.set_target_volume(0)
elif api.get_position(SYMBOL).pos_short==N:
B=api.get_position(SYMBOL).open_price_short
if quote.last_price>B+S :
print(quote.datetime, “空头止损”)
target_pos.set_target_volume(0)
elif quote.last_price<B-S:
print(quote.datetime, "空头止赢")
target_pos.set_target_volume(0)
while True:
api.wait_update()
if api.is_changing(klines):
B,S = XXX(quote, klines)
print(quote.datetime, quote.last_price)
openpositon(quote,klines)
closepostion(quote,klines)
api.close()
可以看一下是否是代码逻辑的问题导致呢
这个代码框架在修改复制粘贴的时候,有部分漏掉了,不过整体流程就是,行情更新,计算指标,如果空仓状态,根据指标进场,如果有多头仓位,固定止损或止赢,如果空头仓位,固定止损或止赢,有什么逻辑问题呢?
刚才看到坛子里有人提到的仓位信息的不同步问题,会不会就是这个原因引起的?因为空单的止损设置为:
B=api.get_position(SYMBOL).open_price_short
if quote.last_price>B+S(固定止损):
可能B的更新慢了一点,直接认为B=0了,造成了开仓后直接止损,再循环开仓止损,直到某一点开空单后及时更新到了B,才稳定下来。
回测没有问题,云服务器上的实盘就会出现反复开平数次后才达到目标,从记录上看,数据传输回报也没问题。