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 的下方,怎么运行?