  
等级: 专业版 
- 注册: 
 - 2022-1-11
 
- 曾用名: 
 
 
 
 | 
 
 
 楼主 |
发表于 2023-4-25 14:31
|
显示全部楼层
 
 
 
GLOBALVARIABLE:IStarN=0,MStarN=0,CStarN=0,BHD=0,SHD=0,BPrice=0,SPrice=0;//MStarN:移仓标志;CStarN持仓标志 
//本策略是后台策略,运行时候选择监控连续合约,会把所监控的合约中非当前主力合约则会在开盘第一根k的时候平仓 
//用户可以根据这个模板自己改进,来实现类似换月移仓的功能 
 
//________________________为避免移仓滑点过大,采用指标趋势来决定何时移仓_________________________ 
DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26); 
DEA:=EMA(DIFF,9); 
MACD:=2*(DIFF-DEA),COLORSTICK; 
DRMACD:=MACD-REF(MACD,1); 
RDRMACD:=REF(DRMACD,1); 
CUMACD:=CROSS(DIFF,DEA); 
CDMACD:=CROSS(DIFF,DEA); 
//________________________开盘写入需移仓的持仓品种信息到《用来记录的注册文件》_________________________ 
//====每天下午3点后收盘后第1分钟,所有持仓品种代码写入《持仓板块》:Addtoblock(stk,'持仓板块')。加入之前清空板块CLEARBLOCK('持仓板块');----自选 分类中 
//====开盘:取《主力合约板块》成员的品种代码,并同昨天《持仓板块》持仓之代码逐一比较,找出的非主力合约加入到《移仓板块》--------自选 分类中 
//====《移仓板块》所包含品种数量YC:=STKCOUNT('移仓板块') 
//返回BLK板块中的第N个成员的品种代码 
//只有商品开盘时间段,此段金融期货提交单为废单; 
 if CStarN=0  and ISLASTBAR then BEGIN//-------------------------------商品+金融收盘时间段 
           //CLEARBLOCK('移仓板块');//确保第二天的《持仓板块》品种持仓是需要移仓的品种,因为今天新开的都确定是不需是主力合约! 
      HC:=THOLDCOUNT('');  
      FOR I = 1 TO HC do BEGIN  //循环取得当前活动账户品种持仓 
           HLABEL:= THOLDINDEXLABEL(I,'');//____获取持仓帐户栏第I序号的持仓品种的代码   
           Addtoblock(HLABEL,'移仓板块');//通过从《持仓板块》中删除主力合约品种后,余下的品种就是非主力合约,也是可能需要移仓。 
           //------找到主力合约--------------- 
           { 
           MC:=STKCOUNT('主力合约板块'); 
           FOR M = 1 TO MC do BEGIN  //循环取得当前主力合约板块品种 
             HMcode:=STKFROMBLK('主力合约板块',M);//循环取得当前<主力合约板块>第I号品种的代 
             if STRCMP(STRLEFT(HLABEL,2),STRLEFT(HMcode,2))=0 then BEGIN           
               Addtoblock(HMcode,'移仓主力板块');//通过从《持仓板块》中删除主力合约品种后,余下的品种就是非主力合约,也是可能需要移仓。 
               WRITEINIFILE('C:\MHoldingFILE.INI',HMcode,'BuyH',TBUYHOLDINGEX('',HLABEL,2));//记载《移仓主力板块》对应品种的持仓量 
               WRITEINIFILE('C:\MHoldingFILE.INI',HMcode,'SellH',TSELLHOLDINGEX('',HLABEL,2));//记载《移仓主力板块》对应品种的持仓量   
             end  
           END  
           }              
      END 
      CStarN:=1;                  
 end 
 { 
 if   MStarN=0  and ISLASTBAR then BEGIN//--------只有商品开盘时间段 
      MC:=STKCOUNT('主力合约板块');  
      FOR I = 1 TO MC do BEGIN  //循环取得当前主力合约板块品种 
           HMcode:=STKFROMBLK('主力合约板块',I);//循环取得当前<主力合约板块>第I号品种的代码 
           DeleteFromBlock(HMcode,'移仓板块');//通过从《持仓板块》中删除主力合约品种后,余下的品种就是非主力合约,也是可能需要移仓。 
      END 
      MStarN:=1;  
 end 
  
 if IStarN=1  and ISLASTBAR then BEGIN//-------------------------------商品+金融开盘时间段 
      MC:=STKCOUNT('主力合约板块');  
      FOR I = 1 TO MC do BEGIN  //循环取得当前主力合约板块品种 
           HMcode:=STKFROMBLK('主力合约板块',I);//循环取得当前<主力合约板块>第I号品种的代码 
           DeleteFromBlock(HMcode,'移仓板块');//通过从《持仓板块》中删除主力合约品种后,余下的品种就是非主力合约,也是可能需要移仓。 
      END 
     IStarN:=2;     
 end 
} 
  
//-------------------------------商品+金融移仓:1、平非主力合约持仓;2、开主力合约等量的仓位;3、将品种从《移仓板块》删除------------------------------------------------ 
                 if BHD=0 then BHD:=TBUYHOLDINGEX('','',2);//需移仓品种的多仓持仓数量               
                 if SHD=0 then SHD:=TSELLHOLDINGEX('','',2);//需移仓品种的空仓持仓数量         
              //if (RDRMACD<0&&DRMACD>0)||CROSS(DIFF,DEA) then BEGIN//MACD柱子由大逐渐变小转为小变大__[∨字形];或者出现了MACD死叉    
                 if SPrice=0&&SHD<>0 then BEGIN 
                          Tsellshort(CUMACD,0,LMT,C+5*MINDIFF,0,'',''); //成功卖出老的非主力持仓,还未买入对应主力合约手数后,不能为移仓成功!!  
                     SPrice:=C+5*MINDIFF; 
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderMK',-1);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。   
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderSP',SPrice);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。                           
                 END     
                 if (BPrice>C&&BHD<>0&&RDRMACD<0&&DRMACD>0)||(BPrice<C&&CUMACD) then BEGIN                          
                          Tbuy(1,BHD,LMT,C+5*MINDIFF,0,'',DYNAINFO(210));  
                          DeleteFromBlock('','移仓板块');//成功卖出老的非主力持仓,买入对应主力合约手数后,方为移仓成功!!  
                     BPrice:=0;         
                          BHD:=0; 
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderMK',2);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。   
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderBP',C+5*MINDIFF);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。                                 
                 END                          
              //end 
              //if RDRMACD>0&&DRMACD<0 then BEGIN//MACD柱子由小逐渐变大转为大变小__[∧字形];或者出现了MACD金叉 
                 if BPrice=0&&BHD<>0 then BEGIN 
                          TSELL(CDMACD,0,LMT,C-5*MINDIFF,0,'','');  //成功卖出老的非主力持仓,还未买入对应主力合约手数后,不能为移仓成功!!   
                          BPrice:=C-5*MINDIFF;  
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderMK',1);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。   
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderBP',BPrice);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。                                
                 END       
                 if (SPrice<C&&SHD<>0&&RDRMACD>0&&DRMACD<0)||(SPrice>C&&CDMACD) then BEGIN 
                          Tbuyshort(1,SHD,LMT,C-5*MINDIFF,0,'',DYNAINFO(210));   
                          DeleteFromBlock('','移仓板块');//成功卖出老的非主力持仓,买入对应主力合约手数后,方为移仓成功!!  
                          SPrice:=0; 
                          SHD:=0;            
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderMK',-2);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。   
                          WRITEINIFILE('C:\MTraderFILE.INI',HMcode,'TraderSP',C-5*MINDIFF);//记载《移仓主力板块》对应品种的交易信号:2开多仓,1平多仓;-2开空仓,-1平空仓;0移仓(归位)。                              
                 END     
              //end 
          
         
       
       
   
 |   
 
 
 
 |