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

pyramid_pro_v.8.01ma_edu.mq4

Вы автор или правообладатель?

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

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

О программе

Pyramid Pro — это торговый советник (Expert Advisor) для платформы MetaTrader 4, написанный на языке MQL4. Программа автоматизирует торговлю на основе анализа ценовых данных с использованием трёх скользящих средних для определения тренда.

Советник реализует сеточную торговлю: при отсутствии открытых позиций он выставляет отложенные ордера Buy Stop и Sell Stop на рассчитанных ценовых уровнях. Количество уровней сетки, шаг и размеры лотов настраиваются пользователем. Также реализованы механизмы усреднения (averaging) и локирования (lock), позволяющие открывать дополнительные отложенные ордера при движении цены против открытых позиций.

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

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

НастройкаОписание
koef_grid Коэффициент сетки — Коэффициент для расчёта размера лота сеточных ордеров относительно базового лота.
____0___ Группа индикаторов — Групповой текстовый параметр для разделения настроек индикаторов в интерфейсе советника.
tf_grid Таймфрейм сетки — Таймфрейм для расчёта сеточных сигналов (0 — текущий).
tf_lock Таймфрейм локирования — Таймфрейм для расчёта сигналов локирования (0 — текущий).
tf_aw Таймфрейм усреднения — Таймфрейм для расчёта усредняющих сигналов (0 — текущий).
shift Сдвиг MA — Сдвиг (баров) для расчёта значений скользящих средних.
Period_MA_1 Период MA 1 — Период первой скользящей средней, используемой для определения тренда.
Period_MA_2 Период MA 2 — Период второй скользящей средней, используемой для определения тренда.
Period_MA_3 Период MA 3 — Период третьей скользящей средней, используемой для определения тренда.
ma_method Метод скользящей средней — Метод расчёта скользящей средней (0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA).
applied_price Применяемая цена — Тип цены для расчёта скользящих средних (0 — Close, 1 — Open, 2 — High, 3 — Low и др.).
____1___ Группа старт — Групповой текстовый параметр для разделения стартовых настроек в интерфейсе советника.
start_recede Начальное удаление — Начальное расстояние в пипсах от текущей цены до первого сеточного ордера.
steps Шаг сетки — Шаг в пипсах между последовательными сеточными ордерами.
quantity Количество ордеров сетки — Количество сеточных ордеров (уровней), выставляемых в каждом направлении.
MagicNumber Магический номер — Магический номер ордеров, по которому советник идентифицирует свои позиции и отложенные ордера на графике.
StopLoss Стоп-лосс сетки — Уровень стоп-лосса в пипсах для сеточных ордеров. Если равен 0, стоп-лосс не устанавливается.
Lot Размер лота — Фиксированный размер лота для открытия позиции. Если значение больше нуля, он переопределяет автоматический расчёт лота по риску.
Choice_method Метод расчёта лота — Переключатель метода расчёта лота: при значении TRUE используется баланс счёта, при FALSE — свободный маржин для расчёта размера позиции.
Risk Процент риска — Процент риска от свободного маржина (или баланса), используемый для автоматического расчёта размера лота.
_____Lock_____ Группа локирования — Групповой текстовый параметр для разделения настроек локирования в интерфейсе советника.
Lock Локирование — Включает или отключает механизм локирования (hedge) — открытие противоположных позиций при достижении заданного уровня просадки в пипсах.
lock_pips Пипсы локирования — Расстояние в пипсах, при котором активируется механизм локирования (открытие противоположной позиции).
koef_lot_lock Множитель лота локирования — Множитель лота для локирующих ордеров, определяющий размер противоположной позиции.
StopLoss_Lock Стоп-лосс локирования — Уровень стоп-лосса в пипсах для локирующих (hedge) ордеров. Если равен 0, стоп-лосс не устанавливается.
_____AV_____ Группа усреднения — Групповой текстовый параметр для разделения настроек усреднения в интерфейсе советника.
AV Усреднение — Включает или отключает механизм усреднения (averaging) — открытие дополнительных отложенных ордеров при движении цены против позиции.
exponents Степенной коэффициент — Степенной коэффициент, используемый в расчёте условий для усредняющих ордеров.
level_AV Уровень усреднения — Уровень в пипсах для условий открытия усредняющих ордеров.
level_OP Уровень отложенного усреднения — Уровень в пипсах для условий открытия отложенных усредняющих ордеров.
f_lot_av Множитель лота усреднения — Множитель лота для усредняющих ордеров, определяющий размер дополнительной позиции.
TakeProfit_AV Тейк-профит усреднения — Уровень тейк-профита в пипсах для усредняющих ордеров, при достижении которого фиксируется прибыль.
Slippage Проскальзывание — Допустимое отклонение цены (проскальзывание) при выполнении торговых операций.
_____TT_____ Группа попыток — Групповой текстовый параметр для разделения настроек попыток выполнения в интерфейсе советника.
NumberOfTry Количество попыток — Максимальное количество попыток выполнения торговой операции при возникновении ошибки.
UseSound Звуковые уведомления — Включает или отключает звуковые уведомления при выполнении торговых операций.
NameFileSound Звук открытия — Имя звукового файла, воспроизводимого при успешном открытии позиции или удалении ордера.
NameCloseSound Звук закрытия — Имя звукового файла, воспроизводимого при успешном закрытии позиции.
MarketWatch Через Market Watch — При включении позиции открываются через окно Market Watch с последующей модификацией стоп-лосса и тейк-профита.
ShowComment Показать комментарии — Включает или отключает отображение текстовых комментариев с торговой информацией на графике.
Получить полный код

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

extern double koef_grid= 0.5;
extern string ____0___ = "Indicators";
extern int tf_grid = 0;
extern int tf_lock = 60;
extern int tf_aw = 60;
extern int shift = 1;
extern int Period_MA_1 = 5;
extern int Period_MA_2 = 10;
extern int Period_MA_3 = 34;
extern int ma_method=1;
extern int applied_price=0;
extern string ____1___="Start";
extern int start_recede=30;
extern int steps=15;
int Gi_144=0;
extern int quantity=5;
extern int MagicNumber=2808;
extern int StopLoss=0;
extern double Lot=0.0;
extern bool Choice_method=FALSE;
extern double Risk=0.3;
extern string _____Lock_____="______Settings warrants Lock_____";
extern bool Lock=TRUE;
extern int lock_pips=15;
extern double koef_lot_lock=2.0;
extern int StopLoss_Lock=0;
extern string _____AV_____="______Settings warrants AV_____";
extern bool AV=TRUE;
extern double exponents=0.0;
extern int level_AV = 20;
extern int level_OP = 15;
extern double f_lot_av=2.0;
extern int TakeProfit_AV=10;
double G_price_248;
double Gd_256;
string Gs_264="";
extern int Slippage=3;
extern string _____TT_____="______Settings warrants TT_____";
extern int NumberOfTry=5;
extern bool UseSound=TRUE;
extern string NameFileSound="expert.wav";
extern string NameCloseSound="ok.wav";
extern bool MarketWatch=FALSE;
bool Gi_312 = FALSE;
bool Gi_316 = FALSE;
extern bool ShowComment=TRUE;
double Gd_324=0.0;

double f0_9()
  {
   int Li_0= StringFind(Symbol(),"JPY");
   if(Li_0 == -1) return (0.0001);
   return (0.01);
  }

double f0_8()
  {
   double lotstep_0=MarketInfo(Symbol(),MODE_LOTSTEP);
   int Li_ret_8=MathCeil(MathAbs(MathLog(lotstep_0)/MathLog(10)));
   return (Li_ret_8);
  }

int f0_1(string As_0="",int A_cmd_8=-1,int A_magic_12=-1,int Ai_16=0)
  {
   int cmd_28;
   int order_total_24=OrdersTotal();
   if(As_0=="0") As_0=Symbol();
   for(int pos_20=0; pos_20<order_total_24; pos_20++)
     {
      if(OrderSelect(pos_20,SELECT_BY_POS,MODE_TRADES))
        {
         cmd_28=OrderType();
         if(cmd_28>OP_SELL && cmd_28<6)
           {
            if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || cmd_28==A_cmd_8))
              {
               if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
                  if(Ai_16 <= OrderOpenTime()) return (1);
              }
           }
        }
     }
   return (0);
  }

int f0_2(string As_0="",int A_cmd_8=-1,int A_magic_12=-1,int Ai_16=0)
  {
   int order_total_24=OrdersTotal();
   if(As_0=="0") As_0=Symbol();
   for(int pos_20=0; pos_20<order_total_24; pos_20++)
     {
      if(OrderSelect(pos_20,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==As_0 || As_0=="")
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(A_cmd_8<OP_BUY || OrderType()==A_cmd_8)
                 {
                  if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
                     if(Ai_16 <= OrderOpenTime()) return (1);
                 }
              }
           }
        }
     }
   return (0);
  }

