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

cpriceactionstrategy.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Библиотека CPriceActionStrategy представляет собой включаемый модуль для MetaTrader 4, реализующий торговую стратегию на основе анализа свечных паттернов (pinbar). Она исследует предыдущую свечу на заданном символе и определяет наличие паттерна пинбара — свечи с длинным фитилём относительно тела.

При обнаружении пинбара библиотека проверяет, находится ли его верхняя или нижняя точка на уровнях поддержки или сопротивления на дневном и/или недельном таймфреймах. Дополнительно доступна фильтрация входа по уровню 50% ретрейсмента пинбара.

Внутренне библиотека создаёт объекты анализа поддержки и сопротивления для таймфреймов D1 и W1, поддерживает массив индикаторов (Pinbar, S&R и опционально 50% ретрейсмент) и возвращает объект сигнала с информацией о направлении и стоп-лоссе через метод Refresh.

Настройки программы

НастройкаОписание
__trendfilter Текстовый параметр, используемый как заголовок раздела для группировки настроек пинбара в интерфейсе настроек.
Use50PercentRetracementEntry Переключатель, определяющий, требуется ли дополнительная проверка текущей цены на уровне 50% ретрейсмента пинбара для подтверждения торгового сигнала.
SupportResistanceLines Задаёт таймфрейм для проверки уровней поддержки и сопротивления при подтверждении сигнала пинбара. Доступны варианты: ежедневный, еженедельный или оба таймфрейма одновременно.

Состав библиотеки

Классов: 1 · методов: 4 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0

Классы
Класс class CPriceActionStrategy

Класс стратегии Price Action для анализа свечных паттернов и генерации торговых сигналов.

Методы и конструкторы
Конструктор · CPriceActionStrategy CPriceActionStrategy(string symbol)

Конструктор класса, инициализирующий объекты анализа поддержки/сопротивления и массив индикаторов по заданному торговому символу.

Деструктор · CPriceActionStrategy ~CPriceActionStrategy()

Деструктор класса, освобождающий память объектов сигналов, поддержки/сопротивления и индикаторов.

Метод · CPriceActionStrategy CSignal* Refresh()

Метод Refresh — пересчитывает индикаторы на предыдущей свече и формирует торговый сигнал (покупка или продажа) с уровнем стоп-лосса.

Метод · CPriceActionStrategy int GetIndicatorCount()

Метод GetIndicatorCount — возвращает количество индикаторов, используемых в стратегии.

Метод · CPriceActionStrategy CIndicator* GetIndicator(int indicator)

Метод GetIndicator — возвращает указатель на индикатор по его числовому индексу.

Метод · CPriceActionStrategy double GetStopLossForOpenOrder()

Метод GetStopLossForOpenOrder — возвращает уровень стоп-лосса для открытого ордера (в текущей реализации возвращает 0).

Получить полный код

Поиск по коду файла

#property strict

enum SRTypes
{
   Daily,
   Weekly,
   DailyAndWeekly
};

extern string     __trendfilter                 = " ------- Pinbar settings ------------";
extern bool        Use50PercentRetracementEntry = true;
extern SRTypes     SupportResistanceLines       = Weekly;

#include <CStrategy.mqh>
#include <CSupportResistance.mqh>

class CPriceActionStrategy : public IStrategy
{
private:
   CSupportResistance* _supportResistanceD1;
   CSupportResistance* _supportResistanceW1;

   int                 _indicatorCount;
   CIndicator*         _indicators[];
   CSignal*            _signal;
   string              _symbol;

public:

   CPriceActionStrategy(string symbol)
   {
      _symbol              = symbol;
      _signal              = new CSignal();
      _supportResistanceD1 = new CSupportResistance(_symbol, PERIOD_D1);
      _supportResistanceW1 = new CSupportResistance(_symbol, PERIOD_W1);

      ArrayResize(_indicators, 10);
      _indicatorCount = 0; 
      _indicators[_indicatorCount++] = new CIndicator("Pinbar");
      _indicators[_indicatorCount++] = new CIndicator("S&R");
      if (Use50PercentRetracementEntry) 
      {
         _indicators[_indicatorCount++] = new CIndicator("50%rt");
      }
   }

   ~CPriceActionStrategy()
   {
      delete _signal;
      delete _supportResistanceD1;
      delete _supportResistanceW1;

      for (int i=0; i < _indicatorCount;++i)
      {
         delete _indicators[i];
      }
      ArrayFree(_indicators);
   }

   CSignal* Refresh()
   {
      double priceOpen   = iOpen (_symbol, 0, 1);
      double priceClose  = iClose(_symbol, 0, 1);
      double priceHi     = iHigh (_symbol, 0, 1);
      double priceLow    = iLow  (_symbol, 0, 1);
      double pinbarRange = priceHi - priceLow ;
      double priceRetracement = priceLow + (pinbarRange * 0.5);

      double bodyLo      = MathMin(priceOpen, priceClose);
      double bodyHi      = MathMax(priceOpen, priceClose);
      double wickLoRange = MathAbs(bodyLo - priceLow);
      double wickHiRange = MathAbs(priceHi - bodyHi);
      double bodyRange   = MathAbs(bodyHi - bodyLo); 

      double priceNow    = MarketInfo(_symbol, MODE_BID); 
      double points      = MarketInfo(_symbol, MODE_POINT);
      double digits      = MarketInfo(_symbol, MODE_DIGITS);
      double mult = 1;
      if (digits ==3 || digits==5) mult = 10;

      _signal.Reset();

      for (int i=0; i < _indicatorCount;++i)
      {
         _indicators[i].IsValid = false;
      }

      if (priceClose < priceOpen)
      {

         bool isPinBar = false;
         if (wickHiRange >= 2 * bodyRange)  
         {
            if (wickHiRange >= 2 * wickLoRange)
            {
               isPinBar = true;
            }
         }
         if (isPinBar)
         {
            double pips = MathAbs(priceHi - bodyHi);
            pips /= mult;
            pips /= points;
            _indicators[0].IsValid = i

Показано первые 50% кода (символов: 3644)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
364,40₽ ≈ $4.45