3.64K 浏览
0

rb2010_10sec=api.get_kline_serial("SHFE.rb2010",60)
while api.wait_update():
    print(datetime.fromtimestamp(rb2010_10sec["datetime"].iloc[-1]/1000000000),time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))
    if api.is_changing(rb2010_10sec.iloc[-1],"datetime"):
       print("~~~~~~~~~~~~~",time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))

理论上,rb2010成交量很高,每分钟都会有一个~~~~~~~~输出。
经常是过了好几分钟,才会有一次~~~~~~~~输出。很奇怪,说明用is_changing 和datetime判断K线的更新是不稳定的。

空月 辰 编辑评论 2020年3月11日

主要看print的位置,api.wait_update() 和 is_changing的地方,
用 datetime来判断的 应该是60秒输出一次。但是经常过了几分钟,都没有输出

from tqsdk import TqApi
from datetime import date
from datetime import *
from tqsdk import TqAccount
from tqsdk import ta,tafunc,sim,TargetPosTask,TqBacktest
import time
# 创建API实例.

#api = TqApi(backtest=TqBacktest(start_dt=date(2020, 3, 5), end_dt=date(2020, 3, 5)))
#api =TqApi()

api = TqApi(TqAccount())

rb2010 = api.get_quote(“SHFE.rb2010”)

rb2010_10sec=api.get_kline_serial(“SHFE.rb2010″,60)

order1={}
order2={}
order3={}
order4={}
#删掉所有未成交委托单
orderlist=api.get_order()
for i in orderlist:
if api.get_order(i).status==”ALIVE”:
api.cancel_order(i)
print(“删掉所有委托单”)

sellflag=0
buyflag=0
position=api.get_position(“SHFE.rb2010”)
account=api.get_account()
position2=api.get_position()

print(account.close_profit,account.balance)

rb2010_10sec.to_csv(r’E:tqsdkcodeabc.csv’)
#print(position2)
while api.wait_update():
#在主图上画均线
#api.wait_update()
macd=ta.MACD(rb2010_10sec,12,26,9)
#rb2010_10sec[“diff”]=diff
#rb2010_10sec[“dea”]=dea
#平掉所有留仓
condition1= macd[“diff”].iloc[-1] > macd[“dea”].iloc[-1] and macd[“diff”].iloc[-2]<=macd["dea"].iloc[-2];
condition2= macd["diff"].iloc[-1] =macd[“dea”].iloc[-2];

print(“************************”,time.strftime(“%Y-%m-%d %H:%M:%S”,time.localtime(time.time())),condition1,condition2)
print(datetime.fromtimestamp(rb2010_10sec[“datetime”].iloc[-1]/1000000000),time.strftime(“%Y-%m-%d %H:%M:%S”,time.localtime(time.time())))

if sellflag==0 and buyflag==0 and api.is_changing(rb2010_10sec):
print(“long=”,position.pos_long,”short=”,position.pos_short)
#print(“buyflag”,buyflag,”sellflag”,sellflag)
if sellflag==0 and position.pos_long!=0:
api.wait_update()
api.insert_order(symbol=”SHFE.rb2010″, direction=”SELL”, offset=”CLOSETODAY”, volume=position.pos_long, limit_price=rb2010_10sec.iloc[-2].close-1)
sellflag=1
if buyflag==0 and position.pos_short!=0:
api.wait_update()
api.insert_order(symbol=”SHFE.rb2010″, direction=”BUY”, offset=”CLOSETODAY”, volume=position.pos_short, limit_price=rb2010_10sec.iloc[-2].close+1)
buyflag=1
sellflag=1
buyflag=1

#

if api.is_changing(rb2010_10sec.iloc[-1],”datetime”):

print(“~~~~~~~~~~~~~~~每分钟输出:”,macd[“diff”].iloc[-1],macd[“dea”].iloc[-1],”~~~~~~~~~~~”)
# print(rb2010_10sec.iloc[-2].datetime,rb2010_10sec.iloc[-2].open,rb2010_10sec.iloc[-2].high,rb2010_10sec.iloc[-2].low,rb2010_10sec.iloc[-2].close)
print(time.strftime(“%Y-%m-%d %H:%M:%S”,time.localtime(time.time())),position.pos_long,position.pos_short,condition1,condition2)

要不你删减一下吧,只留下输出K线信息的那几句,这个太长了,而且缩进有问题

from tqsdk import TqApi
from datetime import date
from datetime import *
from tqsdk import TqAccount
from tqsdk import ta,tafunc,sim,TargetPosTask,TqBacktest
import time

api = TqApi(TqAccount())
rb2010 = api.get_quote(“SHFE.rb2010”)
rb2010_10sec=api.get_kline_serial(“SHFE.rb2010”,60)
while api.wait_update():
macd=ta.MACD(rb2010_10sec,12,26,9)
print(datetime.fromtimestamp(rb2010_10sec[“datetime”].iloc[-1]/1000000000),time.strftime(“%Y-%m-%d %H:%M:%S”,time.localtime(time.time())))
#if语句是在 while循环里面的
if api.is_changing(rb2010_10sec.iloc[-1],”datetime”):
print(“~~~~~~~~~~~~~~~每分钟输出:”,macd[“diff”].iloc[-1],macd[“dea”].iloc[-1],”~~~~~~~~~~~”)

0

因为即使没有成交,也会在每分钟新生成一根K线

你的代码里只有这几句还是有其他操作?比如time.sleep()之类的

west 发表新评论 2020年3月11日

如果可以的话,请提供一个简短的可重现代码

上面的简单代码贴出来了,
add coment 里面添加代码,没有办法正常缩进,有木有QQ群啊?

找到问题了,是写了好几个 api.wait_update()导致的!

tqsdk交流群,群号 619870862,需要先给GitHub打星才能加入哦。
github: https://github.com/shinnytech/tqsdk-python

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