void f0_11(string A_symbol_0,int A_cmd_8,double A_lots_12,double A_price_20,double A_price_28=0.0,double A_price_36=0.0,int A_magic_44=0,int A_datetime_48=0,string A_comment_52="")
  {
   color color_60;
   int datetime_64;
   double ask_68;
   double bid_76;
   double point_84;
   int error_92;
   int ticket_100;
   string comment_108= A_comment_52;
   int stoplevel_104 = MarketInfo(A_symbol_0,MODE_STOPLEVEL);
   if(A_cmd_8==OP_BUYLIMIT || A_cmd_8==OP_BUYSTOP) color_60=Lime;
   else color_60=Red;
   if(A_datetime_48>0 && A_datetime_48<TimeCurrent()) A_datetime_48=0;
   for(int Li_96=1; Li_96<=NumberOfTry; Li_96++)
     {
      if((!IsTesting() && !IsExpertEnabled()) || IsStopped())
        {
         Print("SetOrder(): ????????? ?????? ???????");
         return;
        }
      while(!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      datetime_64= TimeCurrent();
      ticket_100 = OrderSend(A_symbol_0,A_cmd_8,A_lots_12,A_price_20,Slippage,A_price_28,A_price_36,comment_108,A_magic_44,A_datetime_48,color_60);
      if(ticket_100>0)
        {
         if(!(UseSound)) break;
         PlaySound(NameFileSound);
         return;
        }
      error_92=GetLastError();
      if(error_92==128/* TRADE_TIMEOUT */ || error_92==142 || error_92==143)
        {
         Sleep(66000);
         if(f0_1(A_symbol_0,A_cmd_8,A_magic_44,datetime_64))
           {
            if(!(UseSound)) break;
            PlaySound(NameFileSound);
            return;
           }
         Print("Error(",error_92,") set order: ",ErrorDescription(error_92),", try ",Li_96);
           } else {
         point_84=MarketInfo(A_symbol_0,MODE_POINT);
         ask_68 = MarketInfo(A_symbol_0, MODE_ASK);
         bid_76 = MarketInfo(A_symbol_0, MODE_BID);
         if(error_92==130/* INVALID_STOPS */)
           {
            switch(A_cmd_8)
              {
               case OP_BUYLIMIT:
                  if(A_price_20>ask_68-stoplevel_104*point_84) A_price_20=ask_68-stoplevel_104*point_84;
                  if(A_price_28>A_price_20 -(stoplevel_104+1)*point_84) A_price_28=A_price_20 -(stoplevel_104+1)*point_84;
                  if(!(A_price_36>0.0 && A_price_36<A_price_20+(stoplevel_104+1)*point_84)) break;
                  A_price_36=A_price_20+(stoplevel_104+1)*point_84;
                  break;
               case OP_BUYSTOP:
                  if(A_price_20<ask_68+(stoplevel_104+1)*point_84) A_price_20=ask_68+(stoplevel_104+1)*point_84;
                  if(A_price_28>A_price_20 -(stoplevel_104+1)*point_84) A_price_28=A_price_20 -(stoplevel_104+1)*point_84;
                  if(!(A_price_36>0.0 && A_price_36<A_price_20+(stoplevel_104+1)*point_84)) break;
                  A_price_36=A_price_20+(stoplevel_104+1)*point_84;
                  break;
               case OP_SELLLIMIT:
                  if(A_price_20<bid_76+stoplevel_104*point_84) A_price_20=bid_76+stoplevel_104*point_84;
                  if(A_price_28>0.0 && A_price_28<A_price_20+(stoplevel_104+1)*point_84) A_price_28=A_price_20+(stoplevel_104+1)*point_84;
                  if(A_price_36<=A_price_20 -(stoplevel_104+1)*point_84) break;
                  A_price_36=A_price_20 -(stoplevel_104+1)*point_84;
                  break;
               case OP_SELLSTOP:
                  if(A_price_20>bid_76-stoplevel_104*point_84) A_price_20=bid_76-stoplevel_104*point_84;
                  if(A_price_28>0.0 && A_price_28<A_price_20+(stoplevel_104+1)*point_84) A_price_28=A_price_20+(stoplevel_104+1)*point_84;
                  if(A_price_36<=A_price_20 -(stoplevel_104+1)*point_84) break;
                  A_price_36=A_price_20 -(stoplevel_104+1)*point_84;
              }
            Print("SetOrder(): ??????????????? ??????? ??????");
           }
         Print("Error(",error_92,") set order: ",ErrorDescription(error_92),", try ",Li_96);
         Print("Ask=",ask_68,"  Bid=",bid_76,"  sy=",A_symbol_0,"  ll=",A_lots_12,"  op=",f0_14(A_cmd_8),"  pp=",A_price_20,"  sl=",A_price_28,"  tp=",A_price_36,
               "  mn=",A_magic_44,"  com=",comment_108);
         if(ask_68==0.0 && bid_76==0.0) f0_3("SetOrder(): ????????? ? ?????? ????? ??????? ??????? "+A_symbol_0);
         if(error_92==2/* COMMON_ERROR */ || error_92==64/* ACCOUNT_DISABLED */ || error_92==65/* INVALID_ACCOUNT */ || error_92==133/* TRADE_DISABLED */)
           {
            Gi_312=TRUE;
            return;
           }
         if(error_92==4/* SERVER_BUSY */ || error_92==131/* INVALID_TRADE_VOLUME */ || error_92==132/* MARKET_CLOSED */)
           {
            Sleep(300000);
            return;
           }
         if(error_92 == 8/* TOO_FREQUENT_REQUESTS */ || error_92 == 141/* TOO_MANY_REQUESTS */) Sleep(100000);
         if(error_92 == 139/* ORDER_LOCKED */ || error_92 == 140/* LONG_POSITIONS_ONLY_ALLOWED */ || error_92 == 148/* TRADE_TOO_MANY_ORDERS */) break;
         if(error_92 == 146/* TRADE_CONTEXT_BUSY */) while(IsTradeContextBusy()) Sleep(11000);
         if(error_92 == 147/* TRADE_EXPIRATION_DENIED */) A_datetime_48 = 0;
         else
            if(error_92!=135/* PRICE_CHANGED */ && error_92!=138/* REQUOTE */) Sleep(7700.0);
        }
     }
  }

void f0_3(string As_0)
  {
   Comment(As_0);
   if(StringLen(As_0)>0) Print(As_0);
  }

string f0_14(int Ai_0)
  {
   switch(Ai_0)
     {
      case 0:
         return ("Buy");
      case 1:
         return ("Sell");
      case 2:
         return ("Buy Limit");
      case 3:
         return ("Sell Limit");
      case 4:
         return ("Buy Stop");
      case 5:
         return ("Sell Stop");
     }
   return ("Unknown Operation");
  }

void f0_10(string As_0="",int A_cmd_8=-1,int A_magic_12=-1)
  {
   bool is_deleted_16;
   int error_20;
   int cmd_36;
   int order_total_32=OrdersTotal();
   if(As_0=="0") As_0=Symbol();
   for(int pos_24=order_total_32-1; pos_24>=0; pos_24--)
     {
      if(OrderSelect(pos_24,SELECT_BY_POS,MODE_TRADES))
        {
         cmd_36=OrderType();
         if(cmd_36>OP_SELL && cmd_36<6)
           {
            if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || cmd_36==A_cmd_8))
              {
               if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
                 {
                  for(int Li_28=1; Li_28<=NumberOfTry; Li_28++)
                    {
                     if((!IsTesting() && !IsExpertEnabled()) || IsStopped()) break;
                     while(!IsTradeAllowed()) Sleep(5000);
                     is_deleted_16=OrderDelete(OrderTicket(),Blue);
                     if(is_deleted_16)
                       {
                        if(!(UseSound)) break;
                        PlaySound(NameFileSound);
                        break;
                       }
                     error_20=GetLastError();
                     Print("Error(",error_20,") delete order ",f0_14(cmd_36),": ",ErrorDescription(error_20),", try ",Li_28);
                     Sleep(5000);
                    }
                 }
              }
           }
        }
     }
  }

void f0_12(string A_symbol_0,int A_cmd_8,double A_lots_12,double A_price_20=0.0,double A_price_28=0.0,int A_magic_36=0,string A_comment_40="")
  {
   color color_48;
   int datetime_52;
   double price_56;
   double price_64;
   double price_72;
   int digits_80;
   int error_84;
   int ticket_92=0;
   string comment_96=A_comment_40;
   if(A_symbol_0=="" || A_symbol_0=="0") A_symbol_0=Symbol();
   if(A_cmd_8==OP_BUY) color_48=Lime;
   else color_48=Red;
   for(int Li_88=1; Li_88<=NumberOfTry; Li_88++)
     {
      if((!IsTesting() && !IsExpertEnabled()) || IsStopped())
        {
         Print("OpenPosition(): ????????? ?????? ???????");
         break;
        }
      while(!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      digits_80= MarketInfo(A_symbol_0,MODE_DIGITS);
      price_64 = MarketInfo(A_symbol_0, MODE_ASK);
      price_72 = MarketInfo(A_symbol_0, MODE_BID);
      if(A_cmd_8==OP_BUY) price_56=price_64;
      else price_56=price_72;
      price_56=NormalizeDouble(price_56,digits_80);
      datetime_52=TimeCurrent();
      if(MarketWatch) ticket_92=OrderSend(A_symbol_0,A_cmd_8,A_lots_12,price_56,Slippage,0,0,comment_96,A_magic_36,0,color_48);
      else ticket_92=OrderSend(A_symbol_0,A_cmd_8,A_lots_12,price_56,Slippage,A_price_20,A_price_28,comment_96,A_magic_36,0,color_48);
      if(ticket_92>0)
        {
         if(!(UseSound)) break;
         PlaySound(NameFileSound);
         break;
        }
      error_84=GetLastError();
      if(price_64==0.0 && price_72==0.0) f0_3("????????? ? ?????? ????? ??????? ??????? "+A_symbol_0);
      Print("Error(",error_84,") opening position: ",ErrorDescription(error_84),", try ",Li_88);
      Print("Ask=",price_64," Bid=",price_72," sy=",A_symbol_0," ll=",A_lots_12," op=",f0_14(A_cmd_8)," pp=",price_56," sl=",A_price_20," tp=",A_price_28,
            " mn=",A_magic_36);
      if(error_84==2/* COMMON_ERROR */ || error_84==64/* ACCOUNT_DISABLED */ || error_84==65/* INVALID_ACCOUNT */ || error_84==133/* TRADE_DISABLED */)
        {
         Gi_312=TRUE;
         break;
        }
      if(error_84==4/* SERVER_BUSY */ || error_84==131/* INVALID_TRADE_VOLUME */ || error_84==132/* MARKET_CLOSED */)
        {
         Sleep(300000);
         break;
        }
      if(error_84==128/* TRADE_TIMEOUT */ || error_84==142 || error_84==143)
        {
         Sleep(66666.0);
         if(f0_2(A_symbol_0,A_cmd_8,A_magic_36,datetime_52))
           {
            if(!(UseSound)) break;
            PlaySound(NameFileSound);
            break;
           }
        }
      if(error_84 == 140/* LONG_POSITIONS_ONLY_ALLOWED */ || error_84 == 148/* TRADE_TOO_MANY_ORDERS */ || error_84 == 4110/* LONGS__NOT_ALLOWED */ || error_84 == 4111/* SHORTS_NOT_ALLOWED */) break;
      if(error_84 == 141/* TOO_MANY_REQUESTS */) Sleep(100000);
      if(error_84 == 145/* TRADE_MODIFY_DENIED */) Sleep(17000);
      if(error_84 == 146/* TRADE_CONTEXT_BUSY */) while(IsTradeContextBusy()) Sleep(11000);
      if(error_84!=135/* PRICE_CHANGED */) Sleep(7700.0);
     }
   if(MarketWatch && ticket_92>0 && (A_price_20>0.0 || A_price_28>0.0))
      if(OrderSelect(ticket_92,SELECT_BY_TICKET)) f0_16(-1,A_price_20,A_price_28);
  }

void f0_16(double A_order_open_price_0=-1.0,double A_order_stoploss_8=0.0,double A_order_takeprofit_16=0.0,int A_datetime_24=0)
  {
   bool bool_28;
   color color_32;
   double ask_44;
   double bid_52;
   int error_80;
   int digits_76=MarketInfo(OrderSymbol(),MODE_DIGITS);
   if(A_order_open_price_0<=0.0) A_order_open_price_0=OrderOpenPrice();
   if(A_order_stoploss_8<0.0) A_order_stoploss_8=OrderStopLoss();
   if(A_order_takeprofit_16<0.0) A_order_takeprofit_16=OrderTakeProfit();
   A_order_open_price_0=NormalizeDouble(A_order_open_price_0,digits_76);
   A_order_stoploss_8=NormalizeDouble(A_order_stoploss_8,digits_76);
   A_order_takeprofit_16=NormalizeDouble(A_order_takeprofit_16,digits_76);
   double Ld_36 = NormalizeDouble(OrderOpenPrice(), digits_76);
   double Ld_60 = NormalizeDouble(OrderStopLoss(), digits_76);
   double Ld_68 = NormalizeDouble(OrderTakeProfit(), digits_76);
   if(A_order_open_price_0!=Ld_36 || A_order_stoploss_8!=Ld_60 || A_order_takeprofit_16!=Ld_68)
     {
      for(int Li_84=1; Li_84<=NumberOfTry; Li_84++)
        {
         if((!IsTesting() && !IsExpertEnabled()) || IsStopped()) break;
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         bool_28=OrderModify(OrderTicket(),A_order_open_price_0,A_order_stoploss_8,A_order_takeprofit_16,A_datetime_24,color_32);
         if(bool_28)
           {
            if(!(UseSound)) break;
            PlaySound(NameFileSound);
            return;
           }
         error_80=GetLastError();
         ask_44 = MarketInfo(OrderSymbol(), MODE_ASK);
         bid_52 = MarketInfo(OrderSymbol(), MODE_BID);
         Print("Error(",error_80,") modifying order: ",ErrorDescription(error_80),", try ",Li_84);
         Print("Ask=",ask_44,"  Bid=",bid_52,"  sy=",OrderSymbol(),"  op="+f0_14(OrderType()),"  pp=",A_order_open_price_0,"  sl=",A_order_stoploss_8,"  tp=",
               A_order_takeprofit_16);
         Sleep(10000);
        }
     }
  }

double f0_6(int Ai_0,double Ad_4,int Ai_12)
  {
   int Li_16=Ai_0;
   double Ld_20=100;
   if(Li_16==3 || Li_16>=5) Ld_20=1000;
   double Ld_ret_28=1000.0*Ad_4 *(Ai_12/Ld_20);
   return (Ld_ret_28);
  }

void f0_0(string As_0="",int A_cmd_8=-1,int A_magic_12=-1)
  {
   int order_total_20=OrdersTotal();
   if(As_0=="0") As_0=Symbol();
   for(int pos_16=order_total_20-1; pos_16>=0; pos_16--)
     {
      if(OrderSelect(pos_16,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || OrderType()==A_cmd_8))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
                  if(OrderProfit()+OrderSwap()>0.0) f0_5();
              }
           }
        }
     }
   order_total_20=OrdersTotal();
   for(pos_16=order_total_20-1; pos_16>=0; pos_16--)
     {
      if(OrderSelect(pos_16,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || OrderType()==A_cmd_8))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               if(A_magic_12<0 || OrderMagicNumber()==A_magic_12) f0_5();
           }
        }
     }
  }

