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

MakeGrid193

makegrid193be short.mq4

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

! macd+.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!macd_adx.mq4MQL4 / MetaTrader 4 · 1 общих теговxauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 1 общих теговtm sniper pro.pineTradingView · 1 общих теговsource code of grid with 100 pips stop loss.mq4MQL4 / MetaTrader 4 · 1 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

MakeGrid193 — торговый советник для MetaTrader 4, реализующий стратегию сеточной торговли (grid). Советник размещает отложенные ордера BUY и SELL на заданном расстоянии друг от друга, формируя сетку вокруг текущей цены. Количество ордеров, размер сетки и лот настраиваются пользователем.

Советник поддерживает фильтрацию направлений через индикаторы EMA, MACD и OsMA. Доступны различные режимы входа: breakout (сверх цены) и counter (против цены), а также ограничение направлений по положению цены относительно EMA. Встроена проверка максимального количества открытых позиций.

Для управления рисками предусмотрены trailing stop, перевод стоп-лосса в безубыток (BEPips), ограничение времени удержания позиций, автоматическое закрытие при достижении целевой прибыли, а также функции приостановки и полного завершения работы сетки.

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

НастройкаОписание
Magic number of the trades. must be unique to identify (uniqueGridMagic) Магическое число сетки — Магическое число для идентификации ордеров сетки. Должно быть уникальным для корректного распознавания торговых позиций.
Lots Размер лота — Размер лота для каждого ордера.
pips between orders - grid or mesh size (GridSize) Размер сетки (пипсы) — Расстояние между ордерами в сетке, измеряемое в пипсах.
total number of orders to place (GridSteps) Количество ордеров в сетке — Общее количество ордеров, размещаемых в сетке.
number of ticks to take profit. normally is = grid size but u can override (TakeProfit) Тейк-профит (пипсы) — Уровень тейк-профита в пипсах от цены входа. По умолчанию равен размеру сетки, но может быть переопределён.
if u want to add a stop loss. normal grids dont use stop losses (StopLoss) Стоп-лосс (пипсы) — Уровень стоп-лосса в пипсах от цены входа. Если значение равно 0, стоп-лосс не устанавливается.
will trail if > 0 (trailStop) Трейлинг-стоп (пункты) — Расстояние трейлинг-стопа в пунктах. Если больше 0, активируется trailing stop для открытых позиций.
will move the stoploss to BE after x pips of movement (BEPips) Безубыток (пипсы) — Переводит стоп-лосс в безубыток после указанного количества пунктов движения цены. Если значение равно 0, функция неактивна.
update orders every x minutes (UpdateInterval) Интервал обновления (минуты) — Интервал обновления ордеров в минутах. Советник пересчитывает сетку с заданной периодичностью.
do we want long positions (wantLongs) Разрешить долгие позиции — При значении true разрешает открытие долгих позиций.
do we want short positions (wantShorts) Разрешить короткие позиции — При значении true разрешает открытие коротких позиций.
do we want longs above price, shorts below price (wantBreakout) Разрешить breakout — При значении true разрешает размещение долгих ордеров выше цены и коротких — ниже цены.
do we want longs below price, shorts above price (wantCounter) Разрешить counter — При значении true разрешает размещение долгих ордеров ниже цены и коротких — выше цены.
do we want longs above ema only, shorts below ema only (limitEMA) Ограничение по EMA — При значении true разрешает долгие позиции только выше EMA, а короткие — только ниже EMA.
the length of the EMA.. was previously fixed at 34 (EMAperiod) Период EMA — Период скользящей средней EMA, используемой для фильтрации направлений. Ранее значение было фиксировано на 34.
maximum number of open positions : implemented in v1.92 (GridMaxOpen) Максимум открытых позиций — Максимальное количество открытых позиций. При достижении лимита новые ордера не открываются (реализовано в версии 1.92).
if true, will use macd >0 for longs only, macd <0 for shorts only (UseMACD) Использовать MACD — При значении true использует MACD для фильтрации: долгие позиции только при MACD > 0, короткие — при MACD < 0. При пересечении нулевого уровня отменяет все отложенные ордера.
if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD. (UseOsMA) Использовать OsMA — При значении true использует OsMA для фильтрации: долгие позиции только при OsMA > 0, короткие — при OsMA < 0. Работает аналогично MACD. Если одновременно активны UseMACD и UseOsMA, приоритет имеет OsMA.
if UseMACD, do we also close open positions with a loss? (CloseOpenPositions) Закрытие позиций при сигнале MACD — При активном UseMACD определяет, нужно ли также закрывать открытые позиции с убытком при пересечении сигнала MACD.
this will remove long orders below the 34 ema and vv if limitEMA flag is true (doHouseKeeping) Автоматическая очистка ордеров у EMA — Удаляет ордера на неправильной стороне EMA, если флаг limitEMA активен.
in hours - if > 0, all open orders or positions will be closed after this period. fractions are perm (keepOpenTimeLimit) Лимит времени удержания (часы) — Лимит времени удержания позиций в часах. Если больше 0, все открытые ордера и позиции закрываются по истечении указанного периода. Допускаются дробные значения.
parameters for MACD and OSMA (emaFast) Быстрая EMA (MACD/OsMA) — Быстрая EMA для индикаторов MACD и OsMA.
parameters for MACD and OSMA (emaSlow) Медленная EMA (MACD/OsMA) — Медленная EMA для индикаторов MACD и OsMA.
parameters for MACD and OSMA (signalPeriod) Период сигнальной линии (MACD/OsMA) — Период сигнальной линии для индикаторов MACD и OsMA.
parameters for MACD and OSMA (timeFrame) Таймфрейм (MACD/OsMA) — Таймфрейм для расчёта индикаторов MACD и OsMA. Значение 0 означает текущий таймфрейм.
minimum distance from price to place trades. (minFromPrice) Минимальное расстояние от цены (пункты) — Минимальное расстояние от текущей цены для размещения ордеров, в пунктах.
will trade for this number of minutes after being initialised. (tradeForMinutes) Время торговли (минуты) — Время торговли в минутах после инициализации. После истечения указанного времени все позиции закрываются.
positions are opened at price modulo GridSize and offset with this parameter. (gridOffset) Смещение сетки — Смещение при открытии позиций: ордера открываются по модулю GridSize с учётом данного смещения. Используется для входа на неокруглённых уровнях цены.
defines the center point of a fixed width long grid (longGridCenter) Центр долгой сетки — Центральная точка сетки фиксированной ширины для долгих позиций. Если значение больше одного пункта, сетка центрируется вокруг этого уровня.
defines the center point of a fixed width short grid (shortGridCenter) Центр короткой сетки — Центральная точка сетки фиксированной ширины для коротких позиций.
defines the bottom of a fixed width long grid (longGridLow) Нижняя граница долгой сетки — Нижняя граница сетки фиксированной ширины для долгих позиций.
defines the top of a fixed width long grid (longGridHigh) Верхняя граница долгой сетки — Верхняя граница сетки фиксированной ширины для долгих позиций.
defines the bottom of a fixed width short grid (shortGridLow) Нижняя граница короткой сетки — Нижняя граница сетки фиксированной ширины для коротких позиций.
defines the top of a fixed width short grid (shortGridHigh) Верхняя граница короткой сетки — Верхняя граница сетки фиксированной ширины для коротких позиций.
if > 0, will close out all positions once the $ target has been met (profitTarget) Целевая прибыль (доллары) — Целевая прибыль в долларах. Если больше 0, все позиции закрываются при достижении накопленной прибыли.
if set to true, will close all unfilled Orders (suspendGrid) Приостановка сетки — При значении true закрывает все неисполненные отложенные ордера.
if set to true, will close all orders and positions. (shutdownGrid) Полное завершение сетки — При значении true закрывает все ордера и позиции и завершает работу советника.
Получить полный код

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

