← К каталогу
Исходный код · ID 25

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 и перейдите к оплате.

Стоимость полного кода
841,10₽ ≈ $10.28