金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4623|回复: 10

请问老师为什么我的期货止损止盈策略不能有效降低回撤?

[复制链接]

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
发表于 2022-6-28 10:23 | 显示全部楼层 |阅读模式
//止盈
WIN:=0;
WIN2:=0;
IF HOLDING>0 AND ENTERBARS>0 THEN
BEGIN
        WIN:=(C-ENTERPRICE)/ENTERPRICE*100;
END

IF HOLDING<0 AND ENTERBARS>0 THEN
BEGIN
        WIN2:=(ENTERPRICE-C)/ENTERPRICE*100;
END
SELL(WIN>60,0,MARKET);
SELLSHORT(WIN2>60,0,MARKET);

//止损
SELL(WIN<-2,0,MARKET);
SELLSHORT(WIN2<-2,0,MARKET);

回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-28 10:33 | 显示全部楼层
你说明问题 你不能只扔一段代码。代码我没看出来啥问题,这就是范例里的代码。你应该给出一个反应你这个问题的具体场景,截下图表上的信号之类的。

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

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-28 11:38 | 显示全部楼层
麻烦老师帮我看一下,这是我写的策略,用KDJ和BOLL对MACD金叉死叉做了限制,但无论是运行在5分钟线还是日线上回撤都特别高,请问老师问题出在哪里了呢?

//变量
INPUT:S(12,5,30,3);
INPUT:P(26,20,40,2);
INPUT:M1(9,2,20,2);
DIFF:=EMA(CLOSE,S) - EMA(CLOSE,P);//离差值
DEA:=EMA(DIFF,M1);//离差平均值
MACD:=2*(DIFF-DEA);//指数平滑异同移动平均线

INPUT:N(9,1,100,10);
INPUT:P1(3,2,10,1);
INPUT:P2(3,2,10,1);
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//未成熟随机值
K:=SMA(RSV,P1,1);//K值
D:=SMA(K,P2,1);//D值
J:=3*K-2*D;//J值

INPUT:M(26,5,100,10);
INPUT:T(2,0.4,10,1);
MID:=MA(CLOSE,M);//布林中轨
UPPER:=MID + T*STD(CLOSE,M);//布林上轨
LOWER:=MID - T*STD(CLOSE,M);//布林下轨

手数:=SS;
INPUT:SS(1,1,10000,1);

//交易条件
平多:=CROSS(0,MACD);//平多条件
平空:=CROSS(MACD,0);//平空条件
开多:=CROSS(MACD,0);//开多条件
开空:=CROSS(0,MACD);//开空条件
多头安全区:=D<K<90;//KDJ多头安全区
空头安全区:=K<D;//KDJ空头安全区
多头状态:=MID<CLOSE<UPPER;//BOLL多头状态
空头状态:=LOWER<CLOSE<MID;//BOLL空头状态

//平仓交易系统
IF 空头安全区 AND 空头状态 THEN
SELL(平多,0,MARKET);

IF 多头安全区 THEN
SELLSHORT(平空,0,MARKET);

//止盈
WIN:=0;
WIN2:=0;
IF HOLDING>0 AND ENTERBARS>0 THEN
BEGIN
        WIN:=(C-ENTERPRICE)/ENTERPRICE*100;
END

IF HOLDING<0 AND ENTERBARS>0 THEN
BEGIN
        WIN2:=(ENTERPRICE-C)/ENTERPRICE*100;
END
SELL(WIN>60,0,MARKET);
SELLSHORT(WIN2>60,0,MARKET);

//止损
SELL(WIN<-2,0,MARKET);
SELLSHORT(WIN2<-2,0,MARKET);

//开仓交易系统
IF 多头安全区 AND 多头状态 THEN
BUY(开多,1,MARKET);

IF 空头安全区 THEN
BUYSHORT(开空,1,MARKET);

当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-28 12:58 | 显示全部楼层
你这个回撤平仓写的不对
https://www.weistock.com/bbs/for ... &extra=page%3D1

你参考原先的范例。

你这个win,win2 成了多和空 浮动盈亏比例。根本没体现任何回撤的思路。建议你自行看下上面范例里的操作方式。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-28 14:06 | 显示全部楼层
老师,我按照范例修改过了,回测的结果仍旧不理想,请问是多仓和空仓的问题吗?

//变量
INPUT:S(12,5,30,3);
INPUT:P(26,20,40,2);
INPUT:M1(9,2,20,2);
DIFF:=EMA(CLOSE,S) - EMA(CLOSE,P);//离差值
DEA:=EMA(DIFF,M1);//离差平均值
MACD:=2*(DIFF-DEA);//指数平滑异同移动平均线

