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

MakeGrid193

makegrid193.mq4

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

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 общих теговpro +.pineTradingView · 1 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

Сетка строится с настраиваемым шагом между ордерами и общим числом шагов. Ордера выставляются как Buy Stop/Buy Limit и Sell Stop/Sell Limit в зависимости от положения цены. Поддерживаются фильтры по направлению: можно разрешить только длинные, только короткие или оба направления, а также выбирать сценарии пробоя или контртрендовые. Дополнительно доступен фильтр по скользящей средней EMA, ограничивающий размещение ордеров относительно её значения.

Советник поддерживает использование индикаторов MACD и OsMA для фильтрации направления и закрытия ордеров при смене сигнала. Реализованы функции управления рисками: тейк-профит, стоп-лосс, трейлинг-стоп, ограничение максимального числа открытых позиций, удаление ордеров и позиций по времени, а также закрытие всех ордеров и позиций по достижении целевой прибыли. Имеются режимы приостановки и полного отключения сетки.

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

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

НастройкаОписание
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) Тейк-профит — Величина тейк-профита в пунктах. Если 0, используется значение GridSize.
if u want to add a stop loss. normal grids dont use stop losses (StopLoss) Стоп-лосс — Величина стоп-лосса в пунктах. Если 0, стоп-лосс не устанавливается.
will trail if > 0 (trailStop) Трейлинг-стоп — Величина трейлинг-стопа в пунктах. Если больше 0, трейлинг-стоп активируется.
update orders every x minutes (UpdateInterval) Интервал обновления — Интервал обновления ордеров в минутах.
do we want long positions (wantLongs) Разрешить длинные позиции — Разрешить открытие длинных позиций.
do we want short positions (wantShorts) Разрешить короткие позиции — Разрешить открытие коротких позиций.
do we want longs above price, shorts below price (wantBreakout) Торговля на пробой — Если включено, длинные ордера выставляются выше цены, короткие — ниже цены.
do we want longs below price, shorts above price (wantCounter) Контртрендовая торговля — Если включено, длинные ордера выставляются ниже цены, короткие — выше цены.
do we want longs above ema only, shorts below ema only (limitEMA) Ограничение по EMA — Если включено, длинные ордера выставляются только выше EMA, короткие — только ниже EMA.
the length of the EMA.. was previously fixed at 34 (EMAperiod) Период EMA — Период скользящей средней EMA, используемой для фильтрации направления ордеров.
maximum number of open positions : implemented in v1.92 (GridMaxOpen) Максимум открытых позиций — Максимальное количество одновременно открытых позиций. При превышении лимита отложенные ордера удаляются.
if true, will use macd >0 for longs only, macd <0 for shorts only (UseMACD) Использовать MACD — Если включено, используется индикатор MACD для фильтрации направления и закрытия ордеров при смене сигнала.
if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD. (UseOsMA) Использовать OsMA — Если включено, используется индикатор OsMA для фильтрации направления и закрытия ордеров при смене сигнала.
if UseMACD, do we also close open positions with a loss? (CloseOpenPositions) Закрывать открытые позиции — Если включено, при смене сигнала MACD/OsMA закрываются также открытые позиции с убытком.
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 — Период быстрой EMA для MACD и OsMA.
parameters for MACD and OSMA (emaSlow) Медленная EMA — Период медленной EMA для MACD и OsMA.
parameters for MACD and OSMA (signalPeriod) Период сигнала — Период сигнальной линии для MACD и OsMA.
parameters for MACD and OSMA (timeFrame) Таймфрейм — Таймфрейм для расчёта MACD и OsMA.
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) Смещение сетки — Смещение сетки в пунктах для входа по нерубленым ценам.
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) Приостановить сетку — Если включено, закрываются все неисполненные отложенные ордера.
if set to true, will close all orders and positions. (shutdownGrid) Отключить сетку — Если включено, закрываются все ордера и позиции, после чего советник прекращает работу.
Получить полный код

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

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 = 44;            // if u want to add a stop loss. normal grids dont use stop losses
extern int    trailStop = 0;           // will trail if > 0
extern double UpdateInterval = 1;      // update orders every x minutes
extern bool   wantLongs = true;        // 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 {
           

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

Что вы получите после оплаты

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

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

Стоимость полного кода
1 337₽