Скачать MetaTrader 5

помогите вписать стоп лосс в советник

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Мы сами переведем ее на другие языки!
19seregakot92
25
19seregakot92 2015.05.12 00:28 
extern double Lot1=0.1;
extern double Lot2=0.1;
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)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);
  }
Andrei Fandeev
18214
Andrei Fandeev 2015.05.12 01:22  
Реклама, однако ((( 
19seregakot92
25
19seregakot92 2015.05.12 01:54  
Andrei Fandeev:
Реклама, однако ((( 

неполучится? просто если в него вписать стопы , ему цены небудет

Файлы:
1.mq4 39 kb
Mikhail Filimonov
5931
Mikhail Filimonov 2015.05.12 02:05  
19seregakot92:

неполучится? просто если в него вписать стопы , ему цены небудет

Всему и всегда есть СВОЯ цена!
19seregakot92
25
19seregakot92 2015.05.12 02:14  
Михаил:
Всему и всегда есть СВОЯ цена!
так сможет кто нибудь помоч с этой проблемкой?
19seregakot92
25
19seregakot92 2015.05.12 11:20  
я даже неправильно выразился там нужно  написать Stop loss к тейк трофиту. или к нему же трэйлинг стоп
Файлы:
1.mq4 39 kb
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий