金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1608|回复: 4

后台代码编写的具体问题,准备了很久,这个问题解决了, 就好办了。

[复制链接]

17

主题

76

帖子

76

积分

等级: 免费版

注册:
2024-1-6
曾用名:
发表于 2024-3-11 11:32 | 显示全部楼层 |阅读模式
//*************** 1. 基础条件 ********************

K开仓基价X:=OPEN;  D开仓基价X:=OPEN;

DIFF:=REF(EMA(CLOSE,12),1) - REF(EMA(CLOSE,26),1);        
DEA:=REF(EMA(DIFF,9),1);                          
MACD:=2*(DIFF-DEA);                       
MACD卖出条件:=REF(MACD,4)>=REF(MACD,3) AND REF(MACD,1)<REF(MACD,2);        
MACD买入条件:=REF(MACD,4)<=REF(MACD,3) AND REF(MACD,1)>REF(MACD,2);  
MACD下跌条件:=REF(MACD,4)>=REF(MACD,3) AND REF(MACD,3)>REF(MACD,2);
MACD上涨条件:=REF(MACD,4)<=REF(MACD,3) AND REF(MACD,3)<REF(MACD,2);

MA3:=EMA(C,3);   
MA20:=EMA(C,20);
MA5:=EMA(C,5);   
MA30:=EMA(C,30);
MA10:=EMA(C,10);
MA40:=EMA(C,40);

MD买点1:=CROSS(MA3,MA5);   MD卖点1:=CROSS(MA5,MA3);
MD买点2:=CROSS(MA3,MA10);  MD卖点2:=CROSS(MA10,MA3);
MD买点3:=CROSS(MA3,MA20);  MD卖点3:=CROSS(MA20,MA3);
MD买点4:=CROSS(MA3,MA30);  MD卖点4:=CROSS(MA30,MA3);
MD买点5:=CROSS(MA3,MA40);  MD卖点5:=CROSS(MA40,MA3);

MD卖点:=MD卖点1 OR MD卖点2 OR MD卖点3 OR MD卖点4 OR MD卖点5;
MD买点:=MD买点1 OR MD买点2 OR MD买点3 OR MD买点4 OR MD买点5;


//*************** 2. 多头策略 ********************

{bs基本买开执行a}
短线买开仓价A:=D开仓基价X+1*mindiff;
短线买止损价A:=REF(LLV(L,1),2) - 1*mindiff;         
短线买止盈价A:=D开仓基价X+4*mindiff;
BS买开执行A1:=MD买点 AND MACD买入条件 AND (OPEN>=REF(L,2) AND OPEN<=REF(H,1));
BS买开执行A2:=MD买点 AND MACD下跌条件 AND (OPEN>=REF(L,2) AND OPEN<=REF(H,1));

BS买开执行A组:=BS买开执行A1 OR BS买开执行A2;


{bs基本买开执行b}
短线买开仓价B:=D开仓基价X+1*mindiff;
短线买止损价B:=REF(LLV(L,1),2)- 1*mindiff;        
短线买止盈价B:=D开仓基价X+6*mindiff;
BS买开执行B1:=MD买点 AND MACD买入条件 AND (OPEN>=REF(L,2) AND OPEN<=REF(H,1));
BS买开执行B2:=MD买点 AND MACD下跌条件 AND (OPEN>=REF(L,2) AND OPEN<=REF(H,1));

BS买开执行B组:=BS买开执行B1 OR BS买开执行B2;


//*************** 3. 空头策略 ********************
{bs基本卖开执行a}
短线卖开仓价A:=K开仓基价X-1*mindiff;  
短线卖止损价A:=REF(HHV(H,1),2)+1*mindiff;               
短线卖止盈价A:=K开仓基价X-4*mindiff;  
BS卖开执行A1:=MD卖点 AND MACD卖出条件 AND OPEN<=REF(H,1);
BS卖开执行A2:=MD卖点 AND MACD上涨条件 AND OPEN<=REF(H,1);

BS卖开执行A组:=BS卖开执行A1 or BS卖开执行A2;


{bs基本卖开执行b}
短线卖开仓价B:=K开仓基价X-1*mindiff;   
短线卖止损价B:=REF(HHV(H,1),2)+1*mindiff;                                                            
短线卖止盈价B:=K开仓基价X-8*mindiff;
BS卖开执行B1:=MD卖点 AND MACD卖出条件 AND OPEN<=REF(H,1) AND REF(H,1)<=REF(H,2);
BS卖开执行B2:=MD卖点 AND MACD上涨条件 AND OPEN<=REF(H,1) AND REF(H,1)<=REF(H,2);