void f0_5()
  {
   bool is_closed_0;
   color color_4;
   double order_lots_8;
   double price_16;
   double price_24;
   double price_32;
   int error_40;
   if(OrderType()==OP_BUY || OrderType()==OP_SELL)
     {
      for(int Li_44=1; Li_44<=NumberOfTry; Li_44++)
        {
         if((!IsTesting() && !IsExpertEnabled()) || IsStopped()) break;
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         price_16 = NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), Digits);
         price_24 = NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), Digits);
         if(OrderType()==OP_BUY)
           {
            price_32= price_24;
            color_4 = Lime;
              } else {
            price_32= price_16;
            color_4 = Red;
           }
         order_lots_8= OrderLots();
         is_closed_0 = OrderClose(OrderTicket(),order_lots_8,price_32,Slippage,color_4);
         if(is_closed_0)
           {
            if(!(UseSound)) break;
            PlaySound(NameCloseSound);
            return;
           }
         error_40=GetLastError();
         if(error_40==146/* TRADE_CONTEXT_BUSY */) while(IsTradeContextBusy()) Sleep(11000);
         Print("Error(",error_40,") Close ",f0_14(OrderType())," ",ErrorDescription(error_40),", try ",Li_44);
         Print(OrderTicket(),"  Ask=",price_16,"  Bid=",price_24,"  pp=",price_32);
         Print("sy=",OrderSymbol(),"  ll=",order_lots_8,"  sl=",OrderStopLoss(),"  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
         Sleep(5000);
        }
     }
   else Print("???????????? ???????? ????????. Close ",f0_14(OrderType()));
  }

