5.71K 浏览
0

SYMBOL = \”CZCE.TA909\”
KLINE_PERIOD_1 = 60
KLINE_PERIOD_2 = 5*60
data_length = 30
api = TqApi(TqSim())
quote = api.get_quote(SYMBOL)
orders = api.get_order()
ticks = api.get_tick_serial(SYMBOL, data_length=data_length)
position = api.get_position(SYMBOL)
account = api.get_account()
klines_1 = api.get_kline_serial(SYMBOL, duration_seconds=KLINE_PERIOD_1, data_length=data_length)#1分钟
klines_2 = api.get_kline_serial(SYMBOL, duration_seconds=KLINE_PERIOD_2, data_length=data_length)#5分钟
trade_signal = 0
while True:
api.wait_update()
if api.is_changing(account, [\”available\”,\”commission\”,\”position_profit\”,\”close_profit\”]):
print(\”account=\”.format(account))
if api.is_changing(position):
print(\”position=\”.format(position))
if api.is_changing(klines_1.iloc[-1], \”datetime\”):
print(\”klines_1.iloc[-1]=\”.format(klines_1.iloc[-1]))
if api.is_changing(ticks):
if position.volume_long == 0 and position.volume_short == 0:
print(\”开仓\”)
if klines_1.iloc[-1] > klines_2.iloc[-1] :
api.insert_order(symbol=SYMBOL, direction=\”BUY\”, offset=\”OPEN\”, volume=UNIT, limit_price=ticks.iloc[-1].bid_price1)
if klines_1.iloc[-1] < klines_2.iloc[-1] :
api.insert_order(symbol=SYMBOL, direction=\”SELL\”, offset=\”OPEN\”, volume=UNIT, limit_price=ticks.iloc[-1].ask_price1)
elif position.volume_long > 0:
print(\”平多仓\”)
api.insert_order(symbol=SYMBOL, direction=\”SELL\”, offset=\”CLOSE\”, volume=position.volume_long)
elif position.volume_short > 0:
print(\”平空仓\”)
api.insert_order(symbol=SYMBOL, direction=\”BUY\”, offset=\”CLOSE\”, volume=position.volume_short)
以上测试代码,发现几个问题:
1、每次循环,都发生position更新事件,事实上此时打印出来的position并未有任何变化;
2.使用天勤软件回测或复盘,在使用市价下单时,发生成交但是打印出来的position未有变化,其多空仓位仍为0,导致开单逻辑不断下单,有多时达还几百单
3.以上第2点,在复盘时使用正常1倍速还是max,都出现一样的问题
4.以上问题,使用TQSDK回测时,表现与天勤软件不大一样,有时发现一直在打印position,程序似乎没法走到下面的if api.is_changing(ticks)

0

1. 同一个合约的任何周期K线和quote的最新价是一样的
2. 对同一个合约同时运行两个策略,可能出现:第一个策略发送撤单指令后,同时(此时委托单信息还未改变)另一个策略也发出撤单指令,此时就会出现”撤单错误“,是正确现象
3. 请问” 似乎导致在两个tick之间没法完成,会出一些问题“ 是出现什么问题

您正在查看3个答案中的1个,单击此处查看所有答案。