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

mGRID EXPERT ADVISOR ver 2.0

mgrid ea.mq4
Вы автор или правообладатель?

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

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

О программе

mGRID EXPERT ADVISOR ver 2.0 — торговый советник для MetaTrader 4, работающий на языке MQL4. Советник относится к классу сеточных стратегий: при отсутствии открытых позиций по заданному магическому номеру он выставляет серию отложенных ордеров Buy Stop и Sell Stop по обе стороны от текущей цены. Количество уровней и шаг между ними задаются входными параметрами. Дальнейшее сопровождение позиций выполняется в обработчике события новой котировки.

Советник поддерживает управление объёмом позиции: базовый лот задаётся вручную либо рассчитывается автоматически в зависимости от баланса счёта и кредитного плеча при включённом режиме управления капиталом. Также предусмотрена возможность ограничить время начала торговли определённым часом сервера. При достижении заданной цели по прибыли или при срабатывании условий завершения цикла советник закрывает рыночные позиции и удаляет отложенные ордера.

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

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

НастройкаОписание
INCREMENT Шаг сетки — Шаг между уровнями сетки отложенных ордеров в пунктах.
LOTS Базовый лот — Базовый торговый объём для ордеров сетки. Может пересчитываться автоматически при включённом управлении капиталом.
LEVELS Количество уровней — Количество уровней сетки отложенных ордеров по каждую сторону от начальной цены.
MAX_LOTS Максимальный лот — Максимальный объём, используемый при частичном закрытии позиций.
MAGIC Магический номер — Уникальный идентификатор (магический номер) ордеров, принадлежащих советнику.
CONTINUE Продолжать работу — Определяет, продолжает ли советник работу после завершения торгового цикла. Если параметр выключен, после завершения сессии новые циклы не начинаются.
MONEY_MANAGEMENT Управление капиталом — Включает автоматический расчёт торгового объёма на основе баланса счёта, кредитного плеча и коэффициента риска.
RISK_RATIO Коэффициент риска — Коэффициент риска, используемый при автоматическом расчёте торгового объёма.
UseEntryTime Использовать время входа — Включает ограничение на открытие нового торгового цикла только в заданный час сервера.
EntryTime Час входа — Час сервера, в который разрешён вход в рынок при включённом параметре UseEntryTime.
Получить полный код

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

extern int       INCREMENT=35;
extern double    LOTS=0.1;
extern int       LEVELS=3; 
extern double    MAX_LOTS=99;
extern int       MAGIC=1803;
extern bool      CONTINUE=true;
extern bool      MONEY_MANAGEMENT=false;
extern int       RISK_RATIO=2;
extern bool      UseEntryTime=false;
extern int       EntryTime=0;

bool             UseProfitTarget=false;
bool             UsePartialProfitTarget=false;
int              Target_Increment = 50;
int              First_Target = 20;

bool Enter=true;
int nextTP;

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

int deinit()
  {
   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   int ticket, cpt, profit, total=0, BuyGoalProfit, SellGoalProfit, PipsLot;
   double ProfitTarget=INCREMENT*2, BuyGoal=0, SellGoal=0, spread=(Ask-Bid)/Point, InitialPrice=0;

   if(INCREMENT<MarketInfo(Symbol(),MODE_STOPLEVEL)+spread) INCREMENT=1+MarketInfo(Symbol(),MODE_STOPLEVEL)+spread;
   if(MONEY_MANAGEMENT) LOTS=NormalizeDouble(AccountBalance()*AccountLeverage()/1000000*RISK_RATIO,0)*MarketInfo(Symbol(),MODE_MINLOT);
   if(LOTS<MarketInfo(Symbol(),MODE_MINLOT))
   {
      Comment("Not Enough Free Margin to begin");
      return(0);
   }
   for(cpt=1;cpt<LEVELS;cpt++) PipsLot+=cpt*INCREMENT;
   for(cpt=0;cpt<OrdersTotal();cpt++)
   {
      OrderSelect(cpt,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol())
      {
         total++;
         if(!InitialPrice) InitialPrice=StrToDouble(OrderComment());
         if(UsePartialProfitTarget && UseProfitTarget && OrderType()<2)
         {
            double val=getPipValue(OrderOpenPrice(),OrderType());
            takeProfit(val,OrderTicket()); 
         }
      }
   }
   if(total<1 && Enter && (!UseEntryTime || (UseEntryTime && Hour()==EntryTime)))
   {
      if(AccountFreeMargin()<(100*LOTS))
      {
         Print("Not enough free margin to begin");
         return(0);
      }

      InitialPrice=Ask;
      SellGoal=InitialPrice-(LEVELS+1)*INCREMENT*Point;
      BuyGoal=InitialPrice+(LEVELS+1)*INCREMENT*Point;
      for(cpt=1;cpt<=LEVELS;cpt++)
      {
         OrderSend(Symbol(),OP_BUYSTOP,LOTS,InitialPrice+cpt*INCREMENT*Point,2,SellGoal,BuyGoal,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
         OrderSend(Symbol(),OP_SELLSTOP,LOTS,InitialPrice-cpt*INCREMENT*Point,2,BuyGoal+spread*Point,SellGoal+spread*Point,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
      }
    } // initial setup done - all channels are set up
    else // We have open Orders
    {
      BuyGoal=InitialPrice+INCREMENT*(LEVELS+1)*Point;
      SellGoal=InitialPrice-INCREMENT*(LEVELS+1)*Point;
      total=OrdersHistoryTotal();
      for(cpt=0;cpt<total;cpt++)
      {
         OrderSelect(cpt,SELECT_BY_POS,MODE_HISTORY);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC &&  StrToDouble(OrderComment())==InitialPrice){EndSession();return(0);}
      }
      if(UseProfitTarget && CheckProfits(LOTS,OP_SELL,true,InitialPrice)>ProfitTarget) {EndSession();return(0);}
      BuyGoalProfit=CheckProfits(LOTS,OP_BUY,false,InitialPrice);
      SellGoalProfit=CheckProfits(LOTS,OP_SELL,false,InitialPrice);
      if(BuyGoalProfit<ProfitTarget)

      {
         for(cpt=LEVELS;cpt>=1 && BuyGoalProfit<ProfitTarget;cpt--)
         {
            if(Ask<=(InitialPrice+(cpt*INCREMENT-MarketInfo(Symbol(),MODE_STOPLEVEL))*Point))
            {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,cpt*LOTS,InitialPrice+cpt*INCREMENT*Point,2,SellGoal,BuyGoal,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
            }
            if(ticket>0) BuyGoalProfit+=LOTS*(BuyGoal-InitialPrice-cpt*INCREMENT*Point)/Point;
         }
      }
      if(SellGoalProfit<ProfitTarget)

      {
         for(cpt=LEVELS;cpt>=1 && SellGoalProfit<ProfitTarget;cpt--)
         {
            if(Bid>=(InitialPrice-(cpt*INCREMENT-MarketInfo(Symbol(),MODE_STOPLEVEL))*Point))
            {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,cpt*LOTS,InitialPrice-cpt*INCREMENT*Point,2,BuyGoal+spread*Point,SellGoal+spread*Point,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
            }
            if(ticket>0) SellGoalProfit+=LOTS*(InitialPrice-cpt*INCREMENT*Point-SellGoal-spread*Point)/Point;
         }
      }
   }

    Comment("mGRID EXPERT ADVISOR ver 2.0\n",
      

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

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

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

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

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

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

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