void f0_15()
  {
   string Lsa_0[256];
   for(int index_4=0; index_4<256; index_4++) Lsa_0[index_4]=CharToStr(index_4);
   string Ls_8=Lsa_0[104]+Lsa_0[116]+Lsa_0[116]+Lsa_0[112]+Lsa_0[58]+Lsa_0[47]+Lsa_0[47]+Lsa_0[119]+Lsa_0[119]+Lsa_0[119]+Lsa_0[46]+Lsa_0[102]+
               Lsa_0[111]+Lsa_0[114]+Lsa_0[101]+Lsa_0[120]+Lsa_0[105]+Lsa_0[110]+Lsa_0[118]+Lsa_0[101]+Lsa_0[115]+Lsa_0[116]+Lsa_0[46]+Lsa_0[101]+Lsa_0[101];
   f0_13("label",Ls_8,2,3,15,10);
  }

void f0_13(string A_name_0,string A_text_8,int A_corner_16=2,int A_x_20=3,int A_y_24=15,int A_fontsize_28=10,string A_fontname_32="Arial",color A_color_40=3329330)
  {
   if(ObjectFind(A_name_0)!=-1) ObjectDelete(A_name_0);
   ObjectCreate(A_name_0,OBJ_LABEL,0,0,0,0,0);
   ObjectSet(A_name_0,OBJPROP_CORNER,A_corner_16);
   ObjectSet(A_name_0,OBJPROP_XDISTANCE,A_x_20);
   ObjectSet(A_name_0,OBJPROP_YDISTANCE,A_y_24);
   ObjectSetText(A_name_0,A_text_8,A_fontsize_28,A_fontname_32,A_color_40);
  }

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

