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

mGRID Expert Advisor

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

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

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

О программе

mGRID Expert Advisor ver 2.0 — торговый советник для MetaTrader 4, реализующий сеточную стратегию размещения отложенных ордеров. Советник формирует сетку из BUYSTOP и SELLSTOP ордеров на заданном расстоянии друг от друга вокруг начальной цены, используя настраиваемое количество уровней и размер шага.

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

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

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

НастройкаОписание
INCREMENT Шаг сетки — Шаг сетки в пунктах, определяющий расстояние между уровнями отложенных ордеров BUYSTOP и SELLSTOP. При значении меньше стоп-левела корректируется автоматически.
LOTS Размер лота — Начальный размер лота для каждого ордера в сетке. При включённом управлении деньгами рассчитывается автоматически на основе баланса и коэффициента риска.
LEVELS Количество уровней — Количество уровней сетки, задающее число отложенных ордеров с каждой стороны от начальной цены.
MAX_LOTS Максимальный лот — Максимальный допустимый размер лота при поэтапном увеличении позиций в сетке.
MAGIC Магическое число — Магическое число для идентификации ордеров, размещённых данным советником, среди всех ордеров на счёте.
CONTINUE Продолжение работы — Переключатель продолжения работы советника после завершения сессии. При значении true советник продолжает размещение новых сеточных ордеров, при false — работа прекращается.
MONEY_MANAGEMENT Управление деньгами — Переключатель автоматического управления размером лота. При значении true размер лота рассчитывается исходя из баланса счёта, плеча и коэффициента риска.
RISK_RATIO Коэффициент риска — Коэффициент риска, используемый при автоматическом расчёте размера лота в режиме управления деньгами.
UseEntryTime Использовать время входа — Переключатель активации фильтрации входа по времени. При значении true ордера размещаются только в указанный час EntryTime.
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(In

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

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

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

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

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

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

Стоимость полного кода
629,60₽ ≈ $7.69