MQL4 как инструмент трейдера, или Advanced Technical Analysis

Andrey Opeyda | 12 июля, 2006


    Торговля на рынке - это в первую очередь расчет вероятностей. А поговорка «лень – двигатель прогресса» раскрывает все краски расцвета технических индикаторов и торговых систем. И получается, что большой процент начинающих трейдеров изучают уже готовые теории торговли. Но, к сожалению или к счастью, не все законы движения рынка ещё открыты, а инструменты для анализа ценовых движений в основном существуют в виде тех самых реализованных технических индикаторов, математических и статистических пакетов. Огромное спасибо Билу Вильямсу за его вклад в теорию движения рынков. Но, наверное, не следует останавливаться на достигнутом.

    Зададим себе вопрос: «Свечи какого цвета преобладают на часовом графике EURUSD?» Можно начать считать сначала чёрные свечи, попутно записывая каждую новую сотню в блокнот, потом белые. А можно накидать десять строчек кода, которые всё это сделают. В принципе всё логично и ничего особенного тут нет. И всё же найдём ответ на поставленный  вопрос. Для начала упростим себе идентификацию цвета свечи:

bool isBlack(int shift)
  {
    if(Open[shift] > Close[shift])
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+
bool isWhite(int shift)
  {
    if(Open[shift] < Close[shift]) 
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+

    Используя уже написанный код, продолжим эксперимент.

//EXAMPLE 1
      //Calculate black and white candles
      double BlackCandlesCount = 0;
      double WhiteCandlesCount = 0;
      double BProbability = 0;
 
      for(int i = 0; i < Bars - 1; i++)
        {
          if(isBlack(i) == true)
              BlackCandlesCount++;
 
          if(isWhite(i) == true)
              WhiteCandlesCount++;
        }
      
      BProbability = BlackCandlesCount / Bars;

    Интересный и вполне предсказуемый результат: 52,5426% из 16000 свечей белые. Имея под руками компилятор MQL4 можем заодно решить один из вопросов периодичности свечей. Например, если закрылась чёрная свеча, то какова вероятность формирования белой. Конечно же, это зависит от неимоверно большого количества факторов, но обратимся к статистике.

//EXAMPLE 2
      //Calculate seqences of 1st order
      //BW means after black going white candle     
      double BW = 0;
      double WB = 0;
      double BB = 0;
      double WW = 0;
       
      for(i = Bars; i > 0; i--)
        {
         if(isBlack(i) && isWhite(i-1)) 
             BW++;           
         if(isWhite(i) && isBlack(i-1)) 
             WB++;
         if(isBlack(i) && isBlack(i-1)) 
             BB++;            
         if(isWhite(i) && isWhite(i-1)) 
             WW++;
        }

     Полученный результат:
     - Белая затем Чёрная - 23,64 %
     - Чёрная затем Белая - 23,67 %
     - Белая затем Белая - 21,14 %
     - Чёрная затем Чёрная - 20,85 %

    Как видим вероятность возникновения свечи того-же цвета немного меньше, чем противоположного.

    Используя MQL4 и обладая историческими данными, трейдер может проводить более сложные исследования рынка. Построение гистограмм предусмотрено терминалом. Используем эту возможность для построения распределения цвета свечи в зависимости от значений индикаторов WPR и RSI.

//EXAMPLE 3.1
      //Build histogram by RSI
      //RSI min/max - 0/100
      
      double RSIHistogramBlack[100];
      double RSIHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int rsi_val = iRSI(NULL,0,12,PRICE_CLOSE,i);
          if(isWhite(i))
              RSIHistogramWhite[rsi_val]++;
          if(isBlack(i))
              RSIHistogramBlack[rsi_val]++;
        }
      for(i = 0; i < 100; i++)
        {
          ExtMapBuffer1[i] = RSIHistogramBlack[i];
          ExtMapBuffer2[i] = -RSIHistogramWhite[i];
        }
 
//EXAMPLE 3.2
      //Build histogram by %R
      //%R min/max - 0/-100

      double WPRHistogramBlack[100];
      double WPRHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int wpr_val = iWPR(NULL,0,12,i);
          int idx = MathAbs(wpr_val);
          if (isWhite(i))
              WPRHistogramWhite[idx]++;
          if (isBlack(i))
              WPRHistogramBlack[idx]++;
        }






    Но объективней бы было, вместо подсчета чёрных и белых свечей вести статистику прибыльных и убыточных сделок с разными значениями StopLoss и TakeProfit, для чего удобно будет использовать нижеприведенную процедуру:

int TestOrder(int shift, int barscount, int spread, int tp, int sl, int operation)
 {
   double open_price = Close[shift];
   
   if (operation == OP_BUY)
      open_price  = open_price + (Point * spread);
      
   if (operation == OP_SELL)
      open_price  = open_price - (Point * spread);
      
   
   for (int i = 0; i<barscount; i++)
    {
      if (operation == OP_BUY)
       {
         //sl
         if (Low[shift-i] <= open_price - (Point * sl) )
            return (MODE_STOPLOSS);
         //tp            
         if (High[shift-i] >= open_price + (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
      if (operation == OP_SELL)
       {
         //sl
         if (High[shift-i] >= open_price + (Point * sl) )
            return (MODE_STOPLOSS);
         //tp            
         if (Low[shift-i] <= open_price - (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
    }  
   return (MODE_EXPIRATION);   
 }

    Уверен – результаты вас удивят. Ещё больше удивят Карты Кохонена, Гауссово Распределение, Коофициент Хёрста. В принципе, удивительных вещей предостаточно. Главное не забывать суть и смысл торговли.

    В принципе каждый трейдер использует свою технику для торговли. И конечно же ему ничего не мешает графически выразить эффективность своей системы в том или ином случае, провести её анализ и качественно применять в торговле. Отсутствие результатов тоже есть результат. А знания, полученные трейдером, только повысят его продуктивность торговли.