extern int    uniqueGridMagic = 11111; // Magic number of the trades. must be unique to identify

extern double Lots = 0.1;              // 
extern double GridSize = 6;            // pips between orders - grid or mesh size
extern double GridSteps = 10;          // total number of orders to place
extern double TakeProfit = 10 ;        // number of ticks to take profit. normally is = grid size but u can override
extern double StopLoss = 0;            // if u want to add a stop loss. normal grids dont use stop losses
extern int    trailStop = 0;           // will trail if > 0
extern int    BEPips = 0;              // will move the stoploss to BE after x pips of movement
extern double UpdateInterval = 1;      // update orders every x minutes
extern bool   wantLongs = false;        // do we want long positions
extern bool   wantShorts = true;       // do we want short positions
extern bool   wantBreakout = true;     // do we want longs above price, shorts below price
extern bool   wantCounter = true;      // do we want longs below price, shorts above price
extern bool   limitEMA = true;         // do we want longs above ema only, shorts below ema only
extern int    EMAperiod = 34;          // the length of the EMA.. was previously fixed at 34
extern double GridMaxOpen = 0;         // maximum number of open positions : implemented in v1.92
extern bool   UseMACD = true;          // if true, will use macd >0 for longs only, macd <0 for shorts only

extern bool   UseOsMA = false;         // if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD. 

