Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужен торговый робот? Закажи его в сервисе Фриланс!
19seregakot92
25
19seregakot92 2015.05.11 23:49 

поможете?     

 

extern double Lot1=0.1;

extern double Lot2=0.1;

extern int    TrailingStop = 30;

extern int    TrailingStep = 10;

extern string Symbol1="EURUSD";

extern string Symbol2="GBPUSD";

extern int TP=20;

extern int ProfitClose=10;

extern int MaxOrders=3;

extern int Magic=777;

/////////////////////////////////////////////////////////////////////////

int D,i,y,i1,i2;

string Name;

double Ask1,Bid1,Ask2,Bid2;

int Nom[];

int Pairs;

int Ticket1,Ticket2;

int TypeOrder;

double LotOrder;

string SymbolOrder;

int init()

  {

   D=1;

   if (Digits==5 || Digits==3)

    {

       TrailingStop *= 10;

       TrailingStep *= 10;

   }

   D=10;

   Name=WindowExpertName();

   ArrayResize(Nom,100);

   return(0);

  }

/////////////////////////////////////////////////////////////////////////

int start()

  {

   Ask1=NormalizeDouble(MarketInfo(Symbol1,MODE_ASK),MarketInfo(Symbol1,MODE_DIGITS));

   Bid1=NormalizeDouble(MarketInfo(Symbol1,MODE_BID),MarketInfo(Symbol1,MODE_DIGITS));

   Ask2=NormalizeDouble(MarketInfo(Symbol2,MODE_ASK),MarketInfo(Symbol2,MODE_DIGITS));

   Bid2=NormalizeDouble(MarketInfo(Symbol2,MODE_BID),MarketInfo(Symbol2,MODE_DIGITS));

/////////////////////////////////////////////////////////////////////////

   int OB1,OS1,OB2,OS2,N;

   int Ticket;

   double ProfitAll;

   Pairs=0;

   ArrayInitialize(Nom,0);

   for (i=0; i<OrdersTotal(); i++)

        {

         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

         if (OrderSymbol()==Symbol1 && OrderMagicNumber()==Magic)

            {

             if (OrderType()==0)

                {

                 OB1++;

                }

             if (OrderType()==1)

                {

                 OS1++;

                }

             ProfitAll+=OrderProfit();

            }

         if (OrderSymbol()==Symbol2 && OrderMagicNumber()==Magic)

            {

             if (OrderType()==0)

                {

                 OB2++;

                }

             if (OrderType()==1)

                {

                 OS2++;

                }

             ProfitAll+=OrderProfit();

            }

         for (int y=0; y<Pairs; y++)

             {

              if (Nom[y]==StrToInteger(OrderComment()))break;

             }

         if (y==Pairs){Nom[y]=StrToInteger(OrderComment());Pairs++;}

         

        }

/////////////////////////////////////////////////////////////////////////

 /*Comment (ProfPar(1),

     "\n",ProfPar(2),

     "\n",ProfPar(3),

     "\n",ProfPar(4),

     "\n",Pairs);*/

  if (ProfitAll>=ProfitClose)

   {

    CloseMarket();

    return(0);

   }

/////////////////////////////////////////////////////////////////////////

   if (OB1+OS1+OB2+OS2==0)

      {

       Ticket=OpenOrder(Symbol1,OP_BUY,Lot1,Ask1,0,0,"1",Magic);

       Ticket=OpenOrder(Symbol1,OP_SELL,Lot1,Bid1,0,0,"2",Magic);

       Ticket=OpenOrder(Symbol2,OP_BUY,Lot2,Ask2,0,0,"2",Magic);

       Ticket=OpenOrder(Symbol2,OP_SELL,Lot2,Bid2,0,0,"1",Magic);

      }

/////////////////////////////////////////////////////////////////////////

  if (Pairs>0)

   {

    for( y=0;y<Pairs; y++)

      {

       if (ProfPar(Nom[y])>=TP)

         {

          FindTicket(Nom[y]);

          Print (Ticket1,"  ",Ticket2);

          OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES);

          TypeOrder=OrderType();LotOrder=OrderLots();SymbolOrder=OrderSymbol();

          CloseOrder(Ticket1,LotOrder);

          

          if (TypeOrder==0)

            {

             OB1--;

             if (OS1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,Nom[y],Magic);

             if (OB1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,NewNom(),Magic);

            }

             else 

               {

                OS1--;

                if (OB1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,Nom[y],Magic);

                if (OS1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,NewNom(),Magic);

               }

          /////////////////////////////////////////////////

          OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES);

          TypeOrder=OrderType();LotOrder=OrderLots();SymbolOrder=OrderSymbol();

          CloseOrder(Ticket2,LotOrder);

          

          if (TypeOrder==0)

            {

             OB2--;

             if (OS2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,Nom[y],Magic);

             if (OB2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,NewNom(),Magic);

            }

             else 

               {

                OS2--;

                if (OB2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,Nom[y],Magic);

                if (OS2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,NewNom(),Magic);

               }

         }

      }

   }