INPUT:N(9,1,100,10);
INPUT:P1(3,2,10,1);
INPUT:P2(3,2,10,1);
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//未成熟随机值
K:=SMA(RSV,P1,1);//K值
D:=SMA(K,P2,1);//D值
J:=3*K-2*D;//J值

INPUT:M(26,5,100,10);
INPUT:T(2,0.4,10,1);
MID:=MA(CLOSE,M);//布林中轨
UPPER:=MID + T*STD(CLOSE,M);//布林上轨
LOWER:=MID - T*STD(CLOSE,M);//布林下轨

手数:=SS;
INPUT:SS(1,1,10000,1);

//交易条件
平多:=CROSS(0,MACD);//平多条件
平空:=CROSS(MACD,0);//平空条件
开多:=CROSS(MACD,0);//开多条件
开空:=CROSS(0,MACD);//开空条件
多头安全区:=D<K<90;//KDJ多头安全区
空头安全区:=K<D;//KDJ空头安全区
多头状态:=MID<CLOSE<UPPER;//BOLL多头状态
空头状态:=LOWER<CLOSE<MID;//BOLL空头状态
VARIABLE:MAXPROFIT:=0;

//平仓交易系统
IF 空头安全区 AND 空头状态 THEN
SELL(平多,0,LIMIT,C);

IF 多头安全区 THEN
SELLSHORT(平空,0,LIMIT,C);

//开仓交易系统
IF 多头安全区 AND 多头状态 THEN
BEGIN
BUY(开多,1,LIMIT,C);
MAXPROFIT:=0;
END

IF 空头安全区 THEN
BEGIN
BUYSHORT(开空,1,LIMIT,C);
MAXPROFIT:=0;
END

//判断当前持仓状态下的最大盈利
WIN:=0;
WIN2:=0;
IF HOLDING>0 AND ENTERBARS>0 THEN
BEGIN
        WIN:=(C-ENTERPRICE)/ENTERPRICE*100;
        IF WIN>MAXPROFIT THEN
                MAXPROFIT:=WIN;
        WIN2:=(MAXPROFIT-WIN)/MAXPROFIT*100;
END

IF HOLDING<0 AND ENTERBARS>0 THEN
BEGIN
        WIN:=(ENTERPRICE-C)/ENTERPRICE*100;
        IF WIN>MAXPROFIT THEN
                MAXPROFIT:=WIN;
        WIN2:=(MAXPROFIT-WIN)/MAXPROFIT*100;
END

//止损
SELL(WIN<-2,0,LIMIT,C);
SELLSHORT(WIN<-2,0,LIMIT,C);

//止盈
SELL(WIN2>60 AND OPENPROFIT>0,0,LIMIT,C);
SELLSHORT(WIN2>60 AND OPENPROFIT>0,0,LIMIT,C);

当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;


截图202206281404172905.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-28 14:17 | 显示全部楼层
是平仓没体现从高点回撤的效果?

代码上还有点问题 你这个if后面条件不是完整的开仓条件,导致全局变量的重置根本不是和开仓一致的。


//开仓交易系统
IF 多头安全区 AND 多头状态 and holding=0 THEN
BEGIN
BUY(开多,1,LIMIT,C);
MAXPROFIT:=0;
END

IF 空头安全区 and holding=0 THEN
BEGIN
BUYSHORT(开空,1,LIMIT,C);
MAXPROFIT:=0;
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-28 15:54 | 显示全部楼层
老师,我照您说的添加了“Holding=0”,也检查了图表上的交易信号,是体现了从高点回撤时平仓的,但很奇怪,您看我附上的两张图片,2021年7月30日01:55:00这个时刻,图表上显示的交易信号是“平多/开空”,回测结果中显示的交易是“平空/开多”,两边的价格也不相符,请问是哪里出问题了呢? 图表.jpg [url=][/url]
回测.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-28 16:08 | 显示全部楼层
你看下回测的第一笔交易和图表上的是不是一致的。

有时候是图上和你回测时候数据起点位置不一样导致的额。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

18

帖子

18

积分

Rank: 1

等级: 新手上路

注册:
2022-6-15
曾用名:
 楼主| 发表于 2022-6-28 16:21 | 显示全部楼层
老师,回测起点时的两笔交易不一致,后面的时间就基本一致了,但都存在多空仓相反的情况。而且有些交易会会延后到交易点的下一个时刻才交易成功,请问老师限价交易本身就存在这种情况吗?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-28 16:23 | 显示全部楼层
那就是起点差异导致的。

你直接
截图202206281623134496.png

在图上右键  然后这样回测,数据量这样就一样了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-5 00:42 , Processed in 0.195978 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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