请各位高手帮我看看模型能否用于实盘
我的模型代码如下,原版来自一个高手的公开模型,自己改了一些内容,想用于实盘。经过回测感觉还可以,但是问题是感觉有点太通用了。自己的开仓条件也不知道是否是正确,也就是这样的开仓条件是否真能买到。请各位高手帮忙看看,谢谢啦。//------------------------------------------------------------------------
Params
Numeric length_B(55);
Numeric MaLength(55);
Numeric EarnAtrRatio(5);
Vars
Numeric Minpoint;
NumericSeries atr;
Numeric N;
Numeric Lots;
Numeric myasset(1000000);
numeric RiskRatio(1);
NumericSeries Hline_B;
NumericSeries Lline_B;
NumericSeries AveMa;
NumericSeries ExistHline;
NumericSeries ExistLline;
NumericSeries Profit;
NumericSeries Fristprice;
NumericSeries myEntryPrice;
Begin
// 集合竞价过滤和本BAR价格异常过滤
If(!CallAuctionFilter()) Return;
If(date!=date and high==low) Return;
// 0. 准备工作------------------------------------------------------------------------
Minpoint = MinMove*PriceScale;
atr = AvgTrueRange(length_B);
N = atr;
Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
Lots = IntPart(Lots); // 对小数取整
Hline_B = Highest(H,length_B); // 通道上轨
Lline_B = Lowest(L,length_B); // 通道下轨
PlotNumeric("Hline_B",Hline_B);
PlotNumeric("Lline_B",Lline_B);
AveMa=Average(Close,MaLength); // 均线
PlotNumeric("AveMa",AveMa);
// 1. 策略入场------------------------------------------------------------------------
If( MarketPosition==0 AND Close>Hline_B AND Close>(Close+2*atr))
{
myEntryPrice==Min(High,Hline_B+Minpoint);
myEntryPrice==IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
Buy(Lots,myEntryPrice);
Fristprice==myEntryPrice;
}
If(MarketPosition == 1 ) // 有多仓的情况
{
If(Fristprice!=InvalidNumeric && Lots >= 1)
{
If(Open >= Fristprice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
{
myEntryPrice = Open;
Fristprice = myEntryPrice;
Buy(Lots,myEntryPrice);
}
while(CurrentEntries<5 && High >= Fristprice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
{
myEntryPrice = Fristprice + 0.5*N;
Fristprice = myEntryPrice;
Buy(Lots,myEntryPrice);
}
}
}
If( MarketPosition==0 AND close<Lline_B AND Close<(Close-2*atr))
{
// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
myEntryPrice = max(low,Lline_B - MinPoint);
myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
Fristprice = myEntryPrice;
SellShort(Lots,myEntryPrice);
}
If(MarketPosition ==-1) // 有空仓的情况
{
If(Fristprice!=InvalidNumeric && Lots >= 1)
{
If(Open <= Fristprice - 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
{
myEntryPrice = Open;
Fristprice = myEntryPrice;
SellShort(Lots,myEntryPrice);
}
while(CurrentEntries<5 && Low <= Fristprice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
{
myEntryPrice = Fristprice - 0.5 * N;
Fristprice = myEntryPrice;
SellShort(Lots,myEntryPrice);
}
}
}
// 初始止损------------------------------------------------------------------------
If(MarketPosition==1 and BarsSinceEntry>0 )
{
If( Low<LastEntryPrice - 2*N )
{
Sell(0,Min(Open,LastEntryPrice - 2*N ) - Minpoint );
}
}
If(MarketPosition==-1 and BarsSinceEntry>0 )
{
If( High>LastEntryPrice + 2*N )
{
BuyToCover(0,Max(Open, LastEntryPrice + 2*N ) + Minpoint );
}
}
// 均线跟踪止损------------------------------------------------------------------------
If(MarketPosition==1 AND BarsSinceEntry>0 )
{
If( MarketPosition==1 AND Close<AveMa AND BarsSinceEntry>=5 )
{
Sell(0,Open);
}
}
If(MarketPosition==-1 AND BarsSinceEntry>0 )
{
If( MarketPosition==-1 and Close>AveMa AND BarsSinceEntry>=5 )
{
BuyToCover(0,Open);
}
}
// ATR跟踪止损------------------------------------------------------------------------
ExistHline = CloseD(1) + 1*N;
ExistLline = CloseD(1) - 1*N;
If(MarketPosition==1)
{
Profit = (High-AvgEntryPrice)/N;
}
If(MarketPosition==-1)
{
Profit = (-1)*(Low-AvgEntryPrice)/N;
}
If(Profit>EarnAtrRatio)
{
PlotBool("Hello ",True);
}
If(MarketPosition==1 AND Profit>EarnAtrRatio and Close<ExistLline )
{
Sell(0,Open);
}
If(MarketPosition==-1 AND Profit>EarnAtrRatio and Close>ExistHline )
{
BuyToCover(0,Open);
}
End
//------------------------------------------------------------------------
通用不是坏事哦 // 1. 策略入场------------------------------------------------------------------------
If( MarketPosition==0 AND Close>Hline_B AND Close>(Close+2*atr))
这里用Close,信号会闪烁吧? 把上面的代码修改了一下,如下,
//------------------------------------------------------------------------
Params
Numeric length_B(55);
Numeric MaLength(55);
Numeric EarnAtrRatio(5);
Vars
Numeric Minpoint;
NumericSeries atr;
Numeric N;
Numeric Lots;
Numeric myasset(1000000);
numeric RiskRatio(1);
NumericSeries Hline_B;
NumericSeries Lline_B;
NumericSeries AveMa;
NumericSeries ExistHline;
NumericSeries ExistLline;
NumericSeries Profit;
NumericSeries Fristprice;
NumericSeries myEntryPrice;
Begin
// 集合竞价过滤和本BAR价格异常过滤
If(!CallAuctionFilter()) Return;
If(date!=date and high==low) Return;
// 0. 准备工作------------------------------------------------------------------------
Minpoint = MinMove*PriceScale;
atr = AvgTrueRange(length_B);
N = atr;
// Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
Lots = 1; //IntPart(Lots); // 对小数取整
Hline_B = Highest(H,length_B); // 通道上轨
Lline_B = Lowest(L,length_B); // 通道下轨
PlotNumeric("Hline_B",Hline_B);
PlotNumeric("Lline_B",Lline_B);
AveMa=Average(Close,MaLength); // 均线
PlotNumeric("AveMa",AveMa);
If(BarStatus == 0)
{
Fristprice = InvalidNumeric;
}
// 1. 策略入场------------------------------------------------------------------------
If( MarketPosition==0 AND High > Hline_B AND High > (Close+2*N) )
{
//myEntryPrice==Min(High,Hline_B+Minpoint);
//myEntryPrice==IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
Buy(Lots,Max(Open,Max(Hline_B,(Close+2*N))));
Fristprice = Max(Open,Max(Hline_B,(Close+2*N)));
}
If( MarketPosition==0 AND Low <Lline_B AND Low<(Close-2*N))
{
// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
//myEntryPrice = max(low,Lline_B - MinPoint);
//myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
Fristprice = Min(Open,Min(Lline_B,(Close-2*N)));
SellShort(Lots,Min(Open,Min(Lline_B,(Close-2*N))));
}
/*
If(MarketPosition ==-1) // 有空仓的情况
{
If(Fristprice!=InvalidNumeric && Lots >= 1)
{
If(Open <= Fristprice - 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
{
myEntryPrice = Open;
Fristprice = myEntryPrice;
SellShort(Lots,myEntryPrice);
}
while(CurrentEntries<5 && Low <= Fristprice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
{
myEntryPrice = Fristprice - 0.5 * N;
Fristprice = myEntryPrice;
SellShort(Lots,myEntryPrice);
}
}
}
If(MarketPosition == 1 ) // 有多仓的情况
{
If(Fristprice!=InvalidNumeric && Lots >= 1)
{
If(Open >= Fristprice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
{
myEntryPrice = Open;
Fristprice = myEntryPrice;
Buy(Lots,myEntryPrice);
}
while(CurrentEntries<5 && High >= Fristprice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
{
myEntryPrice = Fristprice + 0.5*N;
Fristprice = myEntryPrice;
Buy(Lots,myEntryPrice);
}
}
}
*/
// 初始止损------------------------------------------------------------------------
If(MarketPosition==1 and BarsSinceEntry>0 )
{
If( Low<Fristprice - 2*N )
{
Sell(0,Min(Open,Fristprice - 2*N ) - Minpoint );
}
}
If(MarketPosition==-1 and BarsSinceEntry>0 )
{
If( High>Fristprice + 2*N )
{
BuyToCover(0,Max(Open, Fristprice + 2*N ) + Minpoint );
}
}
// 均线跟踪止损------------------------------------------------------------------------
If(MarketPosition==1 AND BarsSinceEntry>0 )
{
If( MarketPosition==1 AND Low<AveMa AND BarsSinceEntry>=5 )
{
Sell(0,Min(Open,Low));
}
}
If(MarketPosition==-1 AND BarsSinceEntry>0 )
{
If( MarketPosition==-1 and High>AveMa AND BarsSinceEntry>=5 )
{
BuyToCover(0,Max(Open,High));
}
}
// ATR跟踪止损------------------------------------------------------------------------
ExistHline = CloseD(1) + 1*N;
ExistLline = CloseD(1) - 1*N;
If(MarketPosition==1)
{
Profit = (High-Fristprice)/N;
}
If(MarketPosition==-1)
{
Profit = (-1)*(Low-Fristprice)/N;
}
If(Profit > EarnAtrRatio)
{
PlotBool("Hello ",True);
}
If(MarketPosition==1 AND Profit > EarnAtrRatio and Low<ExistLline )
{
Sell(0,Min(Open,low));
}
If(MarketPosition==-1 AND Profit>EarnAtrRatio and High>ExistHline )
{
BuyToCover(0,Max(Open,high));
}
End
取消了增仓的代码,固定只开一手单,5分钟周期回测出来的图形不好看。还不如DualThrust来得好。
页:
[1]