金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 7576|回复: 15

请老师辛苦帮忙实现一下平仓策略,感谢,感谢

[复制链接]

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
发表于 2023-4-12 21:53 | 显示全部楼层 |阅读模式
多单平仓策略
1:初始止损
持仓情况:1手持仓
解发平仓:当开仓后,初始止损为开仓位K线最低价,触发则立即止损;
2:强制平仓:
持仓情况:1手持仓
触发平仓:当前K线收盘价 - 多持仓均价  <= -20点(对应变动单位),强制平仓;
3:保本平仓
持仓情况:1手持仓(单次开仓)
触发平仓:当开仓后浮动盈利>8点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
持仓情况:2手持仓(多次开仓)
触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
持仓情况:3手持仓(多次开仓)
触发平仓:当开仓后浮动盈利>4点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;

空单平仓策略
1:初始止损
持仓情况:1手持仓
解发平仓:当开仓后,初始止损为开仓位K线最高价,触发则立即止损;
2:强制平仓:
持仓情况:1手持仓
触发平仓:当前K线收盘价 - 空持仓均价  <= -20点(对应变动单位),强制平仓;
3:保本平仓
持仓情况:1手持仓(单次开仓)
触发平仓:当开仓后浮动盈利>8点,空持仓均价 - 当根K线收盘价  <=2  保本平仓所有仓位;
持仓情况:2手持仓(多次开仓,采用浮盈加仓)
触发平仓:当开仓后浮动盈利>6点,空持仓均价 - 当根K线收盘价  <=2  保本平仓所有仓位;
持仓情况:3手持仓(多次开仓,采用浮盈加仓)
触发平仓:当开仓后浮动盈利>4点,空持仓均价 - 当根K线收盘价  <=2  保本平仓所有仓位;

万分感谢老师给于帮忙!

