- 精华
- 0
- 在线时间
- 743 小时
- UID
- 15203
- 积分
- 1411
- 帖子
- 397
- 阅读权限
- 60
- 注册时间
- 2010-8-14
- 最后登录
- 2017-12-29
- 精华
- 0
- UID
- 15203
- 积分
- 1411
- 帖子
- 397
- 主题
- 35
- 阅读权限
- 60
- 注册时间
- 2010-8-14
- 最后登录
- 2017-12-29
|
后来有人说在IF内外要使用全局变量,于是我改成了下面的代码,使用了全局变量,似乎多单能正确止盈了,但空单仍然有同样的问题,在开仓的第二个K线就会平仓。
请高手帮忙看看,测试一下。我现在怀疑是TB本身的bug。
Params
Numeric longpara(30);
Numeric shortpara(10);
Numeric StopWin(0.5); //止盈系数,最大盈利回吐该系数作为止盈价
Numeric WinPoint(400); //止盈起始值(以价格计算)
Vars
NumericSeries MAlong; //长周期均线
NumericSeries MAshort; //短周期均线
Bool buycond;
Bool sellcond;
Numeric BuyOpen(100000); //多单开仓价
Numeric SellOpen(0); //空单开仓价
Numeric BuyStopWin(0); //多单止盈价
Numeric SellStopWin(0); //空单止盈价
Numeric OpenBar; //开仓K线的索引值
Numeric OpenCount; //当前K线到开仓K线之间的个数
Numeric MostHigh; //开仓后达到过的最高价
Numeric MostLow; //开仓后达到过的最低价
Begin
MAlong = Average(Close, longpara);
MAshort = Average(Close, shortpara);
buycond = CrossOver(MAshort, MAlong);
sellcond = CrossUnder(MAshort, MAlong);
//止盈代码
OpenCount = CurrentBar - GetGlobalVar(1); //计算开仓K线到当前K线的个数
If(MarketPosition == 1)
{
MostHigh = Highest(High, OpenCount); //计算开仓后到当前K线为止的最高价
If(MostHigh - GetGlobalVar(0) >= WinPoint) //开仓后最大浮盈(以价格计算)超过止盈起始值
{BuyStopWin = MostHigh - (MostHigh - GetGlobalVar(0)) * StopWin;} //计算止盈价格
If(Low <= BuyStopWin) //达到止盈条件时止盈
{Sell(0, Min(Open, BuyStopWin));}
}
If(MarketPosition == -1)
{
MostLow = Lowest(Low, OpenCount);
If(GetGlobalVar(0) - MostLow >= WinPoint)
{SellStopWin = MostLow + (GetGlobalVar(0) - MostLow) * StopWin;}
If(High >= SellStopWin)
{BuyToCover(0, Max(Open, SellStopWin));}
}
//止盈代码结束
If(buycond)
{
Buy(0, Close);
SetGlobalVar(0, Close); //记录开仓价
SetGlobalVar(1, CurrentBar); //记录开仓K线位置
Return;
}
If(sellcond)
{
SellShort(0, Close);
SetGlobalVar(0, Close); //记录开仓价
SetGlobalVar(1, CurrentBar); //记录开仓K线位置
Return;
}
End |
|