金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 894|回复: 0

简单图表策略改后台代码

[复制链接]

34

主题

9006

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-4-1 09:38 | 显示全部楼层 |阅读模式
本帖最后由 技术006 于 2024-4-1 10:34 编辑

后台程序化函数例如THOLDING返回的是当前我们实际的持仓,故多策略同品种会出现因为持仓和资金相互干扰的现象。解决方案是使用图表的HOLING的虚拟持仓和资金与后台的TBUY,TSELL等混用的方案,每个策略里的持仓和资金都是自己独立的,这样就完全可以避免这种共振现象,但是推荐高级用户使用。

[PEL] 复制代码
INPUT:P(50,2,200,1){建仓量},P1(1,0,50,1){初始止损幅度},P2(5,2,100,1){止盈幅度},P3(30,5,60,5){回撤止盈};VARIABLE:MAXPROFIT=0,{有仓位时最大获利幅度}VMIN = 090000;{用于隔夜高开或低开时间差}                
WIN1:=0;                                                           
WIN2:=0;//止盈、止损、回撤控制

交易时间:=TIME>VMIN AND TIME<151430;

a:=open+10;
b:=open-10;

HNL:=IF(HIGH>REF(HHV(HIGH,3),1),LOW,0);
L1:=IF(HNL>REF(L,1),REF(L,1),IF(HNL>REF(L,2),REF(L,2),IF(HNL>REF(L,3),REF(L,3),IF(HNL>REF(L,4),REF(L,4),0))));
L2:=IF(L1>REF(L,1),REF(L,1),IF(L1>REF(L,2),REF(L,2),IF(L1>REF(L,3),REF(L,3),IF(L1>REF(L,4),REF(L,4),0))));
L3:=VALUEWHEN(L2>0,L2);
LNH:=IF(LOW<REF(LLV(LOW,3),1),HIGH,99999);
H1:=IF(LNH<REF(H,1),REF(H,1),IF(LNH<REF(H,2),REF(H,2),IF(LNH<REF(H,3),REF(H,3),IF(LNH<REF(H,4),REF(H,4),99999))));
H2:=IF(H1<REF(H,1),REF(H,1),IF(H1<REF(H,2),REF(H,2),IF(H1<REF(H,3),REF(H,3),IF(H1<REF(H,4),REF(H,4),0))));
H3:=VALUEWHEN(H2>0,H2);
SEL:=VALUEWHEN((CLOSE>H3 and REF(CLOSE,1)<=H3)or(CLOSE<L3 and REF(CLOSE,1)>=L3),IF(CLOSE>H3 and REF(CLOSE,1)<=H3,1,0));
LINE:IF(SEL=1,L3,H3),COLORblue,LINETHICK2;
DRAWNUMBER(ISLASTBAR,LINE,LINE,0,COLORblue);

//建立多头的进场条件
long:=H>a AND C>LINE ;
if long then
begin
        sellshort(holding<0,0,MARKET);
        buy(holding=0,p,limitr,a);
end

//建立空头的进场条件
short:=L<b AND C<LINE ;
if short then
begin
        sell(holding>0,0,MARKET);
        buyshort(holding=0,p,limitr,b);
end

//盈亏计算
     IF ENTERBARS>0 THEN BEGIN
         WIN1:=(C-ENTERPRICE)/ENTERPRICE*100;
         IF WIN1>MAXPROFIT THEN BEGIN
             MAXPROFIT:=WIN1;
         END
         WIN2:=(MAXPROFIT-WIN1)/MAXPROFIT*100;
     END

     //多头初始浮亏 P1% 止损
     IF WIN1<-P1 THEN BEGIN
         SELL(1,HOLDING,LIMITR,CLOSE);
          END
     //多头利润大于 P2% 止盈
     IF WIN1>P2 THEN BEGIN
         SELL(1,HOLDING,LIMITR,CLOSE);
             END
     //多头获利后回撤 P3%止盈
     IF WIN2>P3 AND OPENPROFIT>0 THEN BEGIN
         SELL(1,HOLDING,LIMITR,CLOSE);
     END
     //盈亏计算
     IF ENTERBARS>0 THEN BEGIN
         WIN1:=(ENTERPRICE-C)/ENTERPRICE*100;
         IF WIN1>MAXPROFIT THEN BEGIN
             MAXPROFIT:=WIN1;
         END
         WIN2:=(MAXPROFIT-WIN1)/MAXPROFIT*100;
     END

     //空头初始浮亏超过 P1% 止损
     IF WIN1<-P1 THEN BEGIN
         SELLSHORT(1,HOLDING,LIMITR,CLOSE);
          END
     //空头利润大于 P2%止盈
     IF WIN1>P2 THEN BEGIN
         SELLSHORT(1,HOLDING,LIMITR,CLOSE);
     END
     //空头回撤 P3% 止盈
     IF WIN2>P3 AND OPENPROFIT>0 THEN BEGIN
         SELLSHORT(1,HOLDING,LIMITR,CLOSE);
     END
 


后台策略如下:下面方式是完全按照图表执行信号处理的,原因是楼主不理解清楚后台自动交易的原理,所以我们采用了依旧取前台信号,后台下单的方法来解决问题。
希望可以尽快掌握后台的工作机理部分,在日后能够熟练使用金字塔的交易策略后再来自己尝试编写更复杂的后台策略。
下面代码带有TBUY、TSELL、TBUYSHORT、TSELLSHORT函数的就是我们添加的代码。
注意:采用这种方式并不能保证后台信号与图表信号一致,最常见的的原因是K线图中的图表和后台两个策略使用的数据量不同。

