Группа "Стол заказов MQL"

Рейтинг 2153



РЕКОМЕНДУЮ



Доработка советника Советник Magic_Hedge v.0.1

советник разрабатывался в ветке ruforum.mt5.com/threads/22217-idealnaya-sistema-parnogo-treydinga.-chast-1

цель задания добавить третью пару с целью уменьшения спреда (при работе по парам GBPUSD/EURGBP на реверсе открывать внесенную в параметры сова третью пару EURUSD) направление для EURUSD — SELL если GBPUSD верху, а EURGBP внизу и BUY наоборот)


#property copyright "Copyright © 2013, Хлыстов В.Ю."
#property link      "h.maiden@mail.ru"


//+------------------------------------------------------------------+

extern bool   Start       = true;// вкл. или выкл. старта советника        
extern bool   Close_All   = false;// вкл. или выкл. функции, закрытия всех позиций советника          
//+------------------------------------------------------------------+
extern int    Magic       = 1;    // магический номер советника
extern double Lots        = 0.1;  // размер лота одной позиции
extern int    Delta_Open  = 5;    // размер дельты, приемлимый для открытия 2-х хедж ордеров, если 0, то не учитывается
extern int    Delta_Close = -10;    // размер дельты,  для закрытия 2-х хедж ордеров
extern double Summ_TP     = 0;    // закрытие 2-х хедж ордеров, по суммарному ТП (если > 0)
extern int    Time_Frame  = 15;   // Таймфрейм, если 0, то текущий, если нет, то фиксированный
//+------------------------------------------------------------------+
extern int ControlBars    = 5;   // колличество контроллируемых свечей, в анализе индикатора
extern int    Ind_Shift   = 0;    // смещение в барах, для параметров индикатора
//+------------------------------------------------------------------+
extern string      l_1 = "1) ------------------------------------------------------------"; 
extern string simbol_1 = "GBPUSD"; 
extern bool      rev_1 = false;        
extern string simbol_2 = "EURGBP"; 
extern bool      rev_2 = true;        
extern int    Level_12 = 0;     // уровень для открытия 2-х хедж ордеров, в обратном направлении
extern string      l_2 = "2) ------------------------------------------------------------"; 
extern string simbol_3 = "EURUSD"; 
extern bool      rev_3 = false;        
extern string simbol_4 = "EURUSD"; 
extern bool      rev_4 = false;        
extern int    Level_34 = 0;     // уровень для открытия 2-х хедж ордеров, в обратном направлении
extern string      l_3 = "3) ------------------------------------------------------------"; 
extern string simbol_5 = ""; 
extern bool      rev_5 = false;        
extern string simbol_6 = ""; 
extern bool      rev_6 = false;        
extern int    Level_56 = 0;     // уровень для открытия 2-х хедж ордеров, в обратном направлении
extern string      l_4 = "4) ------------------------------------------------------------"; 
extern string simbol_7 = ""; 
extern bool      rev_7 = true;        
extern string simbol_8 = ""; 
extern bool      rev_8 = false;        
extern int    Level_78 = 0;     // уровень для открытия 2-х хедж ордеров, в обратном направлении
extern string      l_5 = "5) ------------------------------------------------------------"; 
extern string simbol_9 = ""; 
extern bool      rev_9 = false;        
extern string simbol_10 = ""; 
extern bool      rev_10 = false;        
extern int    Level_910 = 0;    // уровень для открытия 2-х хедж ордеров, в обратном направлении
extern string      l_6 = "6) ------------------------------------------------------------"; 
extern string simbol_11 = ""; 
extern bool      rev_11 = false;        
extern string simbol_12 = ""; 
extern bool      rev_12 = false;        
extern int    Level_1112 = 0;   // уровень для открытия 2-х хедж ордеров, в обратном направлении
extern string      l_7 = "---------------------------------------------------------------------"; 
//+------------------------------------------------------------------+
string     Info[100];       //информационный массив
string    Symbols[13];      //все пары валют
bool          rev[13];      //все реверсы
bool     Signal[13,13];     //все сигналы
double        Ind[13];      //все значения индикатора
color   Color_sim[8];       //цвета
int         Level[13];      //уровни
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//-------------------------------------------------------------------+
   color Color = Yellow;
   string Text = StringConcatenate(" Магик = ",DoubleToStr(Magic,0),"    ТФ = ",DoubleToStr(Time_Frame, 0),"    Лот = ",DoubleToStr(Lots, 2),"    Кол. баров = ",DoubleToStr(ControlBars, 0));//
   string Text_1 =StringConcatenate(" Magic_Hedge ","v.0"  );//
   ObjectCreate("Info", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Info", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Info", OBJPROP_XDISTANCE, 10);// Координата Х
   ObjectSet("Info", OBJPROP_YDISTANCE, 35);// Координата Y
   ObjectSetText("Info",Text,12,"Arial",Color);// Изменение свойств объекта
   Color = Magenta;
   ObjectCreate("Info_1", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Info_1", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Info_1", OBJPROP_XDISTANCE, 10);// Координата Х
   ObjectSet("Info_1", OBJPROP_YDISTANCE, 10);// Координата Y
   ObjectSetText("Info_1",Text_1,14,"Arial",Color);// Изменение свойств объекта
