//------------------------------------------------------------------------
// 简称: DualMA
// 名称: 双均线交易系统
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric M3(3);// 短期指数平均线参数
Numeric M5(5);// 长期指数平均线参数
Numeric M8(8);// 短期指数平均线参数
Numeric M10(10);// 长期指数平均线参数
Numeric tPrice(0); //启动跟踪止盈的触发价,0为立即跟踪,>0为触发价,<0为触发百分比
Numeric TrailLength(1); //跟踪止盈百分比%
Vars
Series<Numeric> MA3;
Series<Numeric> MA5;
Series<Numeric> MA8;
Series<Numeric> MA10;
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric TrailingStart1(50); // 跟踪止损启动设置1
Numeric TrailingStart2(80); // 跟踪止损启动设置2
Numeric TrailingStop1(30); // 跟踪止损设置1
Numeric TrailingStop2(20); // 跟踪止损设置2
Series<Numeric> MyExitPrice; // 平仓价格
Series<Numeric> HighAfterEntry(0,2);
Series<Numeric> LowAfterEntry(99999999,2);
Series<Bool> StartTrail(False);
Numeric TakeProfitset(30); //止盈设置
Numeric StopLossset(20); //止损设置
Series<Numeric> BarsSinceEntr;
Events
OnBar(ArrayRef<Integer> indexs)
{
MA3 = AverageFC(Close,M3);//3天均线
MA5 = AverageFC(Close,M5);//5天均线
MA8= AverageFC(Close,M8);//8天均线
MA10= AverageFC(Close,M10);//10天均线
MinPoint = MinMove*PriceScale;
PlotNumeric(\"MA3\",MA3);
PlotNumeric(\"MA5\",MA5);
PlotNumeric(\"MA8\",MA8);
PlotNumeric(\"MA10\",MA10);
If(MarketPosition <>1 AND CrossOver(MA3[1] ,MA8[1] ))
{
Buy(0,Open);
MyEntryPrice=Open;
}
If(MarketPosition==1 and BarsSinceEntr>=1)//有多仓的情况
{
If(High>=MyEntryPrice+TakeProfitset*MinPoint) //止盈条件表达式
{
MyExitPrice=MyEntryPrice+TakeProfitset*MinPoint;
If(Open>MyExitPrice) MyExitPrice=Open; ////如果该bar开盘价即跳空触动,用开盘价触动
Sell(0,Close);
}
}
If(MarketPosition <>-1 AND CrossUnder(MA5[1] ,MA10[1] ) )
{
Sell(0,Open);
}
}
请高手老师帮忙看看这个为什么不能实现止盈的,搞了好久都不行,谢谢老师了!
谢谢老师,现在变成第三根平仓,死叉和止盈好像不起作用,能帮忙看看再改那里吗
Params
Numeric M3(3);// 短期指数平均线参数
Numeric M5(5);// 长期指数平均线参数
Numeric M8(8);// 短期指数平均线参数
Numeric M10(10);// 长期指数平均线参数
Numeric tPrice(0); //启动跟踪止盈的触发价,0为立即跟踪,>0为触发价,<0为触发百分比
Numeric TrailLength(1); //跟踪止盈百分比%
Vars
Series<Numeric> MA3;
Series<Numeric> MA5;
Series<Numeric> MA8;
Series<Numeric> MA10;
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric TrailingStart1(50); // 跟踪止损启动设置1
Numeric TrailingStart2(80); // 跟踪止损启动设置2
Numeric TrailingStop1(30); // 跟踪止损设置1
Numeric TrailingStop2(20); // 跟踪止损设置2
Series<Numeric> MyExitPrice; // 平仓价格
Series<Numeric> HighAfterEntry(0,2);
Series<Numeric> LowAfterEntry(99999999,2);
Series<Bool> StartTrail(False);
Numeric TakeProfitset(30); //止盈设置
Numeric StopLossset(20); //止损设置
Events
OnBar(ArrayRef<Integer> indexs)
{
MA3 = AverageFC(Close,M3);//3天均线
MA5 = AverageFC(Close,M5);//5天均线
MA8= AverageFC(Close,M8);//8天均线
MA10= AverageFC(Close,M10);//10天均线
MinPoint = MinMove*PriceScale;
PlotNumeric(\"MA3\",MA3);
PlotNumeric(\"MA5\",MA5);
PlotNumeric(\"MA8\",MA8);
PlotNumeric(\"MA10\",MA10);
If(MarketPosition <>1 AND CrossOver(MA3[1] ,MA8[1] ))
{
Buy(0,Open);
MyEntryPrice=Open;
}
If(MarketPosition==1 and BarsSinceEntry>=2)//有多仓的情况
{
If(High>=MyEntryPrice+TakeProfitset*MinPoint) //止盈条件表达式
{
MyExitPrice=MyEntryPrice+TakeProfitset*MinPoint;
If(Open>MyExitPrice) MyExitPrice=Open; ////如果该bar开盘价即跳空触动,用开盘价触动
Sell(0,Close);
}
}
If(MarketPosition <>-1 AND CrossUnder(MA5[1] ,MA10[1]) and BarsSinceEntry>=2 )
{
Sell(0,Open);
}
}
Integer BarsSinceEntry(8)
是不是这样就可以了
王老师好,我还以为它自己计算的呢,请问有赋值的范例可以参考一下吗?谢谢老师
BarsSinceEntr?
你定义了这个赋值了吗