from tqsdk import TqApi,TqAuth,tafunc,TqKq,TargetPosTask from tqsdk.ta import MA import time #初始化 #TqKq() 模拟交易的登录站点 #TqAuth 快期的账号 tq_kq = TqKq() api = TqApi(account=tq_kq, auth=TqAuth("forevertc","XXXXXX")) # 获取豆粕2305 10秒的K线 klines = api.get_kline_serial("DCE.i2305", 10) # 获取豆粕2305实时行情数据 quote = api.get_quote("DCE.M2305") print (quote.last_price, quote.volume) while True: api.wait_update() print (quote.datetime, quote.last_price) #初始化下单接口 target_pos = TargetPosTask(api,"DCE.M2305") #大循环 while True : print (quote.close) #print(klines.close) MA5 = tafunc .ma(klines.close, 5) MA10 = tafunc.ma(klines.close, 10) print(MA5[-20:]) print(MA10[-20:]) time.sleep(1000) #等待API有新的触发 比如行情触发、K线触发、交易触发 api.wait_update() #K线数据上的时间变化->有了新的K线 if api.is_changing(klines.iloc[-1], "datetime"): #[:-1] 意思是取第一个数到倒数第二个数 MA5 = tafunc.ma(klines.close[:-1], 5) MA10 = tafunc.ma(klines.close[:-1], 10) if list(tafunc.crossup(MA5,MA10))[-1]: print('上穿做多',list(MA5[-1],list(MA10)[-1])) target_pos.set_target_volume(1) if list(tafunc.crsoodown(MA5,MA10))[-1]: print('下穿做空',list(MA5)[-1],list(MA10)[-1]) target_pos.set_target_volume(-1)
想写一个豆粕2305的双均线模拟交易程序进行模拟盘,但运行不成功,请各位走过路过的大神帮忙看一看,修改一下,感谢感谢
juyangyang93 已回答的问题 2023年2月21日
程序启动后,进行到查询合约时抛出了个异常,根本原因是你的合约代码写错了,
""" 获取指定合约的盘口行情. Args: symbol (str): 指定合约代码。 Returns: :py:class:`~tqsdk.objs.Quote`: 返回一个盘口行情引用. 其内容将在 :py:meth:`~tqsdk.api.TqApi.wait_update` 时更新. 注意: 1. 在 tqsdk 还没有收到行情数据包时, 此对象中各项内容为 NaN 或 0 2. 天勤接口从0.8版本开始,合约代码格式变更为 交易所代码.合约代码 的格式. 可用的交易所代码如下: * CFFEX: 中金所 * SHFE: 上期所 * DCE: 大商所 * CZCE: 郑商所 * INE: 能源交易所(原油) * SSE: 上交所 * SZSE: 深交所 * GFEX: 广期所 Example1:: # 获取 SHFE.cu1812 合约的报价 from tqsdk import TqApi, TqAuth api = TqApi(auth=TqAuth("信易账户", "账户密码")) quote = api.get_quote("SHFE.cu1812") print(quote.last_price) while api.wait_update(): print(quote.last_price) # 预计的输出是这样的: nan 24575.0 24575.0 ... Example2:: # 协程示例,为每个合约创建 task from tqsdk import TqApi, TqAuth async def demo(SYMBOL): quote = await api.get_quote(SYMBOL) # 支持 await 异步,这里会订阅合约,等到收到合约行情才返回 print(f"quote: {SYMBOL}", quote.datetime, quote.last_price) # 这一行就会打印出合约的最新行情 async with api.register_update_notify() as update_chan: async for _ in update_chan: if api.is_changing(quote): print(SYMBOL, quote.datetime, quote.last_price) # ... 策略代码 ... api = TqApi(auth=TqAuth("信易账户", "账户密码")) symbol_list = ["SHFE.rb2107", "DCE.m2109"] # 设置合约代码 for symbol in symbol_list: api.create_task(demo(symbol)) # 为每个合约创建异步任务 while True: api.wait_update() """
api = TqApi(auth=TqAuth("信易账户", "账户密码")) # 这个是获取大商所下面的PVC2305的主力合约盘口信息 quote = api.get_quote("DCE.v2305") print(quote.last_price) while api.wait_update(): print(quote.last_price)
juyangyang93 已回答的问题 2023年2月21日
1. 不成功的出错信息没有贴
2. 账号密码直接发出来了
3. 大段的逻辑代码放在 while true 的下方,怎么运行?