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

OverHedgeV2

overhedgev2_www_forex-instruments_info.mq4
Вы автор или правообладатель?

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

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

О программе

OverHedgeV2 — торговый советник для MetaTrader 4, написанный MrPip (Robert Hill). Советник реализует сеточную торговую стратегию с управлением размером лотов на основе текущего количества открытых позиций. Основной логикой работы является функция start(), вызываемая при каждом тике.

Советник определяет направление тренда с помощью двух экспоненциальных скользящих средних и открывает сделки в соответствующем направлении. При отсутствии открытых позиций проверяется направление рынка: если тренд восходящий — разрешаются только покупки, если нисходящий — только продажи. Объём лота для каждой новой позиции увеличивается в зависимости от количества уже открытых позиций.

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

Для отладки советник поддерживает запись логов в глобальные переменные и текстовые файлы. Магический номер используется для идентификации управляемых позиций.

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

НастройкаОписание
Debug Отладка — Включение/выключение режима отладки с записью логов в глобальные переменные и файл
TradeLog Файл лога — Имя текстового файла для записи отладочной информации
MagicNumber Магический номер — Магический номер для идентификации позиций, управляемых советником
Lots Размер лота — Начальный размер лота для торговых операций
HedgeBase Коэффициент наращивания лота — Коэффициент наращивания объёма лота при увеличении количества открытых позиций
Slippage Проскальгивание — Допустимое проскальгивание при исполнении ордеров
shutdownGrid Аварийное закрытие — Переключатель для аварийного закрытия всех открытых позиций и остановки работы советника
TunnelWidth Ширина туннеля — Параметр ширины ценового коридора для открытия позиций
if > 0, will close out all positions once the pip target has been met (profitTarget) Целевая прибыль — Целевое значение прибыли для автоматического закрытия всех открытых позиций
original was 7, change based on new optimization Mar06 (EMAShortPeriod) Период короткой EMA — Период короткой экспоненциальной скользящей средней для определения направления тренда
original was 16, change based on new optimization Mar06 (EMALongPeriod) Период длинной EMA — Период длинной экспоненциальной скользящей средней для определения направления тренда
Number of seconds to "sleep" before closing the next winning trade (PauseSeconds) Пауза перед закрытием — Время ожидания в секундах перед закрытием следующей прибыльной позиции
DO NOT CHANGE - Standard multiplier to convert seconds to milliseconds (MillisPerSec) Множитель миллисекунд — Множитель для преобразования секунд в миллисекунды (значение по умолчанию, не изменять)
Получить полный код

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

#include <stdlib.mqh>

extern bool Debug=false;
extern string TradeLog="TradeLog";

extern int    MagicNumber=11111;
extern double Lots=0.1;
extern double HedgeBase=2.0;
extern int Slippage=5;
extern bool shutdownGrid=false;
extern int TunnelWidth=20;

extern double profitTarget=100;     // if > 0, will close out all positions once the pip target has been met
extern int EMAShortPeriod=8;        // original was 7, change based on new optimization Mar06
extern int EMALongPeriod=21;        // original was 16, change based on new optimization Mar06
extern int    PauseSeconds=   6;    // Number of seconds to "sleep" before closing the next winning trade
extern int    MillisPerSec=1000;    // DO NOT CHANGE - Standard multiplier to convert seconds to milliseconds

double TunnelSize;
string setup;
double startBuyRate, startSellRate;
int currentOpen;
int NumBuyTrades, NumSellTrades;   // Number of buy and sell trades in this symbol
bool myWantLongs;
double lotMM;
double Profit;
bool OK2Buy,OK2Sell, FirstDirSell;

int CheckDirection()
  {
   double SlowEMA, FastEMA;
   double Dif;

   FastEMA=iMA(NULL,0,EMAShortPeriod,0,MODE_EMA,PRICE_CLOSE,1);
   SlowEMA=iMA(NULL,0,EMALongPeriod,0,MODE_EMA,PRICE_CLOSE,1);
   Dif=FastEMA-SlowEMA;

   if(Dif > 0)return(1);
   if(Dif < 0)return(-1);
   return(0);
  }

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {
   int handle;
   if (Debug)
     {
      if (GlobalVariableCheck("MyHandle"))
        {
         handle=GlobalVariableGet("MyHandle");
         FileFlush(handle);
         FileClose(handle);
         GlobalVariableDel("MyHandle");
        }
     }
   return(0);
  }

int Write(string str)
  {
   int handle;
   if (GlobalVariableCheck("MyHandle"))
     {
      handle=GlobalVariableGet("MyHandle");
      FileWrite(handle,str + " Time " + TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));
     }
  }

void CloseOpenPositions()
  {
   int cnt, err;

   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      OrderSelect (cnt, SELECT_BY_POS,MODE_TRADES);

      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber)  continue;
      if(OrderType()==OP_BUY && OrderProfit() < 0)
        {
         if (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet))
           {
            if (Debug) Write("Buy Order closed for " + Symbol() + " at " + Bid + ".");
           }
         else
           {
            err=GetLastError();
            Print("Error closing order : (", err , ") " + ErrorDescription(err));
            if (Debug)
              {
               Write("Error closing order : (" +  err  + ") " + ErrorDescription(err));
              }
           }
        }
      if(OrderType()==OP_SELL && OrderProfit() < 0)
        {
         if (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet))
           {
            if (Debug) Write("Sell Order closed for " + Symbol() + " at " + Ask + ".");
           }
         else
           {
            err=GetLastError();
            Print("Error closing order : (", err , ") " + ErrorDescription(err));
            if (Debug)
              {
               Write("Error closing order : (" +  err  + ") " + ErrorDescription(err));
              }
           }
        }
     }

   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      OrderSelect (cnt, SELECT_BY_POS,MODE_TRADES);

      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber)  continue;
      if(OrderType()==OP_BUY && OrderProfit() > 0)
        {
         Sleep(PauseSeconds*MillisPerSec);
         if (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Gold))
           {
            if (Debug) Write("Buy Order closed for " + Symbol() + " at " + Bid + ".");
           }
         else
           {
            err=GetLastError();
            Print("Error closing order : (", err , ") " + ErrorDescription(err));
            if (Debug)
              {
               Write("Error closing order : (" +  err  + ") " + ErrorDescription(err));
              }
           }
        }
      if(OrderType()==OP_SELL && OrderProfit() > 0)
        {
         Sleep(PauseSeconds*MillisPerSec);
         if (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Gold))
           {
    

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

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

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

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

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

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

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