BS卖开执行B组:=BS卖开执行B1 or BS卖开执行B2;


//*************** 实际报价 ********************

买开仓价A:=D开仓基价X;
买止损价A:=D开仓基价X-4*mindiff;         
买止盈价A:=D开仓基价X+4*mindiff;

买开仓价B:=D开仓基价X+1*mindiff;
买止损价B:=买开仓价B-4*mindiff;         
买止盈价B:=买开仓价B+3*mindiff;

卖开仓价A:=K开仓基价X;  
卖止损价A:=卖开仓价A+3*mindiff;                           
卖止盈价A:=卖开仓价A-3*mindiff;

卖开仓价B:=K开仓基价X-1*mindiff;  
卖止损价B:=卖开仓价B+3*mindiff;                           
卖止盈价B:=卖开仓价B-3*mindiff;




//后台要求:


//1. 实际成交后 , 不管设计信号最终形成与否,即闪点形成的成交价也按 3或4跳止盈或止损。以实际开仓价为中心傻瓜固定止损止盈
//2. 一个K线只能开一次仓, 避免信号闪烁时候反复加仓
//3. 信号K线(包括闪烁的信号)结束后,10秒内撤单或者立即撤单。
//4.收盘前7分钟不开新仓


//*************** 4. 后台交易执行 ********************


//****持仓管理*****

globalvariable:B_01:=0,B_opn_01:=0,B_tkp_01:=0,B_stp_01:=0,B_stp_brk_01:=0,B_idx_01:=0,
               B_02:=0,B_opn_02:=0,B_tkp_02:=0,B_stp_02:=0,B_stp_brk_02:=0,B_idx_02:=0,
               s_01:=0,s_opn_01:=0,s_tkp_01:=0,s_stp_01:=0,s_stp_brk_01:=0,s_idx_01:=0,
               s_02:=0,s_opn_02:=0,s_tkp_02:=0,s_stp_02:=0,s_stp_brk_02:=0,s_idx_02:=0;

               R_C1:=REF(C,1);



//*************** 多头 后台********************
//****平仓*****      

//------------------多单:
//@多单:止盈

if b_01=1 and close>=b_tkp_01 and tbuyholdingex('','',1)>0 then                                                            
begin
        DA盈:tsell(1,1,lmt,close);                                                     
        b_01:=0;                                                                                                
end

if b_02=1 and close>=b_tkp_02  and tbuyholdingex('','',1)>0 then                                                            
begin
        DB盈:tsell(1,1,lmt,close);                                                     
        b_02:=0;                                                                              
end


//@多单:价格limitr 止损
if b_01=1 AND R_C1<B_STP_01  and tbuyholdingex('','',1)>0 then                                                         
begin
        DA损:tsell(1,1,lmt,close);                                               
        b_01:=0;
end
   
if b_02=1 AND R_C1<B_STP_02   and tbuyholdingex('','',1)>0 then                                                            
begin
        DB损:tsell(1,1,lmt,close);                                                
        b_02:=0;
end


//****开仓*****      

//@多单:开仓


if BS买开执行A组 and b_01=0 and tbuyholdingex('','',2)=0 and remainingtime(closetime(0))>15*60 then               
begin

        DA:tbuy(1,1,lmt,买开仓价A);           //执行买开   
        b_01:=1;                              //状态          表示1手多单已经是持仓状态了               
        b_opn_01:=买开仓价A;                  //开仓        
        b_tkp_01:=买止盈价A;                  //止盈  
        b_stp_01:=买止损价A;                  //价格止损  
        b_idx_01:=barpos;                     //开仓k线       记录哪一个开仓k线
end


if BS买开执行B组 and b_02=0 and  tbuyholdingex('','',2)=0 and remainingtime(closetime(0))>15*60  then           
begin

       DB:tbuy(1,1,lmt,买开仓价B);            
        b_02:=1;                                                   
        b_opn_02:=买开仓价B;                     
        b_tkp_02:=买止盈价B;                     
        b_stp_02:=买止损价B;                       
        b_idx_02:=barpos;                              
end



//*************** 空头 ********************

//****平仓*****      

//------------------空单:
//@空单:止盈

if s_01=1 and close<=s_tkp_01 and  tsellholdingex('','',1)>0 then                                                         
begin
        KA盈:tsellshort(1,1,lmt,close);                                                                       
        s_01:=0;                                                                                                                              
end

if s_02=1 and close<=s_tkp_02 and  tsellholdingex('','',1)>0 then                                                         
begin
        KB盈:tsellshort(1,1,lmt,close);                                                                           
        s_02:=0;                                                                                                                                    
