Скачать MetaTrader 5

нужен совет от профи трал который управляет двумя позициями независимо друг от друга, как можно реализовать?

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

поставил трал,работает нормально при одной позиции

но если позиций больше одной,например две поз.Sell

то закрывает обе одновременно

мне нужно чтобы трал работал для каждой позиции отдельно

при ручной торговле это возможно,т.е у одной позиции Sell свой StopLoss

у другой позиции Sell другой StopLoss

гугл не помог

Александр
91
Александр  

Тралу в любом случае позиции различать нужно, так что можно разные магики присваивать ордерам и ставить два трала с разными магиками.

Или код трала нужно в советник встроить? Тогда все равно нужно разные магики присваивать ордерам а функцию трала продублировать на два магика. ИМХО.

pako
3320
pako  
пробовал разделять по тикетам, безуспешно
pako
3320
pako  
Sancho77:
Тралу в любом случае позиции различать нужно, так что можно разные магики присваивать ордерам и ставить два трала с разными магиками.


как это будет выглядеть в коде? для каждой позиции писать новый магик?

для каждой позиции отдельный трал?

а если позиций 6-8

неужели нельзя проще?

трал стоит в советнике

Александр
91
Александр  
charony:


как это будет выглядеть в коде? для каждой позиции писать новый магик?

для каждой позиции отдельный трал?

а если позиций 6-8

неужели нельзя проще?

Ну если много позиций то сложно для каждой отдельный трал, согласен. Если по две позиции но нормально на мой взгляд.

Может можно проще, а какая должна быть разница в трале разных ордеров?

Alexandr Bryzgalov
33245
Alexandr Bryzgalov  
charony:


как это будет выглядеть в коде? для каждой позиции писать новый магик?

для каждой позиции отдельный трал?

а если позиций 6-8

неужели нельзя проще?

трал стоит в советнике

Отключи трал в советнике и пользуйся встроенным тралом, там для каждой позиции отдельно свой трал.
pako
3320
pako  
sanyooooook:
Отключи трал в советнике и пользуйся встроенным тралом, там для каждой позиции отдельно свой трал.

не смешно
pako
3320
pako  
//--------------------------------------------------------------- 1 --
// Функция модификации StopLoss всех ордеров указанного типа
// Глобальные переменные:
// Mas_Ord_New             Массив ордеров последний известный
// int TralingStop         Значение TralingStop(количество пунктов)
//--------------------------------------------------------------- 2 --
int Tral_Stop(int Tip)
  {
   int Ticket;                      // Номер ордера
   double
   Price,                           // Цена открытия рыночного ордера
   TS,                              // TralingStop (относит.знач.цены)
   SL,                              // Значение StopLoss ордера
   TP;                              // Значение TakeProfit ордера
   bool Modify;                     // Признак необходимости модифи.
//--------------------------------------------------------------- 3 --
   for(int i=1;i<=Mas_Ord_New[0][0];i++)  // Цикл по всем ордерам
     {                                    // Ищем ордера задан. типа
      if (Mas_Ord_New[i][6]!=Tip)         // Если это не наш тип..
         continue;                        //.. то переступим ордер
      Modify=false;                       // Пока не назначен к модифи
      Price =Mas_Ord_New[i][1];           // Цена открытия ордера
      SL    =Mas_Ord_New[i][2];           // Значение StopLoss ордера
      TP    =Mas_Ord_New[i][3];           // Значение TakeProft ордера
      Ticket=Mas_Ord_New[i][4];           // Номер ордера
      if (TralingStop<Level_new)          // Если меньше допустимого..
         TralingStop=Level_new;           // .. то допустимый
      TS=TralingStop*Point;               // То же в относит.знач.цены
      //--------------------------------------------------------- 4 --
      switch(Tip)                         // Переход на тип ордера
        {
         case 0 :                         // Ордер Buy
            if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            break;                        // Выход из switch
         case 1 :                         // Ордер Sell
            if (NormalizeDouble(SL,Digits)>// Если выше желаемого..
               NormalizeDouble(Ask+TS,Digits)||
               NormalizeDouble(SL,Digits)==0)//.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
        }                                 // Конец switch
      if (Modify==false)                  // Если его не надо модифи..
         continue;                        // ..то идём по циклу дальше
      bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!
      //--------------------------------------------------------- 5 --
      if (Ans==false)                     // Не получилось :( 
        {                                 // Поинтересуемся ошибками:
         if(Errors(GetLastError())==false)// Если ошибка непреодолимая
            return;                       // .. то уходим.
         i--;                             // Понижение счётчика
        }
      
     }
   return;                                // Выход из пользов. функции
  }
//--------------------------------------------------------------- 6 --
код трала
Александр
91
Александр  

Ну я могу только предложить каждому ордеру по очереди присваивать новый магик, и для каждого ордера сделать отдельную функцию типа:

//--------------------------------------------------------------- 1 --
// Функция модификации StopLoss всех ордеров указанного типа
// Глобальные переменные:
// Mas_Ord_New             Массив ордеров последний известный
// int TralingStop_1         Значение TralingStop(количество пунктов)
//--------------------------------------------------------------- 2 --
int Tral_Stop(int Tip)
  {
   int Ticket;                      // Номер ордера
   double
   Price,                           // Цена открытия рыночного ордера
   TS,                              // TralingStop (относит.знач.цены)
   SL,                              // Значение StopLoss ордера
   TP;                              // Значение TakeProfit ордера
   bool Modify;                     // Признак необходимости модифи.
//--------------------------------------------------------------- 3 --
if(OrderMagicNumber() == magic_1){
 for(int i=1;i<=Mas_Ord_New[0][0];i++)  // Цикл по всем ордерам
     {                                    // Ищем ордера задан. типа
      if (Mas_Ord_New[i][6]!=Tip)         // Если это не наш тип..
         continue;                        //.. то переступим ордер
      Modify=false;                       // Пока не назначен к модифи
      Price =Mas_Ord_New[i][1];           // Цена открытия ордера
      SL    =Mas_Ord_New[i][2];           // Значение StopLoss ордера
      TP    =Mas_Ord_New[i][3];           // Значение TakeProft ордера
      Ticket=Mas_Ord_New[i][4];           // Номер ордера
      if (TralingStop<Level_new)          // Если меньше допустимого..
         TralingStop=Level_new;           // .. то допустимый
      TS=TralingStop*Point;               // То же в относит.знач.цены
      //--------------------------------------------------------- 4 --
      switch(Tip)                         // Переход на тип ордера
        {
         case 0 :                         // Ордер Buy
            if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            break;                        // Выход из switch
         case 1 :                         // Ордер Sell
            if (NormalizeDouble(SL,Digits)>// Если выше желаемого..
               NormalizeDouble(Ask+TS,Digits)||
               NormalizeDouble(SL,Digits)==0)//.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
        }                                 // Конец switch
      if (Modify==false)                  // Если его не надо модифи..
         continue;                        // ..то идём по циклу дальше
      bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!
      //--------------------------------------------------------- 5 --
      if (Ans==false)                     // Не получилось :( 
        {                                 // Поинтересуемся ошибками:
         if(Errors(GetLastError())==false)// Если ошибка непреодолимая
            return;                       // .. то уходим.
         i--;                             // Понижение счётчика
        }
      
     }
   return;                                // Выход из пользов. функции
  }
}
 //--------------------------------------------------------------- 6 --
Alexandr Bryzgalov
33245
Alexandr Bryzgalov  
charony:

не смешно

Дешево и сердито.

Если для каждой позиции свой трал то и значение переменной трала должно быть для каждой позиции разное. Следовательно на каждый трал своя переменная, сколько позиций максимум у тебя будет?

pako
3320
pako  
sanyooooook:

Дешево и сердито.

Если для каждой позиции свой трал то и значение переменной трала должно быть для каждой позиции разное. Следовательно на каждый трал своя переменная, сколько позиций максимум у тебя будет?


максимум 8 позиций
123456789
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий