- 精华
- 0
- 在线时间
- 234 小时
- UID
- 243230
- 积分
- 560
- 帖子
- 139
- 阅读权限
- 50
- 注册时间
- 2016-11-16
- 最后登录
- 2023-5-15
- 精华
- 0
- UID
- 243230
- 积分
- 560
- 帖子
- 139
- 主题
- 61
- 阅读权限
- 50
- 注册时间
- 2016-11-16
- 最后登录
- 2023-5-15
|
把上面的代码修改了一下,如下,
//------------------------------------------------------------------------
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[1] and high==low) Return;
// 0. 准备工作------------------------------------------------------------------------
Minpoint = MinMove*PriceScale;
atr = AvgTrueRange(length_B);
N = atr[1];
// Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
Lots = 1; //IntPart(Lots); // 对小数取整
Hline_B = Highest(H[1],length_B); // 通道上轨
Lline_B = Lowest(L[1],length_B); // 通道下轨
PlotNumeric("Hline_B",Hline_B);
PlotNumeric("Lline_B",Lline_B);
AveMa=Average(Close[1],MaLength); // 均线
PlotNumeric("AveMa",AveMa);
If(BarStatus == 0)
{
Fristprice = InvalidNumeric;
}
// 1. 策略入场------------------------------------------------------------------------
If( MarketPosition==0 AND High > Hline_B AND High > (Close[5]+2*N) )
{
//myEntryPrice==Min(High,Hline_B+Minpoint);
//myEntryPrice==IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
Buy(Lots,Max(Open,Max(Hline_B,(Close[5]+2*N))));
Fristprice = Max(Open,Max(Hline_B,(Close[5]+2*N)));
}
If( MarketPosition==0 AND Low <Lline_B AND Low<(Close[5]-2*N))
{
// 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
//myEntryPrice = max(low,Lline_B - MinPoint);
//myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
Fristprice = Min(Open,Min(Lline_B,(Close[5]-2*N)));
SellShort(Lots,Min(Open,Min(Lline_B,(Close[5]-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[1]<AveMa[1] AND BarsSinceEntry>=5 )
{
Sell(0,Min(Open,Low[1]));
}
}
If(MarketPosition==-1 AND BarsSinceEntry>0 )
{
If( MarketPosition==-1 and High[1]>AveMa[1] AND BarsSinceEntry>=5 )
{
BuyToCover(0,Max(Open,High[1]));
}
}
// ATR跟踪止损------------------------------------------------------------------------
ExistHline = CloseD(1) + 1*N;
ExistLline = CloseD(1) - 1*N;
If(MarketPosition==1)
{
Profit = (High[1]-Fristprice)/N;
}
If(MarketPosition==-1)
{
Profit = (-1)*(Low[1]-Fristprice)/N;
}
If(Profit > EarnAtrRatio)
{
PlotBool("Hello ",True);
}
If(MarketPosition==1 AND Profit > EarnAtrRatio and Low[1]<ExistLline[1] )
{
Sell(0,Min(Open,low[1]));
}
If(MarketPosition==-1 AND Profit>EarnAtrRatio and High[1]>ExistHline[1] )
{
BuyToCover(0,Max(Open,high[1]));
}
End
取消了增仓的代码,固定只开一手单,5分钟周期回测出来的图形不好看。还不如DualThrust来得好。
|
|