//-------------------------------------------------------------------+
   Color = Red;
   Text = StringConcatenate(" Дельта откр. = ",DoubleToStr(Delta_Open,0),"      Дельта закр. = ",DoubleToStr(Delta_Close, 0));//
   Text_1 = StringConcatenate("Смещение = ",DoubleToStr(Ind_Shift, 0));//
   ObjectCreate("Info_2", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Info_2", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Info_2", OBJPROP_XDISTANCE, 10);// Координата Х
   ObjectSet("Info_2", OBJPROP_YDISTANCE, 55);// Координата Y
   ObjectSetText("Info_2",Text,12,"Arial",Color);// Изменение свойств объекта
   ObjectCreate("Info_3", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Info_3", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Info_3", OBJPROP_XDISTANCE, 300);// Координата Х
   ObjectSet("Info_3", OBJPROP_YDISTANCE, 55);// Координата Y
   ObjectSetText("Info_3",Text_1,12,"Arial",Color);// Изменение свойств объекта
//-------------------------------------------------------------------+
   Color = Gray;
   Text = "-спред-----сверху-///-снизу-----профит-----дельта-";
   ObjectCreate("Info_5", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Info_5", OBJPROP_CORNER, 1);    // Привязка угол
   ObjectSet("Info_5", OBJPROP_XDISTANCE, 10);// Координата Х
   ObjectSet("Info_5", OBJPROP_YDISTANCE, 100-15);// Координата Y
   ObjectSetText("Info_5",Text,12,"Arial",Color);// Изменение свойств объекта
//-------------------------------------------------------------------+
   Symbols[1]=simbol_1;   rev[1]=rev_1;  Level[1]=Level_12;
   Symbols[2]=simbol_2;   rev[2]=rev_2;  Level[2]=Level_12;
   Symbols[3]=simbol_3;   rev[3]=rev_3;  Level[3]=Level_34;
   Symbols[4]=simbol_4;   rev[4]=rev_4;  Level[4]=Level_34;
   Symbols[5]=simbol_5;   rev[5]=rev_5;  Level[5]=Level_56;
   Symbols[6]=simbol_6;   rev[6]=rev_6;  Level[6]=Level_56;
   Symbols[7]=simbol_7;   rev[7]=rev_7;  Level[7]=Level_78;
   Symbols[8]=simbol_8;   rev[8]=rev_8;  Level[8]=Level_78;
   Symbols[9]=simbol_9;   rev[9]=rev_9;  Level[9]=Level_910;
   Symbols[10]=simbol_10; rev[10]=rev_10;Level[10]=Level_910;
   Symbols[11]=simbol_11; rev[11]=rev_11;Level[11]=Level_1112;
   Symbols[12]=simbol_12; rev[12]=rev_12;Level[12]=Level_1112;
   
      for(int i=1;i<14;i++)
       {
        Ind[i]=0;
       }
//+------------------------------------------------------------------+
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(IsTradeAllowed()==false || Start==false) return;              // если поток занят или Start отключен, советник не торгует
   if(Close_All){Close_All_Order();return;}                         // если Close_All включен, закрываем все ордера советника
//----Нахождение всех значений индикатора
//+------------------------------------------------------------------+
   if(Symbols[1]!="")
   Ind[1]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[3],rev[3],Symbols[4],rev[4],ControlBars,"",0,Ind_Shift);  
   if(Symbols[2]!="")
   Ind[2]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[3],rev[3],Symbols[4],rev[4],ControlBars,"",1,Ind_Shift);  
   if(Symbols[3]!="")
   Ind[3]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[3],rev[3],Symbols[4],rev[4],ControlBars,"",0,Ind_Shift);  
   if(Symbols[4]!="")
   Ind[4]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[3],rev[3],Symbols[4],rev[4],ControlBars,"",1,Ind_Shift);  
   if(Symbols[5]!="")
   Ind[5]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[5],rev[5],Symbols[6],rev[6],ControlBars,"",0,Ind_Shift);  
   if(Symbols[6]!="")
   Ind[6]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[5],rev[5],Symbols[6],rev[6],ControlBars,"",1,Ind_Shift);  
   if(Symbols[7]!="")
   Ind[7]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[7],rev[7],Symbols[8],rev[8],ControlBars,"",0,Ind_Shift);  
   if(Symbols[8]!="")
   Ind[8]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[7],rev[7],Symbols[8],rev[8],ControlBars,"",1,Ind_Shift);  
   if(Symbols[9]!="")
   Ind[9]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[9],rev[9],Symbols[10],rev[10],ControlBars,"",0,Ind_Shift);  
   if(Symbols[10]!="")
   Ind[10]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[9],rev[9],Symbols[10],rev[10],ControlBars,"",1,Ind_Shift);  
   if(Symbols[11]!="")
   Ind[11]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[11],rev[11],Symbols[12],rev[12],ControlBars,"",0,Ind_Shift);  
   if(Symbols[12]!="")
   Ind[12]=iCustom(NULL,Time_Frame,"Delta_excluzive_2",Symbols[11],rev[11],Symbols[12],rev[12],ControlBars,"",1,Ind_Shift);  
