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

cpair.mqh

Похожие материалы по тегам

#3 news panel (black) bgp.mq5MQL5 / MetaTrader 5 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговindicator marketmind for tradingview.pineTradingView · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговsovetnikov_v5.mq4MQL4 / MetaTrader 4 · 1 общих теговunlocker manual.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

CPair — это библиотека для MetaTrader 4, реализующая класс-менеджер одной торговой пары. Она интегрирует получение торговых сигналов через стратегию, проверку новостного и временного фильтров, а также управление жизненным циклом ордеров.

Класс обеспечивает отображение сигнальной панели, отправку алертов, открытие и закрытие ордеров, управление трейлинг-стопом и установку стоп-лоссов на открытые позиции. Все торговые операции контролируются набором внешних параметров.

Библиотека предназначена для использования как include-файл в составе более крупной торговой системы, где несколько экземпляров CPair обрабатывают разные валютные пары параллельно.

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

НастройкаОписание
__trading Разделитель настроек торговли и алертов — Разделитель-группировка настроек торговли и алертов.
allowTrading Разрешить торговлю — Включает или отключает возможность открытия реальных торговых ордеров.
sendAlerts Отправлять алерты — Включает или отключает отправку уведомлений о торговых сигналах.
emailAlerts Алерты по email — Включает отправку алертов по электронной почте.
stopLossAtZigZagArrow Стоп-лосс по ZigZag-стрелке — Определяет, используется ли уровень стоп-лосса по ZigZag-стрелке вместо стандартного расчёта.
minsBetween2TradesOnSamePair Минуты между сделками на одной паре — Минимальное количество минут между двумя сделками на одной паре.
AllowReEntriesOnSamePair Разрешить повторный вход на ту же пару — Разрешает повторный вход в торговую пару без ожидания интервала между сделками.
SignalInvalidAfterHours Часы до недействительности сигнала — Часы после которых сигнал считается недействительным.
SignalInvalidAfterPips Пипсы до недействительности сигнала — Пипсы отклонения после которых сигнал считается недействительным.
TradePairs Торговые пары — Список торговых пар, разделённых пробелами, которые могут обрабатываться системой.

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

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

Классы
Класс class CPair

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

Методы и конструкторы
Конструктор · CPair CPair(string symbol, IStrategy* strategy, CNewsFilter* newsFilter, CUtils* utils)

Конструктор класса; инициализирует менеджер пары с указанным символом, стратегией, фильтром новостей и утилитами.

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

Деструктор; освобождает выделенные объекты ордеров, фильтров и стратегии.

Метод · CPair int SignalCount()

Возвращает количество текущих действительных условий сигнала.

Метод · CPair int GetMaxSignalCount()

Возвращает максимальное количество условий, необходимых для признания сигнала действительным.

Метод · CPair void DrawHeader()

Отрисовывает заголовок панели отображения сигналов.

Метод · CPair void Draw(int line)

Отрисовывает строку статуса сигнала на указанной линии.

Метод · CPair void Trail()

Запускает управление трейлинг-стопом для открытых позиций.

Метод · CPair string GetSymbol()

Возвращает имя символа, управляемого данным экземпляром.

Метод · CPair double GetStoploss(int ticket)

Возвращает уровень стоп-лосса для указанного ордера.

Метод · CPair double GetRiskReward(int ticket)

Возвращает соотношение риск/прибыль для указанного ордера.

Метод · CPair void Refresh()

Обновляет торговый сигнал и инициирует обработку ордеров (алерты, закрытие противоположных, открытие новых).

Метод · CPair void SendAlerts()

Отправляет алерты о торговых сигналах при соответствующей настройке.

Метод · CPair void CloseOppositeOrders()

Закрывает ордера в противоположном направлении при появлении нового сигнала.

Метод · CPair void OpenNewOrder()

Открывает новый торговый ордер при выполнении всех условий.

Метод · CPair void SetStoplossOnOpenOrder()

Устанавливает стоп-лосс на уже открытые ордера при инициализации.

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

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

extern string      __trading                    = " ------- trading & alerts settings ------------";
extern bool        allowTrading                 = false;
extern bool        sendAlerts                   = false;
extern bool        emailAlerts                  = false;
extern bool        stopLossAtZigZagArrow        = true;
extern int         minsBetween2TradesOnSamePair = 720;
extern bool        AllowReEntriesOnSamePair     = false;
extern int         SignalInvalidAfterHours      = 12;
extern int         SignalInvalidAfterPips       = 30;
extern string      TradePairs                   = "EURUSD USDJPY GBPUSD USDCHF USDCAD AUDUSD NZDUSD EURCHF EURGBP EURCAD EURAUD EURNZD EURJPY GBPJPY CHFJPY CADJPY AUDJPY NZDJPY GBPCHF GBPAUD GBPCAD GBPNZD AUDCHF AUDCAD AUDNZD CADCHF NZDCHF NZDCAD";

#include <COrders.mqh>
#include <CTrailingStop.mqh>
#include <CTimeFilter.mqh>
#include <CNewsFilter.mqh>
#include <CStrategy.mqh>

class CPair
{
private:
   CNewsFilter*   _newsFilter;
   CTimeFilter*   _timeFilter;
   CTrailingStop* _trailingStop;
   COrders*       _orders;
   CUtils*        _utils;
   string         _symbol;
   NEWS_IMPACT    _impact;
   bool           _allowedToTradeNews;
   bool           _allowedToTradeTimeFilter;
   IStrategy*     _strategy;
   CSignal*       _signal;

public: 

   CPair(string symbol, IStrategy* strategy, CNewsFilter* newsFilter, CUtils* utils)
   {

      _symbol       = symbol;
      _utils        = utils;
      _trailingStop = new CTrailingStop(symbol);
      _newsFilter   = newsFilter;
      _timeFilter   = new CTimeFilter();
      _orders       = new COrders(symbol);
      _strategy     = strategy;
      _signal       = NULL;
      SetStoplossOnOpenOrder();
   }

   ~CPair()
   {
      delete _orders;
      delete _timeFilter;
      delete _trailingStop;
      delete _strategy;
   }

private:

   void DrawRect(int line, int xPos,color clr, int width, int height=17, int yoff=0)
   {
      string id="_l"+IntegerToString(line)+"c"+IntegerToString(xPos); 
      ObjectCreate(0,id,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0, id, OBJPROP_XDISTANCE, xPos);
      ObjectSetInteger(0, id, OBJPROP_YDISTANCE, line*17+22+yoff);
      ObjectSetInteger(0, id, OBJPROP_BGCOLOR  , clr);
      ObjectSetInteger(0, id, OBJPROP_XSIZE    , width);
      ObjectSetInteger(0, id, OBJPROP_YSIZE    , height);
      ObjectSetInteger(0, id, OBJPROP_BACK     , true);
      ObjectSetInteger(0, id, OBJPROP_WIDTH    , 0);
   }

   void DrawRectBg(int x, int y, int width, int height,color clr)
   {
      string id="_r"+IntegerToString(x)+"c"+IntegerToString(y); 
      ObjectCreate(0,id,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0, id, OBJPROP_XDISTANCE, x);
      ObjectSetInteger(0, id, OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0, id, OBJPROP_BGCOLOR  , clr);
      ObjectSetInteger(0, id, OBJPROP_XSIZE    , width);
      ObjectSetInteger(0, id, OBJPROP_YSIZE    , height);
      ObjectSetInteger(0, id, OBJPROP_BACK     , true);
      ObjectSetInteger(0, id, OBJPROP_WIDTH    , 0);
   }

   void DrawTextLine(int line, int column, string text, color clr, int xoff=0, int yoff=0)
   {
      string id="_l"+IntegerToString(line)+"c"+IntegerToString(column);
      double x= column==0 ?  20 : (column*70+35);
      if (line ==0 && column > 0) x=x-10;
      ObjectCreate(0,id,OBJ_LABEL,0,0,0);
      ObjectSetInteger(0, id, OBJPROP_XDISTANCE, ((int)x)+xoff);
      ObjectSetInteger(0, id, OBJPROP_YDISTANCE, line*17+20+yoff);
      ObjectSetString (0, id, OBJPROP_TEXT     , text);
      ObjectSetString (0, id, OBJPROP_FONT     , "Courier New");
      ObjectSetInteger(0, id, OBJPROP_ANCHOR   , ANCHOR_LEFT_UPPER);
      ObjectSetInteger(0, id, OBJPROP_FONTSIZE , 10);
      ObjectSetInteger(0, id, OBJPROP_COLOR    , clr);
   }