/////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////

   return(0);

  }

/////////////////////////////////////////////////////////////////////////

int CloseMarket()

   { 

    for (int j=0; j<OrdersTotal(); j++)

      {

       OrderSelect(j,SELECT_BY_POS,MODE_TRADES);

       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )

         {

          CloseOrder(OrderTicket(),OrderTicket());

          j--;

         }

      }

    return(0);

   }

////////////////////////////////////////////////////////////////////////

double ProfPar(int nom)

   {

    double prof;

    for (i=0; i<OrdersTotal(); i++)

        {

         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

         if (OrderMagicNumber()==Magic && StrToInteger(OrderComment())==nom)

            {

             if (OrderType()==0)prof=prof+(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);

             if (OrderType()==1)prof=prof+(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);

            }

         }

    return (prof/D);

   }

/////////////////////////////////////////////////////////////////////////////

int FindTicket(int nom)

   {

    Ticket1=0;Ticket2=0;

    for (i=0; i<OrdersTotal(); i++)

        {

         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

         if (OrderMagicNumber()==Magic && StrToInteger(OrderComment())==nom)

            {

             if (Ticket1==0) {Ticket1=OrderTicket();continue;}

             if (Ticket1>0) {Ticket2=OrderTicket();break;}

            }

         }

   }

/////////////////////////////////////////////////////////////////////////////

int NewNom()

   {

    for (i1=1; i1<100; i1++)

      {

       for (i2=0; i2<Pairs;i2++)

         {

          if (Nom[i2]==i1) break;

         }

       if (i2==Pairs)return (i1);

      }

   }

/////////////////////////////////////////////////////////////////////////////

int OpenOrder(string symbol,int cmd,double volume,double price,double stoploss,double takeprofit,string comment,int magic)

             {

              int err,i,ticket;

              while(i<10)

                   {

                    RefreshRates ();

                    if(cmd==0) price=NormalizeDouble(MarketInfo(symbol,MODE_ASK),MarketInfo(symbol,MODE_DIGITS));

                    if(cmd==1) price=NormalizeDouble(MarketInfo(symbol,MODE_BID),MarketInfo(symbol,MODE_DIGITS));

                    ticket=OrderSend(symbol,cmd,volume,price,3*D,stoploss,takeprofit,comment,magic);

                    err = GetLastError();

                    if (err == 0) break;

                    Print(Name,Symbol(),Error(err),"  при открытии ордера");

                    Print (price);

                    Sleep(1000);

                    i++;

                   }

              return(ticket);

             }

/////////////////////////////////////////////////////////////////////////////

int CloseOrder(int ticket, double lots)

              {

               int err,i1,cmd;

               string symbol;

               double price;

               OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);

               cmd=OrderType();

               symbol=OrderSymbol();

               if (lots<MarketInfo(Symbol(),MODE_MINLOT))lots=MarketInfo(Symbol(),MODE_MINLOT);

               while(i1<10)

                   {

                    RefreshRates();

                    if(cmd==0) price=NormalizeDouble(MarketInfo(symbol,MODE_BID),MarketInfo(symbol,MODE_DIGITS));

                    if(cmd==1) price=NormalizeDouble(MarketInfo(symbol,MODE_ASK),MarketInfo(symbol,MODE_DIGITS));

                    if (OrderType()>1){OrderDelete(ticket);return(0);}

                    OrderClose(ticket,lots,price,3*D,CLR_NONE);

                    err = GetLastError();

                    if (err == 0) break;

                    Print(Name,Symbol(),Error(err),"  при закрытии ордера");

                    Sleep(1000);

                    i1++;

                   }

               return(0);

              }