end


//@空单:limitr价格止损
r_c1:=ref(c,1);
   
if s_01=1 AND R_C1>S_STP_01  and  tsellholdingex('','',1)>0 then                                                         
begin
        KA损:tsellshort(1,1,lmt,open);                                                                 
        s_01:=0;                                                  
end
   
   
if s_02=1 AND R_C1>S_STP_02  and  tsellholdingex('','',1)>0 then                                                         
begin
        KB损:tsellshort(1,1,lmt,open);                                                                 
        s_02:=0;                                                     
end



//****开仓*****      

//@空单:开仓

if BS卖开执行A组 and s_01=0 and  tsellholdingex('','',2)=0 and remainingtime(closetime(0))>15*60 then                          
begin
        KA:tbuyshort(BS卖开执行A组,1,lmt,卖开仓价A);        
        s_01:=1;                                               
        s_opn_01:=卖开仓价A;                              
        s_tkp_01:=卖止盈价A;                                
        s_stp_01:=卖止损价A;                                
        s_idx_01:=barpos;                                               
end


if BS卖开执行B组 and s_02=0  and  tsellholdingex('','',2)=0 and remainingtime(closetime(0))>15*60  then                          
begin
        KB:tbuyshort(BS卖开执行B组,1,lmt,卖开仓价B);        
        s_02:=1;                                            
        s_opn_02:=卖开仓价B;                                
        s_tkp_02:=卖止盈价B;                                
        s_stp_02:=卖止损价B;                                
        s_idx_02:=barpos;
end


//2. 收盘前2分钟自动全部平仓,

if remainingtime(closetime(0))<2*60  then begin
    tsellshort(tsellholdingex('','',1)>0,tsellholdingex('','',1),mkt);
    tsell(tbuyholdingex('','',1)>0,tbuyholdingex('','',1),mkt);
end

//3. 收盘前7分钟不开新仓,需要补充


