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

MakeGrid193

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

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

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

О программе

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

Включает управление открытыми позициями и отложенными ордерами, а также инструменты ограничения рисков: трейлинг-стопы, перевод стоп-лосса в безубыток, лимит времени удержания и целевой уровень прибыли.

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

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

НастройкаОписание
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) Стоп-лосс — Фиксированный стоп-лосс в пунктах; если равен нулю, стоп-лосс не устанавливается
will trail if > 0 (trailStop) Трейлинг-стоп — Активирует трейлинг-стоп при значении больше нуля, отслеживая прибыль в пунктах
will move the stoploss to BE after x pips of movement (BEPips) Безубыточность в пунктах — Переводит стоп-лосс в безубыток после достижения указанного движения цены в пунктах
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 и коротких ниже
the length of the EMA.. was previously fixed at 34 (EMAperiod) Период 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 аналогично MACD; при активации обоих фильтров приоритет отдаётся 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 при активном фильтре limitEMA
in hours - if > 0, all open orders or positions will be closed after this period. fractions are perm (keepOpenTimeLimit) Лимит времени удержания — Максимальное время удержания ордеров и позиций в часах; при нуле ограничение отключено
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; 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) Смещение сетки — Фиксированное смещение точек входа в сетке в пунктах
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) Целевая прибыль — При положительном значении закрывает все позиции и ордера после достижения указанной суммы прибыли в валюте счёта
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 = 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 = 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 {
             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