Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Тимур Машнин
Чтение книги онлайн.

Читать онлайн книгу Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - Тимур Машнин страница 24

СКАЧАТЬ (0,«Buy»+i, OBJPROP_WIDTH,2);

      ObjectSetInteger (0,«Buy»+i, OBJPROP_ANCHOR, ANCHOR_UPPER);

      ObjectSetInteger (0,«Buy»+i, OBJPROP_HIDDEN, true);

      ObjectSetString (0,«Buy»+i, OBJPROP_TOOLTIP, close [i-1]);

      }

      if (start!=1) {

      if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] <EMA34LBuffer [i-1] &&EMA125Buffer [i-1] <EMA34HBuffer [i-1]) {

      countBuy++;

      if (countBuy==1) PlaySound («chime. wav»)

      } else {

      countBuy=0;

      }

      if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]) {

      countSell++;

      if (countSell==1) PlaySound («chime. wav»);

      } else {

      countSell=0;

      }

      }

      if (close [i-1] <open [i-1] &&close [i-1] <EMA34HBuffer [i-1] &&close [i-1] <EMA34LBuffer [i-1] &&high [i-1] <EMA125Buffer [i-1] &&high [i-1] <PSARBuffer [i-1] &&EMA125Buffer [i-1]> EMA34LBuffer [i-1] &&EMA125Buffer [i-1]> EMA34HBuffer [i-1]) {

      if (!ObjectCreate (0,«Sell»+i, OBJ_ARROW,0,time [i-1],low [i-1]))

      {

      return (false);

      }

      ObjectSetInteger (0,«Sell»+i, OBJPROP_COLOR, clrRed);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_ARROWCODE,234);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_WIDTH,2);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_ANCHOR, ANCHOR_LOWER);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_HIDDEN, true);

      ObjectSetString (0,«Sell»+i, OBJPROP_TOOLTIP, close [i-1]);

      }

      }

      bars_calculated=calculated;

      // – - return value of prev_calculated for next call

      return (rates_total);

      }

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      bool FillArrayFromPSARBuffer (double &sar_buffer [], // индикаторный буфер значений Parabolic SAR

      int ind_handle, // хэндл индикатора iSAR

      int amount // количество копируемых значений

      )

      {

      ResetLastError ();

      if (CopyBuffer (ind_handle,0,0,amount, sar_buffer) <0)

      {

      return (false);

      }

      return (true);

      }

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      bool FillArrayFromMABuffer (double &values [], // индикаторный буфер значений Moving Average

      int shift, // смещение

      int ind_handle, // хэндл индикатора iMA

      int amount // количество копируемых значений

      )

      {

      ResetLastError ();

      if (CopyBuffer (ind_handle,0, -shift, amount, values) <0)

      {

      return (false);

      }

      return (true);

      }

      void OnDeinit (const int reason) {

      ObjectsDeleteAll (0, -1, -1);

      }

      Здесь добавлены счетчики сигналов на продажу и покупку countBuy, countSell, для того, чтобы сигнал звучал только при появлении первого сигнала.

      Функция OnChartEvent

      Функция OnChartEvent является функцией обратного вызова, которая вызывается при взаимодействии пользователя с графиком символа и событиях, связанных с графическими объектами графика символа.

      void OnChartEvent (const int id, // идентификатор события

      const long& lparam, // параметр события типа long

      const double& dparam, // параметр события типа double

      const string& sparam // параметр события типа string

      );

      В качестве примера использования функции OnChartEvent рассмотрим наш индикатор Impulse keeper и добавим СКАЧАТЬ