necesito consejo de un profesional de la pesca de arrastre que controle dos posiciones independientemente una de la otra, ¿cómo se puede implementar?

 

ajustar la red de arrastre, funciona bien para una posición

pero si hay más de un puesto, por ejemplo dos puestos de venta

cierra los dos al mismo tiempo

necesito una red de arrastre que funcione para cada posición por separado

cuando se opera manualmente es posible, es decir, una posición tiene un Sell StopLoss

la otra posición de venta tiene un StopLoss diferente

Google no ayudó

 

La red de arrastre necesita distinguir posiciones en cualquier caso, por lo que podemos asignar magias diferentes a las órdenes y establecer dos redes de arrastre con magias diferentes.

¿O debemos incrustar el código de la red de arrastre en el EA? En ese caso, debemos seguir asignando números mágicos diferentes a las órdenes y duplicar la función de rastro en dos símbolos mágicos. EN MI OPINIÓN.

 
Intenté dividir por billete, pero no tuve suerte
 
Sancho77:
En cualquier caso, una red de arrastre necesita distinguir entre posiciones, por lo que es posible asignar magias diferentes a las órdenes y establecer dos redes de arrastre con magias diferentes.


¿Cómo se vería eso en el código?

¿hay una red de arrastre distinta para cada puesto?

¿Y si hay 6-8 puestos?

¿Es realmente imposible simplificar?

la red de arrastre está en la EA

 
charony:


¿Cómo se vería en el código? ¿Es posible escribir un nuevo magik para cada posición?

¿hay una red de arrastre distinta para cada puesto?

¿Y si hay 6-8 puestos?

¿No podría ser más sencillo?

Si hay muchos puestos, es difícil tener una búsqueda separada para cada uno, estoy de acuerdo. Si hay dos puestos a la vez, está bien en mi opinión.

Tal vez pueda ser más sencillo, pero ¿cuál debería ser la diferencia en el arrastre de los distintos pedidos?

 
charony:


¿Cómo se vería en el código? ¿Se escribiría un nuevo magik para cada posición?

¿Hay una red de arrastre distinta para cada puesto?

¿Y si hay 6-8 puestos?

¿es realmente imposible simplificar?

la red de arrastre está en la EA

Desactive la red de arrastre en EA y utilice la red de arrastre incorporada, hay una red de arrastre separada para cada posición.
 
sanyooooook:
Desactive la red de arrastre en EA y utilice la red de arrastre incorporada, hay una red de arrastre separada para cada posición.

no es divertido
 
//--------------------------------------------------------------- 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 --
código de arrastre
 

Bueno, sólo puedo sugerir que a cada orden se le asigne un nuevo magik a su vez, y que se haga una función de tipo independiente para cada orden:

//--------------------------------------------------------------- 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 --
 
charony:

no es divertido

Barato y alegre.

Si cada posición tiene su propia red de arrastre, el valor de la variable de arrastre debe ser diferente para cada posición. Por lo tanto, para cada arrastre hay una variable, ¿cuántas posiciones como máximo tendrá?

 
sanyooooook:

Barato y barato.

Si cada posición tiene su propia red de arrastre, el valor de la variable de arrastre debe ser diferente para cada posición. Por lo tanto, para cada arrastre hay una variable, ¿cuántas posiciones como máximo tendrá?


máx. 8 posiciones