- 精华
- 0
- 在线时间
- 161 小时
- UID
- 3864
- 积分
- 276
- 帖子
- 15
- 阅读权限
- 50
- 注册时间
- 2009-3-19
- 最后登录
- 2015-10-8
- 精华
- 0
- UID
- 3864
- 积分
- 276
- 帖子
- 15
- 主题
- 0
- 阅读权限
- 50
- 注册时间
- 2009-3-19
- 最后登录
- 2015-10-8
|
Vars
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric TrailingStart1(50); // 跟踪止损启动设置1
Numeric TrailingStart2(80); // 跟踪止损启动设置2
Numeric TrailingStop1(30); // 跟踪止损设置1
Numeric TrailingStop2(30); // 跟踪止损设置2
Numeric StopLossSet(20); // 止损设置
Numeric MyExitPrice; // 平仓价格
NumericSeries HighestAfterEntry; // 开仓后出现的最高价
NumericSeries LowestAfterEntry; // 开仓后出现的最低价
Begin
...
If(BarsSinceentry == 1)
{
HighestAfterEntry = Max(AvgEntryPrice,Close[1]); // 开仓后的下一个Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
LowestAfterEntry = Min(AvgEntryPrice,Close[1]); // 开仓后的下一个Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
}else if(BarsSinceEntry > 1)
{
HighestAfterEntry = Max(HighestAfterEntry,High[1]); // 记录下前一个Bar的最高点,用于当前Bar的跟踪止损判断
LowestAfterEntry = Min(LowestAfterEntry,Low[1]); // 记录下前一个Bar的最低点,用于当前Bar的跟踪止损判断
}
MinPoint = MinMove*PriceScale;
MyEntryPrice = AvgEntryPrice;
If(MarketPosition==1) // 有多仓的情况
{
If(HighestAfterEntry >= MyEntryPrice + TrailingStart2*MinPoint) // 第二级跟踪止损的条件表达式
{
If(Low <= HighestAfterEntry - TrailingStop2*MinPoint)
{
MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else if(HighestAfterEntry >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(Low <= HighestAfterEntry - TrailingStop1*MinPoint)
{
MyExitPrice = HighestAfterEntry - TrailingStop1*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else //可以在这里写上初始的止损处理
{
MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else if(MarketPosition==-1) // 有空仓的情况
{
If(LowestAfterEntry <= MyEntryPrice - TrailingStart2*MinPoint) // 第二级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry + TrailingStop2*MinPoint)
{
MyExitPrice = LowestAfterEntry + TrailingStop2*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}else if(LowestAfterEntry <= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry + TrailingStop1*MinPoint)
{
MyExitPrice = LowestAfterEntry - TrailingStop1*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}else //可以在这里写上初始的止损处理
{
MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}
...
End |
|