LJ:STRCAT(STRCAT('C:\调试日志\',STKLABEL),'.TXT');
IF ISLASTBAR THEN BEGIN
  DEBUGFILE(LJ,'多头持仓='&NUMTOSTR(TBUYHOLDINGEX('','',2),0)&' 空头持仓='&NUMTOSTR(TSELLHOLDINGEX('','',2),0)&' 最新价='&NUMTOSTR(C,2)&' 前收='&NUMTOSTR(R_C1,2),1);
  DEBUGFILE(LJ,'开多条件1='&NUMTOSTR(BS买开执行A组,0)&' 开多条件2='&NUMTOSTR(BS买开执行B组,0)&' 开多标记1='&NUMTOSTR(B_01,0)&' 开多标记2='&NUMTOSTR(B_02,0),1);
  DEBUGFILE(LJ,'买开仓价A='&NUMTOSTR(B_OPN_01,2)&' 买止盈价A='&NUMTOSTR(B_TKP_01,2)&' 买止损价A='&NUMTOSTR(B_STP_01,2),1);
  DEBUGFILE(LJ,'买开仓价B='&NUMTOSTR(B_OPN_02,2)&' 买止盈价B='&NUMTOSTR(B_TKP_02,2)&' 买止损价B='&NUMTOSTR(B_STP_02,2),1);
  DEBUGFILE(LJ,'卖开仓价A='&NUMTOSTR(S_OPN_01,2)&' 卖止盈价A='&NUMTOSTR(S_TKP_01,2)&' 卖止损价A='&NUMTOSTR(S_STP_01,2),1);
  DEBUGFILE(LJ,'卖开仓价B='&NUMTOSTR(S_OPN_02,2)&' 卖止盈价B='&NUMTOSTR(S_TKP_02,2)&' 卖止损价B='&NUMTOSTR(S_STP_02,2),1);
  DEBUGFILE(LJ,'-------------------------------------------------------',1);
END


回复

使用道具 举报

17

主题

76

帖子

76

积分

等级: 免费版

注册:
2024-1-6
曾用名:
 楼主| 发表于 2024-3-11 14:50 | 显示全部楼层
麻烦看一下,谢谢:
//后台要求:

//1. 实际成交后 , 不管设计信号最终形成与否,即闪点形成的成交价也按 3或4跳止盈或止损。以实际开仓价为中心傻瓜固定止损止盈
//2. 一个K线只能开一次仓, 避免信号闪烁时候反复加仓
//3. 信号K线(包括闪烁的信号)结束后,10秒内撤单或者立即撤单。
//4.收盘前7分钟不开新仓


//*************** 4. 后台交易执行 ********************

   
//****持仓管理*****
   
globalvariable:B_01:=0,B_opn_01:=0,B_tkp_01:=0,B_stp_01:=0,B_stp_brk_01:=0,B_idx_01:=0,
               B_02:=0,B_opn_02:=0,B_tkp_02:=0,B_stp_02:=0,B_stp_brk_02:=0,B_idx_02:=0,
               s_01:=0,s_opn_01:=0,s_tkp_01:=0,s_stp_01:=0,s_stp_brk_01:=0,s_idx_01:=0,
               s_02:=0,s_opn_02:=0,s_tkp_02:=0,s_stp_02:=0,s_stp_brk_02:=0,s_idx_02:=0;
               R_C1:=REF(C,1);
               
               
      
//*************** 多头 后台********************
//****平仓*****      
   
//------------------多单:

//固定止损止盈模块部分******************************* 多头
//固定止盈条件判断
DA止盈:DYNAINFO(  7)-TAVGENTERPRICEEX2('','',1)>=4*MINDIFF;
//固定止损条件判断


DA止损:TAVGENTERPRICEEX2('','',1)-DYNAINFO(  7)>=4*MINDIFF;
//固定止损止盈下单
TSELL(DA止盈,TBUYHOLDINGEX('','',1 ),MKT,0,'','');
TSELL(DA止损,TBUYHOLDINGEX( '','',1 ),MKT,0,'','');
//**********************************************


DB止盈:DYNAINFO(  7)-TAVGENTERPRICEEX2('','',1)>=4*MINDIFF;
DB止损:TAVGENTERPRICEEX2('','',1)-DYNAINFO(  7)>=4*MINDIFF;
TSELL(DB止盈,TBUYHOLDINGEX('','',1 ),MKT,0,'','');
TSELL(DB止损,TBUYHOLDINGEX( '','',1 ),MKT,0,'','');

   
   
//****开仓*****      
   
//@多单:开仓

if BS买开执行A组 and b_01=0 and tbuyholdingex('','',2)=0 and remainingtime(closetime(0))>15*60 then               
begin
         
        DA:tbuy(1,1,lmt,买开仓价A);           //执行买开   
      
end
   
   
if BS买开执行B组 and b_02=0 and  tbuyholdingex('','',2)=0 and remainingtime(closetime(0))>15*60  then           
begin
         
       DB:tbuy(1,1,lmt,买开仓价B);            
        b_02:=1;                                                   
        b_opn_02:=买开仓价B;                     
        b_tkp_02:=买止盈价B;                     
        b_stp_02:=买止损价B;                       
        b_idx_02:=barpos;                              
end
   
                                         
   
//*************** 空头 ********************
   
//****平仓*****      
   
//------------------空单:
//@空单:止盈
//@空单:limitr价格止损

//固定止损止盈模块部分******************************* 空头
//固定止盈条件判断
KA止盈:DYNAINFO(  7)-TAVGENTERPRICEEX2('','',1)>=4*MINDIFF;
//固定止损条件判断


KA止损:TAVGENTERPRICEEX2('','',1)-DYNAINFO(  7)>=4*MINDIFF;
//固定止损止盈下单
TSELLshort(KA止盈,TBUYHOLDINGEX('','',1 ),MKT,0,'','');
TSELLshort(KA止损,TBUYHOLDINGEX( '','',1 ),MKT,0,'','');
//**********************************************


KB止盈:DYNAINFO(  7)-TAVGENTERPRICEEX2('','',1)>=4*MINDIFF;
KB止损:TAVGENTERPRICEEX2('','',1)-DYNAINFO(  7)>=4*MINDIFF;
TSELLshort(KB止盈,TBUYHOLDINGEX('','',1 ),MKT,0,'','');
TSELLshort(KB止损,TBUYHOLDINGEX( '','',1 ),MKT,0,'','');


   
   
//****开仓*****      
   
//@空单:开仓
                              
if BS卖开执行A组 and s_01=0 and  tsellholdingex('','',2)=0 and remainingtime(closetime(0))>15*60 then                          
begin
        KA:tbuyshort(BS卖开执行A组,1,lmt,卖开仓价A);        
        s_01:=1;                                               
                                                   
end
   
   
if BS卖开执行B组 and s_02=0  and  tsellholdingex('','',2)=0 and remainingtime(closetime(0))>15*60  then                          
begin
        KB:tbuyshort(BS卖开执行B组,1,lmt,卖开仓价B);        
        s_02:=1;                                            
        s_opn_02:=卖开仓价B;                                
        s_tkp_02:=卖止盈价B;                                
        s_stp_02:=卖止损价B;                                
        s_idx_02:=barpos;
end
   
   
//2. 收盘前2分钟自动全部平仓,
  
if remainingtime(closetime(0))<2*60  then begin
    tsellshort(tsellholdingex('','',1)>0,tsellholdingex('','',1),mkt);
    tsell(tbuyholdingex('','',1)>0,tbuyholdingex('','',1),mkt);
end



//3. 收盘前7分钟不开新仓,需要补充

remainingtime(closetime(0))>7*60;


LJ:STRCAT(STRCAT('C:\调试日志\',STKLABEL),'.TXT');
IF ISLASTBAR THEN BEGIN
  DEBUGFILE(LJ,'多头持仓='&NUMTOSTR(TBUYHOLDINGEX('','',2),0)&' 空头持仓='&NUMTOSTR(TSELLHOLDINGEX('','',2),0)&' 最新价='&NUMTOSTR(C,2)&' 前收='&NUMTOSTR(R_C1,2),1);
  DEBUGFILE(LJ,'开多条件1='&NUMTOSTR(BS买开执行A组,0)&' 开多条件2='&NUMTOSTR(BS买开执行B组,0)&' 开多标记1='&NUMTOSTR(B_01,0)&' 开多标记2='&NUMTOSTR(B_02,0),1);
  DEBUGFILE(LJ,'买开仓价A='&NUMTOSTR(B_OPN_01,2)&' 买止盈价A='&NUMTOSTR(B_TKP_01,2)&' 买止损价A='&NUMTOSTR(B_STP_01,2),1);
  DEBUGFILE(LJ,'买开仓价B='&NUMTOSTR(B_OPN_02,2)&' 买止盈价B='&NUMTOSTR(B_TKP_02,2)&' 买止损价B='&NUMTOSTR(B_STP_02,2),1);
  DEBUGFILE(LJ,'卖开仓价A='&NUMTOSTR(S_OPN_01,2)&' 卖止盈价A='&NUMTOSTR(S_TKP_01,2)&' 卖止损价A='&NUMTOSTR(S_STP_01,2),1);
  DEBUGFILE(LJ,'卖开仓价B='&NUMTOSTR(S_OPN_02,2)&' 卖止盈价B='&NUMTOSTR(S_TKP_02,2)&' 卖止损价B='&NUMTOSTR(S_STP_02,2),1);
  DEBUGFILE(LJ,'-------------------------------------------------------',1);
END
回复

使用道具 举报

17

主题

76

帖子

76

积分

等级: 免费版

注册:
2024-1-6
曾用名:
 楼主| 发表于 2024-3-11 11:37 | 显示全部楼层
//后台要求:麻烦直接在源码上写


//1. 实际成交后 , 不管设计信号最终形成与否,即闪点形成的成交价也按 3或4跳止盈或止损。以实际开仓价为中心傻瓜固定止损止盈
//2. 一个K线只能开一次仓, 避免信号闪烁时候反复加仓
//3. 信号K线(包括闪烁的信号)结束后,10秒内撤单或者立即撤单。
//4.收盘前7分钟不开新仓

补充内容 (2024-3-11 12:28):
请问在后台交易系统里面, 如果出现买点或者卖点, 在信号不稳定的时候成交了,那么代码可以实现以成交价为基础的固定止盈止损不?比如多单实际成交价加 3跳止盈, 实际成交价-3跳 止损。 用代码的方式。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-3-11 13:06 | 显示全部楼层
这几个问题 我在另外一个帖子里,我已经都回复了。麻烦你翻下那个帖子历史楼层,我只是没有一次性回复。


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

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-3-11 15:12 | 显示全部楼层
zh1:='';
pz1:='';


zycond1:dynainfo(  7)-tavgenterpriceex2(zh1 ,pz1 ,0)>=50*mindiff;
zscond1:tavgenterpriceex2(zh1 ,pz1 ,0)-dynainfo(  7)>=20*mindiff;

tsell(zycond1,tbuyholdingex( zh1,pz1 ,0 ),mkt,0,zh1,pz1);
tsell(zscond1,tbuyholdingex( zh1,pz1 ,0 ),mkt,0,zh1,pz1);


zycond2:tavgenterpriceex2(zh1 ,pz1 ,1)-dynainfo(  7)>=50*mindiff;
zscond2:dynainfo(  7)-tavgenterpriceex2(zh1 ,pz1 ,1)>=20*mindiff;

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-31 22:10 , Processed in 0.137539 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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