- 精华
- 0
- 在线时间
- 9 小时
- UID
- 112949
- 积分
- 26
- 帖子
- 5
- 阅读权限
- 10
- 注册时间
- 2012-10-17
- 最后登录
- 2012-11-8
- 精华
- 0
- UID
- 112949
- 积分
- 26
- 帖子
- 5
- 主题
- 1
- 阅读权限
- 10
- 注册时间
- 2012-10-17
- 最后登录
- 2012-11-8
|
//------------------------------------------------------------------------
// 简称: bbb
// 名称: bbb
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------
Params
Numeric Length(120);
Numeric Offset(2);
Numeric zhiying(50);
Numeric zhisun(50);
Vars
Numeric UpLine; //上轨
Numeric DownLine; //下轨
NumericSeries MidLine; //中间线
Numeric Band;
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric TakeProfitSet(50); // 止赢设置
Numeric StopLossSet(50); // 止损设置
Numeric MyExitPrice; // 平仓价格
Numeric AvgValue1;
// 跟踪止损部分的定义
Numeric TrailingStart1(50); // 跟踪止损启动设置1
Numeric TrailingStart2(100); // 跟踪止损启动设置2
Numeric TrailingStop1(30); // 跟踪止损设置1
Numeric TrailingStop2(61); // 跟踪止损设置2
// Numeric StopLossSet(50); // 止损设置 重复定义
// Numeric MyExitPrice; // 平仓价格
NumericSeries HighestAfterEntry; // 开仓后出现的最高价
NumericSeries LowestAfterEntry; // 开仓后出现的最低价
//
Begin
TakeProfitSet=zhiying;
StopLossSet=zhisun;
MidLine = AverageFC(Close,Length);
Band = StandardDev(Close,Length,2);
UpLine = MidLine + Offset * Band;
DownLine = MidLine - Offset * Band;
PlotNumeric("UpLine",UpLine);
PlotNumeric("DownLine",DownLine);
PlotNumeric("MidLine",MidLine);
If (High > UpLine)
{
if (low< UpLine)
{
if (MarketPosition==1) //1 先平多仓
{
sell(0,UpLine-5.5);
}
if (MarketPosition==0) //无仓情况下触发做空
{
If (A_GetOpenOrderCount()>0)
{
A_DeleteOrder(); // 2 撤单
}
sellShort(1,UpLine-5); //放空
}
}
}
If (Low < DownLine)
{
if (high>DownLine)
{
if (MarketPosition==-1)
{
BuyToCover(0,DownLine+5.5); //先平仓
}
if (MarketPosition==0) //无仓才多
{
If (A_GetOpenOrderCount()>0)
{
A_DeleteOrder(); //撤单
}
Buy(1,DownLine+5); //开空仓
}
}
}
//以下是跟踪止盈部分代码
If(BarsSinceentry == 0)
{
HighestAfterEntry = Close;
LowestAfterEntry = Close;
If(MarketPosition <> 0)
{
HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
}
}else
{
HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
LowestAfterEntry = Min(LowestAfterEntry,Low); // 记录下当前Bar的最低点,用于下 一个Bar的跟踪止损判断
}
Commentary("HighestAfterEntry="+Text(HighestAfterEntry));
Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
MinPoint = MinMove*PriceScale;
MyEntryPrice = AvgEntryPrice;
If(MarketPosition==1) // 有多仓的情况
{
If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) // 最高价触发多单第二级跟踪止损生效 的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint) // 如果最低价比最高价回调指定幅度 则 触发 离场信号
{
MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空 触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止 损的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
{
MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空 触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在这里写上初始的止损处理
{
MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else if(MarketPosition==-1) // 有空仓的情况
{
If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) // 第二级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
{
MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}else if(LowestAfterEntry[1] <= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
{
MyExitPrice = LowestAfterEntry[1] - TrailingStop1*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空 触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}else If(High >= MyEntryPrice + StopLossSet*MinPoint) //可以在这里写上初始的 止损处理
{
MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发, 则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}
End
程序运行后会不断触发 开仓做多和做空 判断仓位语句没有起作用,请高手帮忙看看是为什么???
不胜感激!!!! |
|