回复

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-15 14:52 | 显示全部楼层
技术006 发表于 2023-4-14 19:21
先提供多头部分的代码,你看下是不是符合你的需求。有问题的地方我们在具体沟通处理。
[mw_shl_code=pel,t ...

感谢老师回复,测试后发现如下问题

VARIABLE:HIGHPRICE=0;
EMA13:=EMA(C,10),COLORWHITE;
EMA21:=EMA(C,21),COLORYELLOW;
EMA34:=EMA(C,34),COLORFF00FF;
EMA60:=MA(C,55),COLORFFCC66;
X1:=(C+L+H)/3;
X2:=EMA(X1,5);
X3:=EMA(X2,4);
MID:=(3*CLOSE+LOW+OPEN+HIGH)/6;
AA:(20*MID+19*REF(MID,1)+18*REF(MID,2)+17*REF(MID,3)+16*REF(MID,4)+15*REF(MID,5)+14*REF(MID,6)+13*REF(MID,7)+12*REF(MID,8)+11*REF(MID,9)+10*REF(MID,10)+9*REF(MID,11)+8*REF(MID,12)+7*REF(MID,13)+6*REF(MID,14)+5*REF(MID,15)+4*REF(MID,16)+3*REF(MID,17)+2*REF(MID,18)+REF(MID,20))/210,COLORRED;
DK:=IF(X2>X3 AND C>EMA13 AND CROSS(C,AA),1,0);
KK:=IF(X2<X3 AND C<EMA13 AND CROSS(AA,C),1,0);

//开多单
  IF DK THEN BEGIN
   多开:BUY(1,1,MARKET);
  // HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
  END


bar:TYPEBAR(1,1)+1;

//1:初始止损
//持仓情况:1手持仓
//解发平仓:当开仓后,初始止损为开仓位K线最低价,触发则立即止损;
//**********经测试,初始止损平仓逻辑不正确,应该为:例如棕榈油05合约多开后,从第二根K线开始计算,价格下破多开时当根K线的最低价,初始止损平仓

IF HOLDING=1 AND TYPEBAR(1,1)>0 AND ENTERPRICE<LOW THEN BEGIN
        初始止损:SELL(1,1,MARKET);
END
DRAWNUMBER(ENTERPRICE-LOW>0,LOW,ENTERPRICE-LOW,0);



//2:强制平仓:
//持仓情况:1手持仓
//触发平仓:当前K线收盘价 - 多持仓均价  <= -20点(对应变动单位),强制平仓;
//**********经测试,强制平仓执行的逻辑不正确,例如棕榈油05合约,多开后从第二根K线开始计算,应亏损达到20点平仓,实际是没有到目标就平仓了(触发条件:开仓后从第2根K线开始计算与开仓价相差-20点,强制平仓)



IF HOLDING=1  AND TYPEBAR(1,1)>0 AND OPENPROFIT<=-20*MINDIFF THEN BEGIN
        强平:SELL(1,1,MARKET);
END


//3:保本平仓
//持仓情况:1手持仓(单次开仓)
//触发平仓:当开仓后浮动盈利>8点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
//**********经测试,实际盘中没有看到效果,该策略触发条件:例如棕榈油05合约,多单开仓价为5000,价格上涨至5010(浮盈超过8点)后回落至当时多开价格5000(或多持仓价格5000),保本平仓

IF HOLDING=1  AND HHV(OPENPROFIT,bar)>=8*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN
        保本1:SELL(1,1,MARKET);
END

//持仓情况:2手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
//**********还未测试,

IF HOLDING=2  AND TYPEBAR(1,1)>0 AND HHV(OPENPROFIT,bar)>=6*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN
        保本2:SELL(1,2,MARKET);
END

//持仓情况:3手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>4点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
//**********还未测试,
IF HOLDING=3  AND TYPEBAR(1,1)>0 AND HHV(OPENPROFIT,bar)>=4*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN
        保本3:SELL(1,3,MARKET);
END
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-4-13 09:25 | 显示全部楼层
本帖最后由 技术009 于 2023-4-13 09:40 编辑

如果你这个是图表程序化模型,是需要有完整的 开仓和平仓逻辑的。
图表模型是从历史上某个位置开始 按照设置的开平条件一路推演下来的。所以不能没有开仓条件。

如果是后台程序化,后台程序化是可以直接读取实际持仓情况进行判断的。

需要确认你是要写成图表模型还是后台模型。然后再考虑其他的问题
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-13 12:52 | 显示全部楼层
感谢老师回复,我把开仓部份粘上来,请老师结合帮我看下,我就是平仓策略写不了,谢谢啊!
EMA13:=EMA(C,10),COLORWHITE;
EMA21:=EMA(C,21),COLORYELLOW;
EMA34:=EMA(C,34),COLORFF00FF;
EMA60:=MA(C,55),COLORFFCC66;
X1:=(C+L+H)/3;
X2:=EMA(X1,5);
X3:=EMA(X2,4);
MID:=(3*CLOSE+LOW+OPEN+HIGH)/6;
AA:(20*MID+19*REF(MID,1)+18*REF(MID,2)+17*REF(MID,3)+16*REF(MID,4)+15*REF(MID,5)+14*REF(MID,6)+13*REF(MID,7)+12*REF(MID,8)+11*REF(MID,9)+10*REF(MID,10)+9*REF(MID,11)+8*REF(MID,12)+7*REF(MID,13)+6*REF(MID,14)+5*REF(MID,15)+4*REF(MID,16)+3*REF(MID,17)+2*REF(MID,18)+REF(MID,20))/210,COLORRED;
DK:=IF(X2>X3 AND C>EMA13 AND CROSS(C,AA),1,0);
KK:=IF(X2<X3 AND C<EMA13 AND CROSS(AA,C),1,0);

//开多单
  IF DK THEN BEGIN
   多开:BUY(1=1,1,MARKET);
   HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
  END


//开空单
  IF KK THEN BEGIN
   空开:SELL(1=1,1,MARKET);
   HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
  END

回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-4-13 13:29 | 显示全部楼层
本帖最后由 技术009 于 2023-4-13 13:45 编辑

你不是有加仓的逻辑的么。  你上面开仓条件本身也是加仓条件?
还有就是“当开仓后浮动盈利>8点,后当收盘价 - 多持仓均价  <=2  ”你这里意思是最高盈利大于8个点后,盈利回撤到2个点?
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-13 20:25 | 显示全部楼层
技术009 发表于 2023-4-13 13:29
你不是有加仓的逻辑的么。  你上面开仓条件本身也是加仓条件?
还有就是“当开仓后浮动盈利>8点,后当收 ...

就是指开仓后,本品种盈利达到8个点(或变动单位)以上,价格回落至开仓均价+2点的位置平仓,起到保本的作用,如果开仓后直接反方向发展,造成亏损,则触发平仓策略1初始止损。平仓策略2实际上是平仓策略1未能执行后的保护。
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-13 21:05 | 显示全部楼层
1、【当开仓后,初始止损为开仓位K线最低价,触发则立即止损;】
1)在开仓的当根k上,由于最新价只会大于等于最低价,是不可能满足止损的,如果是大周期,并且行情一直下跌的时候,是存在风险的。这个位置上属于条件边界情况。要怎么处理?
2)这个初始止损价格,指的是第一次开仓时的价格。不受加仓的影响吧?

2、上诉需求中,都是围绕当前的持仓变化而变化。例如:当发生加仓后,1手持仓的的条件都不在满足。发生减仓后,1手持仓的控制条件再次启动。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-13 23:06 | 显示全部楼层
技术006 发表于 2023-4-13 21:05
1、【当开仓后,初始止损为开仓位K线最低价,触发则立即止损;】
1)在开仓的当根k上,由于最新价只会大于 ...

老师你好!
1)的计算起止位可以从开仓后的第二根K线算起,如果出现跳空,则会处罚平仓策略2强制平仓
2)的初始止损价格,仅限于1手持仓,所以不受加仓影响,1手以上情况应该只会触发保本平仓
2、您说的变化而变化是存在的,为了解决这个问题,所以所有平仓都采用该品种清仓方式,不存在减仓动作,平仓策略是采用仓位分支管理的方式。
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-14 08:52 | 显示全部楼层
本帖最后由 技术006 于 2023-4-14 08:53 编辑

关于【初始止损】,我说的是当根k开仓后,开仓价是不可能触及到最低价的。极端行情下也最多是相等。并且图表中的成交价都是按照收盘价或者开盘价作为成交价的。更体现不出来这个过程。所以这个条件基本上属于横不成立。需要你换一种定义方式或者舍弃它这个逻辑



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

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-14 15:54 | 显示全部楼层
技术006 发表于 2023-4-14 08:52
关于【初始止损】,我说的是当根k开仓后,开仓价是不可能触及到最低价的。极端行情下也最多是相等。并且图 ...

老师你好!
对这个问题我需求重新描述下,实际上初始止损是确认一个止损价位(多开时以开仓价当根K线最低点,空开时以开仓价当根K线最高点),所以开仓当根K线是不会触发的。
初始止损触发条件:当开仓后第二根K线触及初始止损位,则平仓

强制平仓:是对初始止损触发异常失效后的保护,所以也是一种固定止损。
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-14 19:21 | 显示全部楼层
先提供多头部分的代码,你看下是不是符合你的需求。有问题的地方我们在具体沟通处理。
[PEL] 复制代码
VARIABLE:HIGHPRICE=0;
EMA13:=EMA(C,10),COLORWHITE;
EMA21:=EMA(C,21),COLORYELLOW;
EMA34:=EMA(C,34),COLORFF00FF;
EMA60:=MA(C,55),COLORFFCC66;
X1:=(C+L+H)/3;
X2:=EMA(X1,5);
X3:=EMA(X2,4);
MID:=(3*CLOSE+LOW+OPEN+HIGH)/6;
AA:(20*MID+19*REF(MID,1)+18*REF(MID,2)+17*REF(MID,3)+16*REF(MID,4)+15*REF(MID,5)+14*REF(MID,6)+13*REF(MID,7)+12*REF(MID,8)+11*REF(MID,9)+10*REF(MID,10)+9*REF(MID,11)+8*REF(MID,12)+7*REF(MID,13)+6*REF(MID,14)+5*REF(MID,15)+4*REF(MID,16)+3*REF(MID,17)+2*REF(MID,18)+REF(MID,20))/210,COLORRED;
DK:=IF(X2>X3 AND C>EMA13 AND CROSS(C,AA),1,0);
KK:=IF(X2<X3 AND C<EMA13 AND CROSS(AA,C),1,0);

//开多单
  IF DK THEN BEGIN
   多开:BUY(1,1,MARKET);
  // HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
  END


//开空单
  IF KK THEN BEGIN
   空开:BUYSHORT(1,1,MARKET);
   //HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
  END


bar:TYPEBAR(1,1)+1;

//1:初始止损
//持仓情况:1手持仓
//解发平仓:当开仓后,初始止损为开仓位K线最低价,触发则立即止损;

IF HOLDING=1 AND TYPEBAR(1,1)>0 AND ENTERPRICE<LOW THEN BEGIN
        初始止损:SELL(1,1,MARKET);
END




//2:强制平仓:
//持仓情况:1手持仓
//触发平仓:当前K线收盘价 - 多持仓均价  <= -20点(对应变动单位),强制平仓;


IF HOLDING=1  AND OPENPROFIT<=-20*MINDIFF THEN BEGIN
        强平:SELL(1,1,MARKET);
END


//3:保本平仓
//持仓情况:1手持仓(单次开仓)
//触发平仓:当开仓后浮动盈利>8点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;


IF HOLDING=1  AND HHV(OPENPROFIT,bar)>=8*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN
        保本1:SELL(1,1,MARKET);
END

//持仓情况:2手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;


IF HOLDING=2 AND HHV(OPENPROFIT,bar)>=6*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN
        保本2:SELL(1,2,MARKET);
END

//持仓情况:3手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>4点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;

IF HOLDING=3 AND HHV(OPENPROFIT,bar)>=4*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN
        保本3:SELL(1,3,MARKET);
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-28 07:02 , Processed in 0.131541 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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