   void DrawText(int line, int xPos, string text, color clr, int yoff=0)
   {
      string id="_l"+IntegerToString(line)+"c"+IntegerToString(xPos);
      ObjectCreate(0,id,OBJ_LABEL,0,0,0);
      ObjectSetInteger(0, id, OBJPROP_XDISTANCE, xPos);
      ObjectSetInteger(0, id, OBJPROP_YDISTANCE, line*17+20+yoff);
      ObjectSetString (0, id, OBJPROP_TEXT     , text);
      ObjectSetString (0, id, OBJPROP_FONT     , "Courier New");
      ObjectSetInteger(0, id, OBJPROP_ANCHOR   , ANCHOR_LEFT_UPPER);
      ObjectSetInteger(0, id, OBJPROP_FONTSIZE , 10);
      ObjectSetInteger(0, id, OBJPROP_COLOR    , clr);
      ObjectSetInteger(0, id, OBJPROP_BGCOLOR  , clrBlack);
   }

public:   

   int SignalCount()
   {
      int cnt =0;
      if (_signal == NULL ) return 0; 
      if (_signal.IsBuy == false && _signal.IsSell == false) return 0;
      for (int i=0; i < _strategy.GetIndicatorCount(); ++i)
      {
         CIndicator* ind = _strategy.GetIndicator(i);
         if (ind.IsValid) cnt++;
      }
      if ( _allowedToTradeNews && UseNewsFilter )  cnt = cnt + 1;
      if ( _allowedToTradeTimeFilter ) cnt = cnt + 1;
      if (_signal.Age <= SignalInvalidAfterHours) cnt=cnt + 1;
      if (_signal.PipsAway <= SignalInvalidAfterPips) cnt=cnt+1;
      return cnt;
   }

   int GetMaxSignalCount()
   {
      int cnt= _strategy.GetIndicatorCount();
      if (UseNewsFilter) cnt = cnt + 1;
      cnt = cnt + 1; // time filter
      cnt = cnt + 1; // signal age
      cnt = cnt + 1; // signal pips from price
      return cnt;
   }

   void DrawHeader()
   {
      double maxX = (1 + GetMaxSignalCount() ) * 60 + 140;

      DrawRectBg(10, 35, (int)maxX, 20, clrGray);

      DrawText(1, 20, "Time", White);
      DrawText(1, 81, "Pair", White);

      int x = 140;
      for (int i=0; i < _strategy.GetIndicatorCount();++i)
      {
         CIndicator* indicator = _strategy.GetIndicator(i);
         DrawText(1,  x, indicator.Name, White);
         x += 60;
      }
      if (UseNewsFilter)
      {
         DrawText(1, x, "News",White);
         x += 60;
      }
      DrawText(1, x, "Time",White);
      x += 60;

      DrawText(1, x, "Age",White);
      x += 60;

      DrawText(1, x, "Pips",White);
      x += 60;

      DrawText(1, x, "Valid",White);
      x += 60;
   }

   void Draw(int line)
   {
      if (_signal == NULL) return;
      int xpos = 140;
      DrawTextLine(line, 0,TimeToStr(TimeCurrent(), TIME_MINUTES), White);
      DrawTextLine(line, 1, _symbol, White, -30);

      color zigClr = clrGray;
      if (_signal.IsBuy  ) zigClr = Green;
      else if (_signal.IsSell ) zigClr = Red;

      for (int i=0; i < _strategy.GetIndicatorCount();++i)
      {
         CIndicator* indicator = _strategy.GetIndicator(i);

         color clr =  (indicator.IsValid ) ? zigClr : clrGray;
         DrawRect(line, xpos, clr,60 ); xpos+=60;
      }

      if (UseNewsFilter)
      {
         color newsColor = _allowedToTradeNews ? zigClr : clrGray;
         DrawRect(line, xpos, zigClr,60 ); xpos+=60;
      }   

      color timeColor = _allowedToTradeTimeFilter ? zigClr : clrGray;
      DrawRect(line, xpos, zigClr,60 ); xpos+=60;

      color ageColor = (_signal.Age <= SignalInvalidAfterHours )? zigClr : clrGray;
      DrawRect(line, xpos, ageColor,60 ); xpos+=60;

      color pipsColor = (_signal.PipsAway <= SignalInvalidAfterPips )? zigClr : clrGray

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

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

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

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

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

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

Стоимость полного кода
997,70₽ ≈ $12.20