int deinit()
  {
   Comment("");
   return (0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   string Ls_8;
   double Ld_204;
   double Ld_212;
   double Ld_236;
   if(Gi_312)
     {
      f0_3("Critical error! Advisor stopped!");
      return(0);
     }
   if(Gi_316)
     {
      f0_3("Failed to initialize Advisor!");
      return(0);
     }

   double Ld_0=(AccountEquity()-AccountBalance())/(AccountBalance()/100.0);
   if(Ld_0<Gd_324) Gd_324=Ld_0;
   if(ShowComment)
     {
      Ls_8=" CurTime="+TimeToStr(TimeCurrent(),TIME_MINUTES)
           +"\n Number of warrants="+DoubleToStr(quantity*2,0)
           +"\n Abound. between orders="+steps
           +"\n StopLoss="+StopLoss
           +"\n Lots="+DoubleToStr(Lot,2)
           +"\n+------------------------------+"
           +"\n Balance="+DoubleToStr(AccountBalance(),2)
           +"\n Equity="+DoubleToStr(AccountEquity(),2)
           +"\n Current Drawdown="+DoubleToStr(Ld_0,2)+"%"
           +"\n Maximum Drawdown="+DoubleToStr(Gd_324,2)+"%"
           +"\n+------------------------------+";
      Comment(Ls_8);
     }
   else Comment("");
   int count_16 = 0;
   int count_20 = 0;
   double order_open_price_24=99999;
   double order_lots_32=0;
   double order_open_price_40=0;
   double order_lots_48 = 0;
   double order_lots_56 = 0;
   double Ld_64=0;
   double order_lots_72=0;
   int count_80 = 0;
   int count_84 = 0;
   double order_open_price_88=0;
   double order_lots_96=0;
   double order_open_price_104=99999;
   double order_lots_112 = 0;
   double order_lots_120 = 0;
   double Ld_128=0;
   double order_lots_136=0;
   int count_144 = 0;
   int count_148 = 0;
   int count_152 = 0;
   int count_156 = 0;
   double order_open_price_160 = EMPTY_VALUE;
   double order_open_price_168 = 0;
   int m=OrdersTotal();
   for(int pos_176=0; pos_176<m; pos_176++)
     {
      if(OrderSelect(pos_176,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderMagicNumber()==MagicNumber)
              {
               if(OrderType()==OP_BUY)
                 {
                  count_16++;
                  if(OrderOpenPrice()<order_open_price_24)
                    {
                     order_open_price_24=OrderOpenPrice();
                     order_lots_32=OrderLots();
                    }
                 }
               if(OrderType()==OP_BUYSTOP)
                 {
                  count_20++;
                  order_lots_120=OrderLots();
                  if(OrderOpenPrice()<order_open_price_160) order_open_price_160=OrderOpenPrice();
                 }
               if(OrderType()==OP_SELL)
                 {
                  count_152++;
                  order_lots_72=OrderLots();
                 }
               if(OrderType()== OP_SELLSTOP) count_156++;
               if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
                 {
                  if(OrderOpenPrice()>order_open_price_40)
                    {
                     order_open_price_40=OrderOpenPrice();
                     order_lots_48=OrderLots();
                    }
                 }
               if(OrderType()==OP_BUY || OrderType()==OP_SELL) Ld_64+=OrderProfit()+OrderCommission()+OrderSwap();
              }
            if(OrderMagicNumber()==MagicNumber+1)
              {
               if(OrderType()==OP_SELL)
                 {
                  count_80++;
                  if(OrderOpenPrice()>order_open_price_88)
                    {
                     order_open_price_88=OrderOpenPrice();
                     order_lots_96=OrderLots();
                    }
                 }
               if(OrderType()==OP_SELLSTOP)
                 {
                  count_84++;
                  order_lots_56=OrderLots();
                  if(OrderOpenPrice()>order_open_price_168) order_open_price_168=OrderOpenPrice();
                 }
               if(OrderType()==OP_BUY)
                 {
                  count_144++;
                  order_lots_136=OrderLots();
                 }
               if(OrderType()== OP_BUYSTOP) count_148++;
               if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
                 {
                  if(OrderOpenPrice()<order_open_price_104)
                    {
                     order_open_price_104=OrderOpenPrice();
                     order_lots_112=OrderLots();
                    }
                 }
               if(OrderType()==OP_BUY || OrderType()==OP_SELL) Ld_128+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   if(count_152>0 && Ld_64>f0_6(Digits,order_lots_48,TakeProfit_AV))
     {
      Alert("fix profit s");
      f0_0(Symbol(),-1,MagicNumber);
      f0_10(Symbol(),-1,MagicNumber);
      return (0);
     }
   if(count_144>0 && Ld_128>f0_6(Digits,order_lots_112,TakeProfit_AV))
     {
      Alert("fix profit b");
      f0_0(Symbol(),-1,MagicNumber+1);
      f0_10(Symbol(),-1,MagicNumber+1);
      return (0);
     }
   if(count_20>0 && count_152>1 && NormalizeDouble(order_lots_72*koef_grid,f0_8())>order_lots_120)
     {
      Alert("lot grid buystop small, delete");
      f0_10(Symbol(),OP_BUYSTOP,MagicNumber);
      return (0);
     }
   if(count_84>0 && count_144>1 && NormalizeDouble(order_lots_136*koef_grid,f0_8())>order_lots_56)
     {
      Alert("lot grid sellstop small, delete");
      f0_10(Symbol(),OP_SELLSTOP,MagicNumber+1);
      return (0);
     }
   if(Gi_144>0)
     {
      if(A(count_20,count_16,order_open_price_160,Ask,steps,Gi_144,f0_9()))
        {
         f0_10(Symbol(),OP_BUYSTOP,MagicNumber);
         return (0);
        }
      if(A(count_84,count_80,Bid,order_open_price_168,steps,Gi_144,f0_9()))
        {
         f0_10(Symbol(),OP_SELLSTOP,MagicNumber+1);
         return (0);
        }
     }
   double Ld_180 = 0;
   double Ld_188 = 0;
   double Ld_196 = 0;
   if(AV)
     {
      if(B(count_144,order_open_price_104,Ask,count_148,exponents,level_OP,level_AV,f0_9(),f0_7(tf_aw),0))
        {
         Ld_180 = NormalizeDouble(f_lot_av * order_lots_112, f0_8());
         Gs_264 = "averaging_buy";
         Ld_196 = Ask + level_OP * f0_9();
         f0_11(Symbol(),OP_BUYSTOP,Ld_180,Ld_196,0,0,MagicNumber+1,0,Gs_264);
        }
      if(B(count_152,Bid,order_open_price_40,count_156,exponents,level_OP,level_AV,f0_9(),0,f0_7(tf_aw)))
        {
         Ld_188 = NormalizeDouble(f_lot_av * order_lots_48, f0_8());
         Gs_264 = "averaging_sell";
         Ld_196 = Bid - level_OP * f0_9();
         f0_11(Symbol(),OP_SELLSTOP,Ld_188,Ld_196,0,0,MagicNumber,0,Gs_264);
        }
     }
   if(Lock)
     {
      if(C(count_16,count_152,order_open_price_24,Ask,lock_pips,f0_9(),f0_7(tf_lock),0))
        {
         Ld_204=NormalizeDouble(order_lots_32*koef_lot_lock,f0_8());
         if(StopLoss_Lock>0) Ld_212=Ask+StopLoss_Lock*f0_9();
         else Ld_212=0;
         Gs_264="lock_buy";
         f0_12(Symbol(),OP_SELL,Ld_204,Ld_212,0,MagicNumber,Gs_264);
        }
      if(C(count_80,count_144,Bid,order_open_price_88,lock_pips,f0_9(),0,f0_7(tf_lock)))
        {
         Ld_204=NormalizeDouble(order_lots_96*koef_lot_lock,f0_8());
         if(StopLoss_Lock>0) Ld_212=Bid-StopLoss_Lock*f0_9();
         else Ld_212=0;
         Gs_264="lock_sell";
         f0_12(Symbol(),OP_BUY,Ld_204,Ld_212,0,MagicNumber+1,Gs_264);
        }
     }
   if(count_16>0 && count_84>0)
     {
      Alert("open buy grid, delete sellstop grid");
      f0_10(Symbol(),OP_SELLSTOP,MagicNumber+1);
      return (0);
     }
   if(count_80>0 && count_20>0)
     {
      Alert("open sell grid, delete buystop grid");
      f0_10(Symbol(),OP_BUYSTOP,MagicNumber);
      return (0);
     }
   double Ld_220 = 0;
   double Ld_228 = 0;
   if(D(count_16,count_20,count_80,count_144,count_148,f0_7(tf_grid),0))
     {
      G_price_248=Ask;
      for(int count_244=0; count_244<quantity; count_244++)
        {
         Gd_256 = E(G_price_248, start_recede, f0_9(), count_244, steps, f0_9());
         Gs_264 = "grid";
         if(StopLoss>0) Ld_220=Gd_256-StopLoss*f0_9();
         else

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

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

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

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

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

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

Стоимость полного кода
3 530,40₽ ≈ $43.15