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

overhedgev2.mq4

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

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

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

О программе

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

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

НастройкаОписание
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

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

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

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

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

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

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

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