extern bool CloseOpenPositions = false;// if UseMACD, do we also close open positions with a loss?
extern bool   doHouseKeeping = true;   // this will remove long orders below the 34 ema and vv if limitEMA flag is true
extern double keepOpenTimeLimit = 0;   // in hours - if > 0, all open orders or positions will be closed after this period. fractions are permitted
extern int    emaFast = 12;            // parameters for MACD and OSMA
extern int    emaSlow = 26;            // parameters for MACD and OSMA
extern int    signalPeriod = 9;        // parameters for MACD and OSMA
extern int    timeFrame = 0;           // parameters for MACD and OSMA
extern int    minFromPrice = 0;        // minimum distance from price to place trades.
extern int    tradeForMinutes=0;       // will trade for this number of minutes after being initialised. 

extern int    gridOffset = 0;          // positions are opened at price modulo GridSize and offset with this parameter.

extern double longGridCenter = 0;      // defines the center point of a fixed width long grid                                       
extern double shortGridCenter = 0;     // defines the center point of a fixed width short grid                                       

extern double longGridLow = 0;         // defines the bottom of a fixed width long grid
extern double longGridHigh = 0;        // defines the top of a fixed width long grid

extern double shortGridLow = 0;         // defines the bottom of a fixed width short grid
extern double shortGridHigh = 0;        // defines the top of a fixed width short grid

extern double profitTarget = 15000;     // if > 0, will close out all positions once the $ target has been met

extern bool   suspendGrid = false;       // if set to true, will close all unfilled Orders 
extern bool   shutdownGrid = false;      // if set to true, will close all orders and positions.

string   GridName = "Grid";              // identifies the grid. allows for several co-existing grids - old variable.. shold not use any more
double   LastUpdate = 0;                 // counter used to note time of last update
double   startTime = 0;                  // counter to note trade start time.
double   closedProfit = 0;               // counts closed p&l
double   openProfit = 0;                 // counts open p&l
double   accumulatedProfit = 0;          // for back testing only
bool     haveHitTarget = false;          //  if there is a target, this flag says we have hit it
int      openLongs = 0;                  //  how many longs are open 
int      openShorts = 0;                 // how many shorts are open 
bool     gridActive = true;              // is the grid active
bool     gridOneShot = false;       // is this a one shot? if so, it stops after the profitTarget has been reached

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

bool IsPosition(double atRate, double inRange, bool checkLongs )
  {
     int totalorders = OrdersTotal();
     for(int i=0;i<totalorders;i++)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);

        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         {  int type = OrderType();
            if (MathAbs( OrderOpenPrice() - atRate ) < (inRange*0.9)) // dont look for exact price but price proximity (less than gridsize) - added 0.9 because of floating point errors
              { if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT  || type == OP_BUYSTOP ) )  || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT  || type == OP_SELLSTOP ) ) )
                 { 
                    return(true); 
                 }
              }
         }
      } 
   return(false);
  }

