金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2202|回复: 6

求老师帮忙看下为什么我的MACD策略回测没法发生交易

[复制链接]

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
发表于 2022-6-16 09:47 | 显示全部楼层 |阅读模式
from PythonApi import *
import time
import os
import csv
import numpy
import talib as ta

#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    context.s1 = context.run_info.base_book_id
    context.ema_short = 12
    context.ema_long = 26
    context.dea = 9

# before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现)
def before_trading(context):
    pass

# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
    close = history_bars(context.s1, context.ema_long+1, 'self', 'close',True)
    if len(close) < context.ema_long+1 :
        return
    DIFF = ta.EMA(close,context.ema_short) - ta.EMA(close,context.ema_long)
    DEA = ta.EMA(DIFF,context.dea)
    MACD = 2*(DIFF-DEA)
    if DIFF[-1] > DEA[-1] and DIFF[-2] < DEA[-2]:
        buy_open(context.s1,"market",volume = 100,serial_id = 1) and buy_close(context.s1,"market",volume = 100)
    if DIFF[-1] < DEA[-1] and DIFF[-2] > DEA[-2]:
        sell_close(context.s1,"market", volume = 100,serial_id = 2) and sell_open(context.s1,"market", volume = 100)

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

回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-6-16 10:26 | 显示全部楼层
if DIFF[-1] > DEA[-1] and DIFF[-2] < DEA[-2]:
       print(55)
        buy_open(context.s1,"market",volume = 100,serial_id = 1) and buy_close(context.s1,"market",volume = 100)
    if DIFF[-1] < DEA[-1] and DIFF[-2] > DEA[-2]:
        sell_close(context.s1,"market", volume = 100,serial_id = 2) and sell_open(context.s1,"market", volume = 100)


自己加一些print看下,学会调试看程序是否执行进入条件里
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-16 13:30 | 显示全部楼层
老师,加了print之后再进行回测,什么内容都没有print出来,然后回测结果也还是没有,说明程序没有进入if条件里,那请问是哪里的代码出了问题呢?
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-6-16 13:42 | 显示全部楼层
close
diff
dea这些个数据都可以输出看下
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-16 14:31 | 显示全部楼层
老师,麻烦你再看下,输出的结果是这样的。

CLOSE

CLOSE

DIFF

DIFF

DEA

DEA
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-6-16 14:47 | 显示全部楼层
这不是很明显吗,diff数据量只有两个,这样dea也会没有
你要看talib返回的长周期和额短周期的ema是多少

附:真心建议这种技术分析做期货的话,直接用pel不要用python不要用python不要用python不要用python不要用python
重要事情说几遍,真的完全没意义,很多人对talib库也不熟悉,你要掌握这几个指标还要了解数据量够不够等等问题了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-16 14:56 | 显示全部楼层
好的,我明白了,谢谢老师。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 12:30 , Processed in 0.338443 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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