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

OverHedge

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

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

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

О программе

OverHedge — торговый советник для MetaTrader 4, реализующий стратегию хеджирования с построением сетки ордеров. Советник анализирует направление цены с помощью двух скользящих средних (LSMA или EMA) и открывает сделки при наличии выраженного тренда. При отсутствии направления новые позиции не открываются.

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

Реализована пауза перед закрытием прибыльных позиций и фильтрация ордеров по magic number. Советник работает на текущем торговом символе и использует стандартные торговые API MetaTrader 4 для открытия и закрытия позиций.

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

НастройкаОписание
MagicNumber Магический номер — Идентификатор ордеров, используемый для фильтрации позиций советника.
Lots Размер лота — Начальный размер лота для первой сделки.
HedgeBase База хеджирования — Множитель для расчёта размера лота следующей сделки в зависимости от количества уже открытых позиций.
Slippage Проскальзывание — Допустимое отклонение цены при исполнении ордеров.
shutdownGrid Закрыть сетку — Переключатель для аварийного закрытия всех открытых позиций советника и выхода.
TunnelWidth Ширина туннеля — Ширина туннеля, определяющая зоны входа в позиции.
if > 0, will close out all positions once the pip target has been met (profitTarget) Целевая прибыль — Целевая прибыль в пунктах. При достижении этого значения все открытые позиции закрываются.
UseLSMA Использовать LSMA — Переключатель для выбора метода расчёта скользящей средней: LSMA или стандартная EMA.
original was 7, change based on new optimization Mar06 (MAShortPeriod) Период быстрой скользящей средней — Период быстрой скользящей средней, используемой для определения направления тренда.
original was 16, change based on new optimization Mar06 (MALongPeriod) Период медленной скользящей средней — Период медленной скользящей средней, используемой для определения направления тренда.
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 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 bool UseLSMA = true;
extern int MAShortPeriod=8;   // original was 7, change based on new optimization Mar06
extern int MALongPeriod=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;

double LSMA(int Rperiod, int shift)
{
   int i;
   double sum;
   int length;
   double lengthvar;
   double tmp;
   double wt;

   length = Rperiod;

   sum = 0;
   for(i = length; i >= 1  ; i--)
   {
     lengthvar = length + 1;
     lengthvar /= 3;
     tmp = 0;
     tmp = ( i - lengthvar)*Close[length-i+shift];
     sum+=tmp;
    }
    wt = sum*6/(length*(length+1));

    return(wt);
}

int CheckDirection()
{
   double SlowMA, FastMA;
   double Dif;

   if (UseLSMA)
   {
     FastMA = LSMA(MAShortPeriod,1);
     SlowMA = LSMA(MALongPeriod,1);
   }
   else
   {
     FastMA = iMA(NULL,0,MAShortPeriod,0,MODE_EMA,PRICE_CLOSE,1);
     SlowMA = iMA(NULL,0,MALongPeriod,0,MODE_EMA,PRICE_CLOSE,1);
   }

   Dif = FastMA-SlowMA;

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

}

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

int deinit()
  {
   return(0);
  }

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))
          {
            Print("Buy Order closed for " + Symbol() + " at " + Bid + ".");
          }
          else
          {
            err=GetLastError();
            Print("Error closing order : (", err , ") " + ErrorDescription(err));
          }
        }
        if(OrderType() == OP_SELL && OrderProfit() < 0)
        {
          if (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet))
          {
            Print("Sell Order closed for " + Symbol() + " at " + Ask + ".");
          }
          else
          {
            err=GetLastError();
            Print("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))
          {
            Print("Buy Order closed for " + Symbol() + " at " + Bid + ".");
          }
          else
          {
            err=GetLastError();
            Print("Error closing order : (", err , ") " + ErrorDescription(err));
          }
        }
        if(OrderType() =

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

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

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

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

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

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

Стоимость полного кода
515,10₽ ≈ $6.30