bollinger_bands_exit_strategy.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «bollinger_bands_exit_strategy.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для MetaTrader 4, предназначенный для закрытия существующих позиций по стратегии, основанной на полосах Боллинджера. Он отслеживает открытые ордера на текущем символе и закрывает длинные позиции, когда цена достигает верхней полосы индикатора, и короткие позиции — когда цена опускается до нижней полосы. Работает с ручными ордерами, размещёнными на выбранном таймфрейме.
Советник поддерживает звуковые и email-уведомления о закрытии позиций, а также отображает текущую прибыль в комментарии графика. Пользователь может настраивать параметры индикатора полос Боллинджера, допустимое проскальзывание, текст комментария к ордерам и типы оповещений.
Настройки программы
| Настройка | Описание |
|---|---|
| Comment1 | Разделитель группы параметров стратегии — Текстовый заголовок группы настроек стратегии |
| EA_Activated | Активация советника — Включает или отключает выполнение логики закрытия позиций |
| TimeFrame | Таймфрейм — Выбор таймфрейма для расчёта индикатора полос Боллинджера |
| BB_Periods | Период полос Боллинджера — Количество баров для расчёта средней линии индикатора |
| BB_Deviation | Отклонение полос Боллинджера — Множитель стандартного отклонения для построения верхней и нижней полос |
| Comment2 | Разделитель группы проскальзывания — Текстовый заголовок группы настроек проскальзывания |
| Slippage | Проскальзывание — Максимально допустимое проскальзывание при закрытии ордера в пунктах |
| Comment3 | Разделитель группы комментария ордера — Текстовый заголовок группы настроек комментария к ордеру |
| CommentOrder | Комментарий ордера — Текст, добавляемый к комментарию закрываемого ордера |
| Comment4 | Разделитель группы уведомлений — Текстовый заголовок группы настроек оповещений |
| Sound_Alert | Звуковое оповещение — Включает звуковой сигнал при закрытии позиции |
| Email_Alert | Email-оповещение — Включает отправку email-уведомления при закрытии позиции |
| Comment5 | Разделитель группы звуков — Текстовый заголовок группы настроек звуковых сигналов |
| EASounds | Звуки советника — Включает воспроизведение звука при закрытии ордера |
Поиск по коду файла
#property description "This Expert Advisors will Close:\n\n"
#property description "- Long Trades at the Top Bollinger Band\n"
#property description "- Short Trades at the Bottom Bollinger Band"
#property description "\n\nThat had been placed manually at the choosen Pair/TimeFrame"
enum e_cycles{ Min_5=1, Min_15=2, Min_30=3, Min_60=4, Min_240=5, Daily=6, Weekly=7, Monthly=8 };
extern string Comment1 = "- Strategy Parameters -";
extern bool EA_Activated = true;
input e_cycles TimeFrame = Min_60;
extern int BB_Periods = 20;
extern double BB_Deviation = 2.0;
extern string Comment2 = "- Maximum price slippage for buy or sell orders -";
extern int Slippage = 3;
extern string Comment3 = "- Order comment text. Last part of the comment may be changed by server -";
extern string CommentOrder = "Expert Advisor Order";
extern string Comment4 = "- Should the EA use alerts -";
extern bool Sound_Alert = true;
extern bool Email_Alert = false;
extern string Comment5 = "- Should the EA orders produce sound -";
extern bool EASounds = true;
int Magic_N = 0;
string EA_Name = "Bollinger Bands Exit Strategy";
int Close_Long, Close_Short;
int Side, Open_Level = 0;
double Profit;
int init(){
// код доступен только после оплаты
}
int start(){
// код доступен только после оплаты
}
void EA_Calculations(){
Close_Long = 0;
Close_Short = 0;
int period = Get_TimeFrame(TimeFrame);
if (Close[0] > iBands(NULL,period,BB_Periods,BB_Deviation,0,PRICE_CLOSE,MODE_UPPER,0) && EA_Activated) Close_Long = 1;
if (Close[0] < iBands(NULL,period,BB_Periods,BB_Deviation,0,PRICE_CLOSE,MODE_LOWER,0) && EA_Activated) Close_Short = 1;
}
void EA_Notes(){
string Note = EA_Name+"\n";
Note = Note + "Profit: " + DoubleToStr(Profit,2) + "\n";
Comment(Note);
}
int ClosePos(int direction){
int i = 0;
int attempts = 0;
int order = 0;
double price;
string string_direction = "";
for(i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if (OrderType()==direction && OrderSymbol()==Symbol() && ((OrderMagicNumber () == Magic_N) || Magic_N==0)) {
for(attempts=0;attempts<3;attempts++){
if (IsTradeContextBusy()){
Sleep(1000);
}else{
RefreshRates();
if(direction == OP_BUY){
price = Bid;
string_direction = "Long";
}else{
price = Ask;
string_direction = "Short";
}
if(EASounds) PlaySound("alert.wav");
order = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(price,Digits),Slippage,Red);
if(order==0){
Print("Error Occured : "+Errors(GetLastError()));
}
else{
attempts = 3;
Print("Order closed : "+Symbol()+" Close @ "+price+" order ="+OrderTicket());
Profit = Profit + OrderProfit();
Side = -1;
Open_Level = 0;
Notifications("Close "+string_direction,price,0,0,OrderTicket());
return(order);
}
}
}
}
}
}
return(order);
}
string Errors(int error_code){
string desc_error;
switch(error_code){
case 0:
case 1: desc_error="no error"; break;
case 2: desc_error="common error"; break;
case 3: desc_error="invalid trade parameters"; break;
case 4: desc_error="trade server is busy"; break;
case 5: desc_error="old version of the client terminal"; break;
case 6: desc_error="no connection with trade server"; break;
case 7: desc_error="not enough rights"; break;
case 8: desc_error="too frequent requests"; break;
case 9: desc_error="malfunctional trade operation"; break;
case 64: desc_error="account disabled"; break;
case 65: desc_error="invalid account"; break;
case 128: desc_error="trade timeout"; break;
case 129: desc_error="invalid price"; break;
case 130: desc_error="invalid stops"; break;
case 131: desc_error="invalid trade volume"; break;
case 132: desc_error="market is closed"; break;
case 133: desc_error="trade is disabled"; break;
case 134: desc_error="not enough money"; break;
case 135: desc_error="price changed"; break;
case 136: desc_error="off quotes"; break;
case 137: desc_error="broker is busy"; break;
case 138: desc_error="requote"; break;
case 139: desc_error="order is locked"; break;
case 140: desc_error="long positions only allowed"; break;
case 141: desc_error="too many requests"; break;
case 145: desc_error="modification denied because order too close to market"; break;
case 146: desc_error="trade context is busy"; break;
case 4000: desc_error="no error"; break;
case 4001: desc_error="wrong function pointer"; break;
case 4002: desc_error="array index is out of range"; break;
case 4003: desc_error="no memory for function Показано первые 50% кода (символов: 8411)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.