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

makegrid192.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 общих тегов
Вы автор или правообладатель?

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

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

О программе

MakeGrid192 — торговый советник для MetaTrader 4, реализующий сеточную (grid) торговлю. Советник размещает серию отложенных ордеров buy/sell limit и buy/sell stop на фиксированных расстояниях друг от друга, формируя сетку вокруг текущей цены. Количество ордеров, шаг сетки и объём сделок задаются пользователем через настройки.

Советник поддерживает фильтрацию направлений открытием на основе скользящей средней EMA, а также индикаторов MACD и OsMA. При пересечении сигнальных линий MACD/OsMA возможно автоматическое закрытие всех отложенных ордеров и открытых позиций. Дополнительно реализованы скользящий стоп, ограничение максимального количества открытых позиций и автоматическое удаление ордеров по времени.

Идентификация ордеров советника осуществляется с помощью magic number, что позволяет одновременно использовать несколько сеточных советников на одном счёте. Торговые операции выполняются через стандартные функции OrderSend, OrderClose и OrderModify платформы MetaTrader 4.

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

НастройкаОписание
Magic number of the trades. must be unique to identify (uniqueGridMagic) Magic number (магическое число) для идентификации ордеров сетки. Должен быть уникальным, чтобы отличать ордера данной сетки от ордеров других советников.
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, для открытых позиций активируется отслеживание стоп-лосса по мере движения цены в прибыль.
update orders every x minutes (UpdateInterval) Интервал обновления ордеров в минутах. Советник пересчитывает и обновляет сетку каждые заданные минуты.
do we want long positions (wantLongs) Разрешает открытие длинных (buy) позиций.
do we want short positions (wantShorts) Разрешает открытие коротких (sell) позиций.
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, фильтруя направления ордеров по скользящей средней.
the length of the EMA.. was previously fixed at 34 (EMAperiod) Период экспоненциальной скользящей средней 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 > 0 только для лонгов и MACD < 0 только для шортов. При пересечении сигнальных линий все отложенные ордера отменяются. Работает совместно с параметрами wantLongs и wantShorts.
if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD. (UseOsMA) Если включено, используется OsMA > 0 только для лонгов и OsMA < 0 только для шортов. Работает аналогично MACD. Если одновременно включены UseMACD и UseOsMA, приоритет отдаётся OsMA.
if UseMACD, do we also close open positions with a loss? (CloseOpenPositions) Если UseMACD включён, определяет, нужно ли также закрывать открытые позиции с убытком при пересечении сигнальных линий MACD.
this will remove long orders below the 34 ema and vv if limitEMA flag is true (doHouseKeeping) Если limitEMA включён, удаляет ордера лонгов ниже EMA и шортов выше EMA, очищая ордера, оказавшиеся на неправильной стороне скользящей средней.
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.
parameters for MACD and OSMA (emaSlow) Медленный период 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) Минимальное расстояние от текущей цены до размещения торговых ордеров.
Получить полный код

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

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 = 12;          // total number of orders to place
extern double TakeProfit = 12 ;        // 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 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.

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

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 && OrderOpenP

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

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

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

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

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

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

Стоимость полного кода
916,80₽ ≈ $11.21