我如何使用布林带获得开单信号?
How do I to use Bollinger Bands to get a signal to open an order?
我正在尝试使用布林带来获取打开订单买入或卖出的信号。为此,我尝试测试 candle[2] 和 candle[1] 收盘价是否高于或低于 MODE_UPPER
和 MODE_LOWER
的 iBands
以打开订单。问题是订单在 MODE_MAIN
而不是 MODE_UPPER 或 MODE_LOWER 旁边打开,我不知道为什么会这样。
我该怎么做?
正在尝试
//return true if has a signal to open order
bool bollingerBandScalper(int bs){
int _candle = 0;
int _period = 14;
//double _main = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_MAIN, _candle + 1);
double LowerBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_LOWER, _candle + 1);
double UpperBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_UPPER, _candle + 1);
double PrevLowerBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_LOWER, _candle + 2);
double PrevUpperBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_UPPER, _candle + 2);
//buy signal
if(bs == OP_BUY){
if((Close[_candle + 2] > PrevLowerBB) && (Close[_candle + 1] > LowerBB)){
return true;
}
}
//sell signal
if(bs == OP_SELL){
if((Close[_candle + 2] > PrevUpperBB) && (Close[_candle + 1] > UpperBB)){
return true;
}
}
return false;
}
我认为您在寻找收盘价 above/below BB 带时犯了一个错误。
我对您的代码进行了一些更改。你可以测试一下:
//return true if has a signal to open order
bool bollingerBandScalper(int type,int period,int shift)
{
double LowerBB = iBands(_Symbol,_Period,period,2.0,0,PRICE_CLOSE,MODE_LOWER,shift+1);
double UpperBB = iBands(_Symbol,_Period,period,2.0,0,PRICE_CLOSE,MODE_UPPER,shift+1);
double PrevLowerBB = iBands(_Symbol,_Period,period,2,0,PRICE_CLOSE,MODE_LOWER,shift+2);
double PrevUpperBB = iBands(_Symbol,_Period,period,2,0,PRICE_CLOSE,MODE_UPPER,shift+2);
//buy signal
if(type==OP_BUY && Close[shift+2]>PrevLowerBB && Close[shift+1]<LowerBB) return true;
//sell signal
if(type==OP_SELL && Close[shift+2]<PrevUpperBB && Close[shift+1]>UpperBB) return true;
return false;
}
我正在尝试使用布林带来获取打开订单买入或卖出的信号。为此,我尝试测试 candle[2] 和 candle[1] 收盘价是否高于或低于 MODE_UPPER
和 MODE_LOWER
的 iBands
以打开订单。问题是订单在 MODE_MAIN
而不是 MODE_UPPER 或 MODE_LOWER 旁边打开,我不知道为什么会这样。
我该怎么做?
正在尝试
//return true if has a signal to open order
bool bollingerBandScalper(int bs){
int _candle = 0;
int _period = 14;
//double _main = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_MAIN, _candle + 1);
double LowerBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_LOWER, _candle + 1);
double UpperBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_UPPER, _candle + 1);
double PrevLowerBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_LOWER, _candle + 2);
double PrevUpperBB = iBands(_Symbol, _Period, _period, 2, 0, PRICE_CLOSE, MODE_UPPER, _candle + 2);
//buy signal
if(bs == OP_BUY){
if((Close[_candle + 2] > PrevLowerBB) && (Close[_candle + 1] > LowerBB)){
return true;
}
}
//sell signal
if(bs == OP_SELL){
if((Close[_candle + 2] > PrevUpperBB) && (Close[_candle + 1] > UpperBB)){
return true;
}
}
return false;
}
我认为您在寻找收盘价 above/below BB 带时犯了一个错误。 我对您的代码进行了一些更改。你可以测试一下:
//return true if has a signal to open order
bool bollingerBandScalper(int type,int period,int shift)
{
double LowerBB = iBands(_Symbol,_Period,period,2.0,0,PRICE_CLOSE,MODE_LOWER,shift+1);
double UpperBB = iBands(_Symbol,_Period,period,2.0,0,PRICE_CLOSE,MODE_UPPER,shift+1);
double PrevLowerBB = iBands(_Symbol,_Period,period,2,0,PRICE_CLOSE,MODE_LOWER,shift+2);
double PrevUpperBB = iBands(_Symbol,_Period,period,2,0,PRICE_CLOSE,MODE_UPPER,shift+2);
//buy signal
if(type==OP_BUY && Close[shift+2]>PrevLowerBB && Close[shift+1]<LowerBB) return true;
//sell signal
if(type==OP_SELL && Close[shift+2]<PrevUpperBB && Close[shift+1]>UpperBB) return true;
return false;
}