void DeleteAfter( double xHours )    // delete pending orders or open positions after x hours
  {
  int totalorders = OrdersTotal();
  for(int i=totalorders-1;i>=0;i--)
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

     if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
        {
            if (( MathAbs(iTime(Symbol(),5,0)-OrderOpenTime()) >= xHours*60*60 ) && (iTime(Symbol(),5,0)>0))
            {  bool result = false;

               if ( OrderType() == OP_BUY )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

               if ( OrderType() == OP_SELL )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

               if ( OrderType() > 1 ) result = OrderDelete( OrderTicket() );
           }
        }

  } // proc DeleteAfter()

void CloseAllPendingOrders( )
  {
     int totalorders = OrdersTotal();
     for(int i=totalorders-1;i>=0;i--)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);

        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         {  
          if ( OrderType() > 1 ) bool result = OrderDelete( OrderTicket() );
         }
      } 
   return;
  }

void ClosePendingOrdersAndPositions()
{
  int totalorders = OrdersTotal();
  for(int i=totalorders-1;i>=0;i--)
 {
    OrderSelect(i, SELECT_BY_POS);
    bool result = false;

    if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
     {

           if ( OrderType() == OP_BUY )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

           if ( OrderType() == OP_SELL )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

           if ( OrderType() > 1 ) result = OrderDelete( OrderTicket() );
      }
  }
  return;
}

void CloseOrdersfromEMA( double theEMAValue )
  {
     int totalorders = OrdersTotal();
     for(int i=totalorders-1;i>=0;i--)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);
        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         {  
          int type = OrderType();
          bool result = false;

          if ( type == OP_BUYLIMIT && OrderOpenPrice() <= theEMAValue ) result = OrderDelete( OrderTicket() ); 
          if ( type == OP_BUYSTOP && OrderOpenPrice() <= theEMAValue ) result = OrderDelete( OrderTicket() ); 
          if ( type == OP_SELLLIMIT && OrderOpenPrice() >= theEMAValue ) result = OrderDelete( OrderTicket() ); 
          if ( type == OP_SELLSTOP && OrderOpenPrice() >= theEMAValue ) result = OrderDelete( OrderTicket() ); 
         }
      } 
   return;
  }

int openPositions(  )
  {  int op =0;
     int totalorders = OrdersTotal();
     for(int i=totalorders-1;i>=0;i--)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);
        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         {  
          int type = OrderType();
          if ( type == OP_BUY ) {op=op+1;} 
          if ( type == OP_SELL ) {op=op+1;} 
         }
      } 
   return(op);
  }

void TestForProfit( int forMagic, double profittarget, bool testOpen, bool testHistory )                   // based on trailing stop code from MT site... but modified as per Hiro
  {
    if (profittarget > 0 )
     {
         closedProfit = 0;                // counts closed p&l

         if (testHistory == true) {
            int total = HistoryTotal();
            for(int i=0;i<total;i++)                                // scan all closed / cancelled transactions
              {
              OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
              if ( OrderSymbol() == Symbol() && OrderMagicNumber() == forMagic )  // only look if mygrid and symbol...
                {
                 closedProfit = closedProfit + OrderProfit();
               }
              }
          } else {
             accumulatedProfit =0;
          }

         openProfit = 0;                  // counts open p&l

         if (testOpen == true) {
            total = OrdersTotal();
            openLongs = 0;
            openShorts = 0;
            for(i=0;i<total;i++)                                // scan all open orders and positions
              {
              OrderSelect(i, SELECT_BY_POS );
              if ( OrderSymbol() == Symbol() && OrderMagicNumber() == forMagic )  /

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

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

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

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

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

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

Стоимость полного кода
1 447,10₽ ≈ $17.69