//+------------------------------------------------------------------+

//----Обнуление массива сигналов
//+------------------------------------------------------------------+
   for(int i=1;i<13;i++)
     {
      for(int j=1;j<13;j++)
       {
        Signal[i,j]=false;
       }
     }   
//+------------------------------------------------------------------+

//----Определение текущих сигналов
//+------------------------------------------------------------------+
 for(int m=0;m<6;m++)
  {
   int a=m*2+1;int b=a+1;
  if(Symbols[a]!="" || Symbols[b]!="")
     {
      if(Ind[a]>Level[a] && Ind[b]<-Level[b])                     // если 1-ое знач. индикатора больше уровня, а 2-ое меньше
       {
         Signal[a,b]=true;                                        // то сигнал двух пар есть
         if(Open_true(a,b)==false && (Ind[a]-Ind[b])>Delta_Open && OrdersTotal()<98)// проверяем, есть ли открытые позиции, по этому сигналу
         {
          Open_Orders(a,b);                                       // открываем 2 хедж ордера, с заданным Коментарием
         } 
       }               
      if(Ind[b]>Level[b] && Ind[a]<-Level[a])                     // если 1-ое знач. индикатора больше уровня, а 2-ое меньше
       {
         Signal[b,a]=true;                                        // то сигнал двух пар есть
         if(Open_true(b,a)==false && (Ind[b]-Ind[a])>Delta_Open && OrdersTotal()<98)// проверяем, есть ли открытые позиции, по этому сигналу
         {
          Open_Orders(b,a);                                       // открываем 2 хедж ордера, с заданным Коментарием
         } 
       }               
     }
   }  
//+------------------------------------------------------------------+

//----Определение текущих открытых ордеров
//+------------------------------------------------------------------+
   Object_Open_Delete();                   // вызов функции, удаления данных таблици
   int inf = 0;
   for(int c=1;c<13;c++)
     {
      for(int d=1;d<13;d++)                 // то находим 2-ое знач. индикатора меньше (-)уровня
       {
        if(c!=d)                           // если 1-ое знач. неравно 2-му
        {
         if(Open_true(c,d)==true)          // если открыты 2-х хедж ордера, с общим Комментарием
         {
          inf = inf+1;
          string Spread_Ord = StringConcatenate((MarketInfo(Symbols[c],MODE_SPREAD)+MarketInfo(Symbols[d],MODE_SPREAD)),"         ");
          string Profit_Ord = StringConcatenate(Symbols[c],"_",Symbols[d],"       ",Profit_Orders(c,d)," $   ");
          Info[inf]=StringConcatenate(Spread_Ord,Profit_Ord,"       ",DoubleToStr(Ind[c]-Ind[d],0),"    ");
          if(Summ_TP>0)                    // если суммарный ТП больше 0
           {
            if(Profit_Orders(c,d)>Summ_TP || (Ind[c]-Ind[d])<Delta_Close)// или линии индикатора пересеклись
            Close_Orders(c,d);             // если суммарный ТП 2-х хедж ордеров, больше заданного, то закрываем эти ордера
           }
          if((Ind[c]-Ind[d])<Delta_Close)      // если линии индикатора пересеклись
          Close_Orders(c,d);               // то закрываем эти ордера
         }                
        }
       }
     } 
   Object_Open_Orders();                   // вызов таблицы данных, открытых позиций  
//+------------------------------------------------------------------+

   return(0);
  }

//+------------------------------------------------------------------+
//| Функция подсчета профита всех ордеров                            |
//+------------------------------------------------------------------+
/*
double Profit_All()
  { 
   double Summ_1=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
//+------------------------------------------------------------------+
      if(OrderMagicNumber()==Magic)
        {                        
         Summ_1=Summ_1+OrderProfit();
        }
        Print("Функция закрытия всех ордеров");
     }
     return(Summ_1);
//+------------------------------------------------------------------+
  }
*/  
//+------------------------------------------------------------------+
//| Функция проверки окрытых позиций                                 |
//+------------------------------------------------------------------+
bool Open_true(int a, int b)
  {
   int ord = 0;
   bool open = false;
   string Comments = StringConcatenate(Magic,DoubleToStr(a,0),DoubleToStr(b,0));
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderComment()==Comments && OrderMagicNumber()==Magic)
        {
         ord = ord+1;                    // подсчет открытых ордеров с выбранным Комментарием
        }
         if(ord > 1){open = true; break;}// если их больше 1-ого, то функция Верна
     }

   return(open);
  }
  
//+------------------------------------------------------------------+
//| Функция открывает 2 хедж позиции                                 |
//+------------------------------------------------------------------+
void Open_Orders(int a, int b)
  {
   int ord = 0; 
   int res;
   string Comments = StringConcatenate(Magic,DoubleToStr(a,0),DoubleToStr(b,0));
   for(int o=0;o<20;o++)
  {
//+------------------------------------------------------------------+
   if(ord==0)
    {
    if(rev[a])                    // если стоит реверс, то 1-ую покупаем
     {
      res=OrderSend(Symbols[a],OP_BUY,Lots,MarketInfo(Symbols[a],MODE_ASK),10,0,0,Comments,Magic,0,CLR_NONE);
       if(res>0){ord = ord+1;}
     }
     else                         // если нет, то 1-ую прадаем
      {
       res=OrderSend(Symbols[a],OP_SELL,Lots,MarketInfo(Symbols[a],MODE_BID),10,0,0,Comments,Magic,0,CLR_NONE);
        if(res>0){ord = ord+1;}
      }
    } 
//+------------------------------------------------------------------+
   if(ord==1)
    {
    if(rev[b])                    // если стоит реверс, то 2-ую прадаем 
     {
       res=OrderSend(Symbols[b],OP_SELL,Lots,MarketInfo(Symbols[b],MODE_BID),10,0,0,Comments,Magic,0,CLR_NONE);
        if(res>0){ord = ord+1;}
     }
     else                         // если нет, то 2-ую покупаем
      {
      res=OrderSend(Symbols[b],OP_BUY,Lots,MarketInfo(Symbols[b],MODE_ASK),10,0,0,Comments,Magic,0,CLR_NONE);
       if(res>0){ord = ord+1;}
      }     
    } 
//+------------------------------------------------------------------+
    //    Print("Функция открывает 2 хедж позиции");
  if(ord==2) break;
  }
//----
   return(0);
  }
 
//+------------------------------------------------------------------+
//| Функция подсчета суммапного профита 2-х хедж ордеров             |
//+------------------------------------------------------------------+
double Profit_Orders(int a ,int b)
  { 
   double Profit=0;
   string Comments = StringConcatenate(Magic,DoubleToStr(a,0),DoubleToStr(b,0));
//+------------------------------------------------------------------+
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderComment()==Comments && OrderMagicNumber()==Magic)
        {                        
         Profit=Profit+OrderProfit();
        }
     }
//----
//        Print("Функция подсчета суммапного профита 2-х хедж ордеров");
     return(Profit);
  }
  
//+------------------------------------------------------------------+
//| Функция закрывает 2 хедж позиции                                 |
//+------------------------------------------------------------------+
void Close_Orders(int a, int b)
  {
   string Comments = StringConcatenate(Magic,DoubleToStr(a,0),DoubleToStr(b,0));
   bool Cl,Op = true;
//+------------------------------------------------------------------+
   for(int o=0;o<20;o++)
  {
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderComment()==Comments && OrderMagicNumber()==Magic)// если Магик и Коммент. совпадает
       {
        if(OrderType()==OP_BUY)
        {
         Cl = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),10,CLR_NONE);   // то, закрываем ордер BUY
         if(!Cl){Print("error BUY(",GetLastError(),")"); break;}
        }
        if(OrderType()==OP_SELL)
        {
         Cl = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),10,CLR_NONE);   // то, закрываем ордер SELL
         if(!Cl){Print("error SELL(",GetLastError(),")"); break;}
        }
       }
     }
//----
   for(int j=0;j<OrdersTotal();j++)
     {
      OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
      if(OrderComment()==Comments && OrderMagicNumber()==Magic)    // если Магик и Коммент. совпадает
      {Op = true; break;}
      else Op = false;
     }
       // Print("Функция закрывает 2 хедж позиции  ",o);
  if(Op==false) break;
  }
//+------------------------------------------------------------------+
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Функция подсчета ордеров с общим Магиком                         |
//+------------------------------------------------------------------+
int Total_Magic_Order()
  { 
   int total=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
//+------------------------------------------------------------------+
      if(OrderMagicNumber()==Magic)
        {                         
         total=total+1;
        }
     }
     return(total);
//+------------------------------------------------------------------+
  }
  
//+------------------------------------------------------------------+
//| Функция закрытия всех ордеров, с общим Магиком                   |
//+------------------------------------------------------------------+
void Close_All_Order()
  { 
   bool Cl;
   for(int o=0;o<20;o++)
  {
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
//+------------------------------------------------------------------+
      if(OrderMagicNumber()==Magic)
        {                         
         if(OrderType()==OP_BUY)
         {
          Cl = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),10,CLR_NONE);   // то, закрываем ордер BUY
          if(!Cl){Print("error BUY(",GetLastError(),")"); break;}
         }
         if(OrderType()==OP_SELL)
         {
          Cl = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),10,CLR_NONE);   // то, закрываем ордер SELL
          if(!Cl){Print("error SELL(",GetLastError(),")"); break;}
         }
        }
     }
     //   Print("Функция закрытия всех ордеров, с общим Магиком");
   if(Total_Magic_Order()==0) break;
  }
     return(0);
//+------------------------------------------------------------------+
  }
  
//+------------------------------------------------------------------+
//| Функция таблици данных открытых позиций                          |
//+------------------------------------------------------------------+
int Object_Open_Orders()
  {
//--------------------------------------------------------------- 2 --
 for(int i=1;i<=100;i++)
   {
   if(Info[i]=="")break;
   color Color = Lime;
   string Text = Info[i];
   string Inform = StringConcatenate("Inform_",DoubleToStr(i,0));
   ObjectCreate(Inform, OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet(Inform, OBJPROP_CORNER, 1);    // Привязка угол
   ObjectSet(Inform, OBJPROP_XDISTANCE, 10);// Координата Х
   ObjectSet(Inform, OBJPROP_YDISTANCE, 100+15*i);// Координата Y
   ObjectSetText(Inform,Text,10,"Arial",Color);// Изменение свойств объекта
   }
//--------------------------------------------------------------- 3 --
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Функция удаления таблици данных                                  |
//+------------------------------------------------------------------+
int Object_Open_Delete()
  {
//--------------------------------------------------------------- 2 --
 for(int i=1;i<=100;i++)
   {
   if(Info[i]=="")break;
   string Inform = StringConcatenate("Inform_",DoubleToStr(i,0));
   ObjectDelete(Inform);               // Удаление объекта
   Info[i]="";
   }
//--------------------------------------------------------------- 3 --
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Функция deinit                                                   |
//+------------------------------------------------------------------+
int deinit()                             // Спец. функция deinit
  {
   Object_Open_Delete();
     ObjectDelete("Info");               // Удаление объекта
     ObjectDelete("Info_1");             // Удаление объекта
     ObjectDelete("Info_2");             // Удаление объекта
     ObjectDelete("Info_3");             // Удаление объекта
     ObjectDelete("Info_5");             // Удаление объекта
   return;                               // Выход из deinit()
  }
//--------------------------------------------------------------- 8 -- 

  • 0
  • Просмотров: 5306
  • 23 июля 2015, 14:53
  • pozhar
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
помогите написать советник по индикатору
Следующая запись в группе  
MarketScalper PRO 1.7
22 июля 2015
23 июля 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (0)


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий