等级: 专业版
- 注册:
- 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
|
|