//////////////////////////////////////////////////////////////////////////////

int ModifyOrder(int ticket,double price,double stoploss,double takeprofit)

               {

                int err,i;

                

                while(i<10)

                   {

                    RefreshRates();

                    OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),NormalizeDouble(takeprofit,Digits),0,CLR_NONE);

                    err = GetLastError();

                    if (err == 0) break;

                    Print(Name,Symbol(),Error(err),"  при модификации ордера");

                    Sleep(1000);

                    i++;

                   }

                return(0);

               }

///////////////////////////////////////////////////////////////////////////////

string Error(int error_code)

  {

   string error_string;

   switch(error_code)

     {

      case 0:   error_string="Нет ошибок";                                                     break;

      case 1:   error_string="Нет ошибки, но результат неизвестен";                            break;

      case 2:   error_string="Общая ошибка";                                                   break;

      case 3:   error_string="Неправильные параметры";                                         break;

      case 4:   error_string="Торговый сервер занят";                                          break;

      case 5:   error_string="Старая версия клиентского терминала";                            break;

      case 6:   error_string="Нет связи с торговым сервером";                                  break;

      case 7:   error_string="Недостаточно прав";                                              break;

      case 8:   error_string="Слишком частые запросы";                                         break;

      case 9:   error_string="Недопустимая операция нарушающая функционирование сервера";      break;

      case 64:  error_string="Счет заблокирован";                                              break;

      case 65:  error_string="Неправильный номер счета";                                       break;

      case 128: error_string="Истек срок ожидания совершения сделки";                          break;

      case 129: error_string="Неправильная цена";                                              break;

      case 130: error_string="Неправильные стопы";                                             break;

      case 131: error_string="Неправильный объем";                                             break;

      case 132: error_string="Рынок закрыт";                                                   break;

      case 133: error_string="Торговля запрещена";                                             break;  

      case 134: error_string="Недостаточно денег для совершения операции";                     break;

      case 135: error_string="Цена изменилась";                                                break;

      case 136: error_string="Нет цен";                                                        break;

      case 137: error_string="Брокер занят";                                                   break;

      case 138: error_string="Новые цены";                                                     break;

      case 139: error_string="Ордер заблокирован и уже обрабатывается";                        break;

      case 140: error_string="Разрешена только покупка";                                       break;

      case 141: error_string="Слишком много запросов";                                         break;

      case 145: error_string="Модификация запрещена, так как ордер слишком близок к рынку";    break;

      case 146: error_string="Подсистема торговли занята";                                     break;

      case 147: error_string="Использование даты истечения ордера запрещено брокером";         break;

      case 148: error_string="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";break;

      case 4000: error_string="Нет ошибки";                                                      break;

      case 4001: error_string="Неправильный указатель функции";                                  break;

      case 4002: error_string="Индекс массива - вне диапазона";                                  break;

      case 4003: error_string="Нет памяти для стека функций";                                    break;

      case 4004: error_string="Переполнение стека после рекурсивного вызова";                    break;

      case 4005: error_string="На стеке нет памяти для передачи параметров";                     break;

      case 4006: error_string="Нет памяти для строкового параметра";                             break;

      case 4007: error_string="Нет памяти для временной строки";                                 break;

      case 4008: error_string="Неинициализированная строка";                                     break;

      case 4009: error_string="Неинициализированная строка в массиве";                           break;

      case 4010: error_string="Нет памяти для строкового массива";                               break;

      case 4011: error_string="Слишком длинная строка";                                          break;

      case 4012: error_string="Остаток от деления на ноль";                                      break;

      case 4013: error_string="Деление на ноль";                                                 break;

      case 4014: error_string="Неизвестная команда";                                             break;

      case 4015: error_string="Неправильный переход";                                            break;

      case 4016: error_string="Неинициализированный массив";                                     break;

      case 4017: error_string="Вызовы DLL не разрешены";                                         break;

      case 4018: error_string="Невозможно загрузить библиотеку";                                 break;

      case 4019: error_string="Невозможно вызвать функцию";                                      break;

      case 4020: error_string="Вызовы внешних библиотечных функций не разрешены";                break;

      case 4021: error_string="Недостаточно памяти для строки, возвращаемой из функции";         break;

      case 4022: error_string="Система занята";                                                  break;

      case 4050: error_string="Неправильное количество параметров функции";                      break;

      case 4051: error_string="Недопустимое значение параметра функции";                         break;

      case 4052: error_string="Внутренняя ошибка строковой функции";                             break;

      case 4053: error_string="Ошибка массива";                                                  break;

      case 4054: error_string="Неправильное использование массива-таймсерии";                    break;

      case 4055: error_string="Ошибка пользовательского индикатора";                             break;

      case 4056: error_string="Массивы несовместимы";                                            break;

      case 4057: error_string="Ошибка обработки глобальныех переменных";                         break;

      case 4058: error_string="Глобальная переменная не обнаружена";                             break;

      case 4059: error_string="Функция не разрешена в тестовом режиме";                          break;

      case 4060: error_string="Функция не разрешена";                                            break;

      case 4061: error_string="Ошибка отправки почты";                                           break;

      case 4062: error_string="Ожидается параметр типа string";                                  break;

      case 4063: error_string="Ожидается параметр типа integer";                                 break;

      case 4064: error_string="Ожидается параметр типа double";                                  break;

      case 4065: error_string="В качестве параметра ожидается массив";                           break;

      case 4066: error_string="Запрошенные исторические данные в состоянии обновления";          break;

      case 4067: error_string="Ошибка при выполнении торговой операции";                         break;

      case 4099: error_string="Конец файла";                                                     break;

      case 4100: error_string="Ошибка при работе с файлом";                                      break;

      case 4101: error_string="Неправильное имя файла";                                          break;

      case 4102: error_string="Слишком много открытых файлов";                                   break;

      case 4103: error_string="Невозможно открыть файл";                                         break;

      case 4104: error_string="Несовместимый режим доступа к файлу";                             break;

      case 4105: error_string="Ни один ордер не выбран";                                         break;

      case 4106: error_string="Неизвестный символ";                                              break;

      case 4107: error_string="Неправильный параметр цены для торговой функции";                 break;

      case 4108: error_string="Неверный номер тикета";                                           break;

      case 4109: error_string="Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.";            break;

      case 4110: error_string="Длинные позиции не разрешены. Необходимо проверить свойства эксперта.";           break;

      case 4111: error_string="Короткие позиции не разрешены. Необходимо проверить свойства эксперта.";          break;

      case 4200: error_string="Объект уже существует";                                           break;

      case 4201: error_string="Запрошено неизвестное свойство объекта";                          break;

      case 4202: error_string="Объект не существует";                                            break;

      case 4203: error_string="Неизвестный тип объекта";                                         break;

      case 4204: error_string="Нет имени объекта";                                               break;

      case 4205: error_string="Ошибка координат объекта";                                        break;

      case 4206: error_string="Не найдено указанное подокно";                                    break;

      default:   error_string="Ошибка при работе с объектом";

     }

   return(error_string);

  }

Файлы:
1.mq4 39 kb
Vitalie Postolache
10989
Vitalie Postolache 2015.05.12 10:13  
А откуда такое убеждение, что СЛ даст этому советнику суперсилы, ведь код не ваш?
19seregakot92
25
19seregakot92 2015.05.13 11:33  
evillive:
А откуда такое убеждение, что СЛ даст этому советнику суперсилы, ведь код не ваш?
я думаю  нужен трал по профиту для обеих парлибо стоп по профиту для обеих пар . помоему все получится.  либо стоп по профиту. а с кодом мудрил однакурсник я пытался переделать но увы неполучается.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий