金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
12
返回列表 发新帖
楼主: 100021030

python talib库相关问题咨询

[复制链接]

7

主题

90

帖子

90

积分

Rank: 2

等级: 标准版

注册:
2024-11-26
曾用名:
 楼主| 发表于 2024-12-16 11:12 | 显示全部楼层
按照下面代码跑,12月1日至12月13日,1000股指2412,1分钟周期,会出现重复下单情况。其实只是把案例里面,sma改成了ema。不知道为啥会重复下单,帮忙排查下,谢谢。
import time
import os
import csv
import numpy
import talib as ta

def init(context):
    # 在context中设置一些参数
    context.s1 = context.run_info.base_book_id
    #两条均线的周期长度
    context.long_period = 20
    context.short_period = 5

# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    pass


# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑

    # bar_dict[order_book_id] 可以拿到某个证券的bar信息
    # context.portfolio 可以拿到现在的投资组合信息

    # 使用order_shares(id_or_ins, amount)方法进行落单

    # TODO: 开始编写你的算法吧!
    #获取交易品种价格,并产生对应的均线数据
    close = history_bars(context.s1, context.long_period+1, 'self', 'close',True)
    print(close)
    if len(close) < context.long_period+1 :
        return
    ma5 = ta.EMA(close,context.short_period)
    ma20 = ta.EMA(close,context.long_period)
    #logger.info('ma5均线'+str(ma5[-1])+'ma20均线'+str(ma20[-1]))
    if ma5[-1]>ma20[-1] and ma5[-2]<ma20[-2]:
        buy_open(context.s1, "market", volume=2,serial_id = 1)
    if ma5[-1]<ma20[-1] and ma5[-2]>ma20[-2]:
        portfolio = get_portfolio(context.s1,0)
        sell_close(context.s1,"market", volume=portfolio.buy_quantity,serial_id = 2)
   
def after_trading(context):
    pass
截图202412161111308762.png
截图202412161112011788.png
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-12-16 11:26 | 显示全部楼层
问题原因是数据量不够造成的。获取历史数据每次只21根k线,最终计算得到的ma20的结果只有2个有效值存在。不足以支撑ma20一个趋势性的指标线结果。(造成EMA算法计算时,K与K之间关联性较低)
history_bars取值数量示例中是21,直接指定一个大的取值数量。例如
close = history_bars(context.s1, context.long_period*10, 'self', 'close',True)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

18

主题

251

帖子

336

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2024-12-16 12:34 | 显示全部楼层
问题原因是数据量不够造成的。获取历史数据每次只21根k线,最终计算得到的ma20的结果只有2个有效值存在。不足以支撑ma20一个趋势性的指标线结果。(造成EMA算法计算时,K与K之间关联性较低)
history_bars取值数量示例中是21,直接指定一个大的取值数量。例如
close = history_bars(context.s1, context.long_period*10, 'self', 'close',True)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-4-21 13:31 , Processed in 0.160098 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表