928 浏览
0

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日

1. 不成功的出错信息没有贴
2. 账号密码直接发出来了
3. 大段的逻辑代码放在 while true 的下方,怎么运行?

0

程序启动后,进行到查询合约时抛出了个异常,根本原因是你的合约代码写错了,

"""
获取指定合约的盘口行情.

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日
您正在查看2个答案中的1个,单击此处查看所有答案。