金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 241|回复: 3

我把软件自带Pyth均线范例修改为EMA,但为什么信号总是错误,请老师帮忙指正

[复制链接]

2

主题

4

帖子

4

积分

Rank: 1

等级: 新手上路

注册:
2025-6-17
曾用名:
发表于 2025-6-17 17:15 | 显示全部楼层 |阅读模式

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
#简单的期货趋势策略,选用简单的均线金叉死叉进行买卖
import time
import os
import csv
import numpy
import talib as ta
import numpy as np
import talib

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

# 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)
    if len(close) < context.long_period+1 :
        return
    ma10 = ta.EMA(close,context.short_period)
    ma60 = ta.EMA(close,context.long_period)
    #logger.info('ma5均线'+str(ma5[-1])+'ma20均线'+str(ma20[-1]))
    if ma10[-1]<ma60[-1] and ma10[-2]>ma60[-2]:
        sell_open(context.s1, "market", volume=100,serial_id = 1)
    if ma10[-1]>ma60[-1] and ma10[-2]<ma60[-2]:
        portfolio = get_portfolio(context.s1,0)
        buy_close(context.s1,"market", volume=portfolio.buy_quantity,serial_id = 2)

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass




补充内容 (2025-6-17 17:16):
我只是把官方范例的参数修改了,以及下方 ma10 = ta.EMA(close,context.short_period) 把原先ta.SMA改成了EMA,这个策略很简单,但为什么信号总是发生错误,很苦恼,不知道是哪里出了问题

补充内容 (2025-6-17 19:41):
我从官网发现EMA数据需要的5倍以上,然后我直接用400k实验了下,发现信号正常了,但这个是回测,请问老师,假设在下载好数据前提下,我实盘如6月18开始启动,行情是会自动预载400K么,而不用担心数据不足导致错误

补充内容 (2025-6-17 19:55):
因为我在回测时候发现,假如设定1月1号开始回测15分钟,明明我已经下载了全部数据,但行情还是会在拥有400K之后才开始执行信号,而时间会已经过了很久,那么实盘中会不会有这个问题
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-18 09:24 | 显示全部楼层
“行情是会自动预载400K么,而不用担心数据不足导致错误” 需要 在工具-数据补充 这里下载一定量的历史数据。

另外py的回测是先截取数据再进行回测计算,也就是无论你本地有多少数据,py的回测开始后,它不会额外再调用回测时间段之前的数据,这会导致某些指标在回测起始的一段时间内 无法有效计算。因此你如果要回测某个日期开始的信号,你实际设置的区间要大于这个开始日期 以确保有冗余数据参与计算。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

4

帖子

4

积分

Rank: 1

等级: 新手上路

注册:
2025-6-17
曾用名:
 楼主| 发表于 2025-6-18 15:14 | 显示全部楼层
技术009 发表于 2025-6-18 09:24
“行情是会自动预载400K么,而不用担心数据不足导致错误” 需要 在工具-数据补充 这里下载一定量的历史数据 ...

老师你好,请问获取账户手中持仓是多还是空,用哪一个函数,我在官网api找了许久,只发现get_portfolio_book 投资组合持仓品种,和get_portfolio 投资组合信息 这些函数,但没发现有返回是多仓空仓相关,

补充内容 (2025-6-18 15:50):
老师你好,我在函数里面找到了portfolio对象buy_quantity(多头总持) ell_quantity(空头总持),那么我能否用  if  portfolio.buy_quantity > 0 这个格式去判断手中是否多仓。

补充内容 (2025-6-18 15:56):
老师你好,我发现官网有很多PEL和VBA函数,请问我可以用python调用吗,是需要把他们当成库安装还是用,call_vba 函数执行VBA函数调用计算 比如call_vba() 或者call_pel去调用,另外vba的话,是支持vba里面所有函数吗
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-18 16:35 | 显示全部楼层
“请问获取账户手中持仓是多还是空”  多空需要分别查询的。你持仓有可能多空都有的。

你用get_portfolio  就像,获取到具体的portfolio 对象。其中包含了多空相关的字段值。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 05:51 , Processed in 0.171941 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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