注:为用了虚拟持仓,后台就只能逐周期模式。
[PEL] 复制代码
INPUT:P(50,2,200,1){建仓量},P1(1,0,50,1){初始止损幅度},P2(5,2,100,1){止盈幅度},P3(30,5,60,5){回撤止盈};
VARIABLE:MAXPROFIT=0,{有仓位时最大获利幅度}VMIN = 090000;{用于隔夜高开或低开时间差}               
WIN1:=0;                                                           
WIN2:=0;//止盈、止损、回撤控制

交易时间:=TIME>VMIN AND TIME<151430;

a:=open+10;
b:=open-10;

HNL:=IF(HIGH>REF(HHV(HIGH,3),1),LOW,0);
L1:=IF(HNL>REF(L,1),REF(L,1),IF(HNL>REF(L,2),REF(L,2),IF(HNL>REF(L,3),REF(L,3),IF(HNL>REF(L,4),REF(L,4),0))));
L2:=IF(L1>REF(L,1),REF(L,1),IF(L1>REF(L,2),REF(L,2),IF(L1>REF(L,3),REF(L,3),IF(L1>REF(L,4),REF(L,4),0))));
L3:=VALUEWHEN(L2>0,L2);
LNH:=IF(LOW<REF(LLV(LOW,3),1),HIGH,99999);
H1:=IF(LNH<REF(H,1),REF(H,1),IF(LNH<REF(H,2),REF(H,2),IF(LNH<REF(H,3),REF(H,3),IF(LNH<REF(H,4),REF(H,4),99999))));
H2:=IF(H1<REF(H,1),REF(H,1),IF(H1<REF(H,2),REF(H,2),IF(H1<REF(H,3),REF(H,3),IF(H1<REF(H,4),REF(H,4),0))));
H3:=VALUEWHEN(H2>0,H2);
SEL:=VALUEWHEN((CLOSE>H3 and REF(CLOSE,1)<=H3)or(CLOSE<L3 and REF(CLOSE,1)>=L3),IF(CLOSE>H3 and REF(CLOSE,1)<=H3,1,0));
LINE:IF(SEL=1,L3,H3),COLORblue,LINETHICK2;
DRAWNUMBER(ISLASTBAR,LINE,LINE,0,COLORblue);

//建立多头的进场条件
long:=c>a AND C>LINE ;
if long then
begin
        //注意:将后台交易代码放在虚拟交易代码前面,不然sellshort后holding就变0了
        tsellshort(holding<0,0,mkt);
        sellshort(holding<0,0,MARKET);
       
        tbuy(holding=0,lmt,a);
        buy(holding=0,p,limitr,a);
end

//建立空头的进场条件
short:=c<b AND C<LINE ;
if short then
begin

tsell(holding>0,0,mkt);
sell(holding>0,0,MARKET);

tbuyshort(holding=0,p,lmt,b);
buyshort(holding=0,p,limitr,b);

end

//盈亏计算
     IF ENTERBARS>0 THEN BEGIN
         WIN1:=(C-ENTERPRICE)/ENTERPRICE*100;
         IF WIN1>MAXPROFIT THEN
             MAXPROFIT:=WIN1;
         WIN2:=(MAXPROFIT-WIN1)/MAXPROFIT*100;
     END

     //多头初始浮亏 P1% 止损
     IF WIN1<-P1 THEN

     begin
         TSELL(1,HOLDING,MKT);
         SELL(1,HOLDING,LIMITR,CLOSE);
      end

     //多头利润大于 P2% 止盈
     IF WIN1>P2 THEN

     begin

         TSELL(1,HOLDING,MKT);
         SELL(1,HOLDING,LIMITR,CLOSE);
     end

     //多头获利后回撤 P3%止盈
     IF WIN2>P3 AND OPENPROFIT>0 THEN

    begin

         TSELL(1,HOLDING,MKT);
         SELL(1,HOLDING,LIMITR,CLOSE);

    end
     //盈亏计算
     IF ENTERBARS>0 THEN BEGIN
         WIN1:=(ENTERPRICE-C)/ENTERPRICE*100;
         IF WIN1>MAXPROFIT THEN BEGIN
             MAXPROFIT:=WIN1;
         END
         WIN2:=(MAXPROFIT-WIN1)/MAXPROFIT*100;
     END

     //空头初始浮亏超过 P1% 止损
     IF WIN1<-P1 THEN
     BEGIN
         TSELLSHORT(1,HOLDING,MKT);
         SELLSHORT(1,HOLDING,LIMITR,CLOSE);
     END

     //空头利润大于 P2%止盈
     IF WIN1>P2 THEN
     BEGIN

         TSELLSHORT(1,HOLDING,MKT);
         SELLSHORT(1,HOLDING,LIMITR,CLOSE);
     END

     //空头回撤 P3% 止盈
     IF WIN2>P3 AND OPENPROFIT>0 THEN
     BEGIN
         TSELLSHORT(1,HOLDING,MKT);
       SELLSHORT(1,HOLDING,LIMITR,CLOSE);
     END














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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 01:23 , Processed in 0.295430 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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