金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

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

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

[复制链接]

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
回复

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-15 14:55 | 显示全部楼层
技术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点平仓,实际是没有到目标就平仓了(触发条件:开仓后价格与开仓价相差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
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

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

初始止损的条件存在理解问题。稍后会连同下面的问题一并修改给您。
其他问题:初始止损为开仓当根k线对应的最低价而非开仓价?
1.强平和保本都是从首次开仓的第二根k开始生效?
2.强平的20个点指的是变动价位,而保本中的各个点,指的是价格?
//持仓情况:2手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
3.这个地方指的是最近一次加仓位置到当前位置区间内的最大浮动盈利>6点,还是首次开仓后到当前的最大浮动盈利>6点?





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

使用道具 举报

75

主题

193

帖子

193

积分

等级: 免费版

注册:
2023-4-11
曾用名:
 楼主| 发表于 2023-4-15 21:50 | 显示全部楼层
技术006 发表于 2023-4-15 15:16
初始止损的条件存在理解问题。稍后会连同下面的问题一并修改给您。
其他问题:初始止损为开仓当根k线对应 ...

首先感谢老师的耐心,非常感谢!


初始止损的条件存在理解问题。稍后会连同下面的问题一并修改给您。
其他问题:初始止损为开仓当根k线对应的最低价而非开仓价?答:初始止损价格为开仓当根K线对应的最低价(如果是空头开仓则对应的是开仓当根K线的最高价)。

1.强平和保本都是从首次开仓的第二根k开始生效?
答:强平和初始止损两个平仓策略都是从首次开仓的第二根K线开始生效,初始止损和强平仅适用于1手开仓,保本平仓的触发机制为从开仓后第2根K线开始计算,1手(开仓时的价格),2手(2手开仓的平均价),3手(3手开仓的平均价)与现价相等时执行保本平仓;

2.强平的20个点指的是变动价位,而保本中的各个点,指的是价格?
答:变动价位可能是一种换算方式吧,本意是开仓后单个品种浮亏达到20点时就强平该品种的持仓,例如棕榈多单5000开仓1手,当价格下行至4980时则执行强平;

//持仓情况:2手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
3.这个地方指的是最近一次加仓位置到当前位置区间内的最大浮动盈利>6点,还是首次开仓后到当前的最大浮动盈利>6点?

答:出现这种情况应该只会触发保本平仓,因为采用的是浮盈加仓的方式,这个地方指的是最后一次加仓的位置到当前位置区间内最大浮盈>6点后价格回落,当(当前价格-(2手以上持仓的持仓均价)=0)触发保本时则平仓,例如棕榈油5000开多1手,5030加仓1手,持仓均价为5015,当前价格为5030,
      如果价格回落至5015(2手持仓均价)时,则保本全平。
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-15 22:23 | 显示全部楼层
本帖最后由 技术006 于 2023-4-16 07:55 编辑

问题3.您红色部分的描述中,和【触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价 <=2  保本平仓所有仓位;】存在不一致。

按照我的理解是当浮动盈亏大于6个变动价位后,如果发生回落,当回落至2个变动价位或者2元以内时平仓。而你最后一次描述中,没有体现出【<=2】这个条件,而是是直接回落到均价位置。
其次按照你的例子n个点指得是n元,不是n个变动价位。虽然最终都是换算成价格,但是会影响止盈止损的点位。下面这个示例是按照最后一次的表述进行的调整。
[PEL] 复制代码
VARIABLE:BUYPRICE=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 and holding=0 THEN BEGIN
   多开:BUY(1,1,MARKETR);
   BUYPRICE:=LOW;  //开仓单根k对应的最低价
  END

//调试代码,放在止盈止损前面
KCLOW:BUYPRICE;//开仓当根k上的最低价
FY:OPENPROFIT;//浮动盈亏
JJ:AVGENTERPRICE;

bar:TYPEBAR(1,1)+1;
//1:初始止损
//持仓情况:1手持仓
//解发平仓:当开仓后,初始止损为开仓位K线最低价,触发则立即止损;(即跌破开仓位置的最低价止损)

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


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

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

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

MAX_OPENPROFIT:HHV(OPENPROFIT,bar);//开仓以来最大的浮动盈亏的价格

//***********************************************************************************
//如果保本中提到的点数是不是价格,而是变动价位,直接在对应位置*MINDIFF部分。如:>=8*MINDIFF
//下面条件注释部分(56,66,74行)是最大浮盈大于N后回落到持仓2个变动价位的浮盈时平仓
//非注释条件部分,是最大浮盈大于N后回落到持仓均价时平仓。
//***********************************************************************************
//IF HOLDING=1  AND HHV(OPENPROFIT,bar)>=8*MINDIFF AND OPENPROFIT<=2*MINDIFF THEN BEGIN

IF HOLDING=1  AND HHV(OPENPROFIT,bar)>=8 AND AVGENTERPRICE>=CLOSE THEN BEGIN
        保本1:SELL(1,1,MARKETR);
END
 
//持仓情况:2手持仓(多次开仓)
//触发平仓:当开仓后浮动盈利>6点,后当收盘价 - 多持仓均价  <=2  保本平仓所有仓位;
 

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




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

使用道具 举报

12

主题

56

帖子

56

积分

等级: 免费版

注册:
2024-4-26
曾用名:
发表于 2024-5-29 14:36 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-28 03:05 , Processed in 0.095948 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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