Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1831

 
Mihail Matkovskij #:

Le bord de fuite doit être déclenché si le prix évolue dans la direction du TP et ne rien faire si le prix recule. Le niveau SL ne doit aller que dans la direction du TP et ne pas revenir en arrière.

Je sais.

J'ai écrit.

il y a un nombre infini de positions d'arrêt et de prise instantanée.

2021.12.23 21:07:51.634 2021.12.21 21 21:12:20 111 AUDUSD,M15 : Modification d'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:20 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71288 tp : 0.72038 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:18 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:18 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71268 tp : 0.72018 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:16 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:16 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71248 tp : 0.71998 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:15 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:15 111 AUDUSD,M15 : modify #2 buy 0.02 AUDUSD at 0.71028 sl : 0.71228 tp : 0.71978 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:13 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:13 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71208 tp : 0.71958 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:11 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:11 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71188 tp : 0.71938 ok

2021.12.23 21:07:51.634 2021.12.21 12:12:10 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:10 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71168 tp : 0.71918 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:08 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:08 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71148 tp : 0.71898 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:06 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:06 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71128 tp : 0.71878 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:05 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:05 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71108 tp : 0.71858 ok

2021.12.23 21:07:51.634 2021.12.21 21 12:12:00 111 AUDUSD,M15 : Modifier l'ordre d'achat Réussi !

2021.12.23 21:07:51.634 2021.12.21 21 21:12:00 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71088 tp : 0.71838 ok

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15 : modifier #2 acheter 0.02 AUDUSD à 0.71028 sl : 0.71068 tp : 0.71818

2021.12.23 21:07:51.634 2021.12.21 12:11:52 111 AUDUSD,M15 : Modification de l'ordre d'achat réussie !


 
законопослушный гражданин #:

Je sais.

J'ai écrit.

l'arrêt et la prise sont déplacés instantanément un nombre infini de fois

Vous devez obtenir le SL de l'ordre en cours de modification et le comparer au SL calculé. S'ils sont égaux, le robot ne doit rien faire jusqu'à ce que le SL calculé dépasse le SL de l'ordre en cours de traitement. Comment comparer deux valeurs doubles : soit comparer NodmalizeDouble(valeur, Chiffres) (de chaque valeur) ou EqualDoubleshttps://www.mql5.com/ru/docs/basis/types/double

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин #:

Je sais.


Vous l'avez réglé correctement. Avez-vous modifié quelque chose dans la fonction TrailingOrders() ?

 
Mihail Matkovskij #:

Vous devez obtenir le SL de l'ordre en cours de modification et le comparer au SL calculé. ...

En général, les règles sont les suivantes.

  • Le SL calculé est inférieur au SL de l'ordre (moins favorable) - ne rien faire.
  • La SL calculée est égale à la SL de l'ordre - ne rien faire.
  • Le SL calculé dépasse le SL de l'ordre (plus rentable) - modifiez-le avec la valeur calculée.
Ces règles de chalutage peuvent être utilisées pour construire presque n'importe quel chalut avec n'importe quel algorithme de calcul de SL.
 
Tretyakov Rostyslav #:

Vous l'avez réglé correctement. Avez-vous modifié quelque chose dans la fonction TrailingOrders() ?

Je l'ai modifié et mis "tel quel" et le résultat était le même.

 
законопослушный гражданин #:

Je l'ai modifié et mis "tel quel" et le résultat est le même.

Il est nécessaire de voir les paramètres d'entrée, car le journal montre que le chalut fonctionne correctement.
 
Tretyakov Rostyslav #:
Nous avons besoin de voir les paramètres d'entrée, car selon le journal, le chalut fonctionne correctement.

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - copie : Lot=0.01 ; StopLoss=200 ; TakeProfit=560 ; Slippage=3 ; Magic=1 ; K_Martin1=0.01 ; K_Martin2=1.9 ; K_Martin3=1.4 ; OrdersClose=3 ; OrdersClose2=5 ; DigitsLot=2 ; PeriodMA=21 ; MovingShift=1 ;


 
законопослушный гражданин #:

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - copie : Lot=0.01 ; StopLoss=200 ; TakeProfit=560 ; Slippage=3 ; Magic=1 ; K_Martin1=0.01 ; K_Martin2=1.9 ; K_Martin3=1.4 ; OrdersClose=3 ; OrdersClose2=5 ; DigitsLot=2 ; PeriodMA=21 ; MovingShift=1 ;


Peut-être ai-je mal placé la fonction dans le code ?

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   TrailingOrders();
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
  }

et mettre la fonction elle-même séparément

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

void TrailingOrders()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+20*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }
 
законопослушный гражданин #:

Ai-je mal placé la fonction dans le code ?

et mettre la fonction elle-même séparément

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

void TrailingOrders()
  {
   
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<=OrderOpenPrice()-StopLoss*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-(StopLoss+20)*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-(StopLoss+20)*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }

La piste est correcte.

Essayez comme ceci

 
Tretyakov Rostyslav #:

Le chariot est correctement positionné.

Essayez ça.

décoller dans l'espace

le stop s'arrête d'abord, puis s'envole instantanément dans l'espace avec la prise (en fermant l'ordre au passage)

Ce n'est pas le problème tel que je le comprends.

corrigez-moi si je me trompe : void OnTick()

s'il n'y a pas d'ordres ouverts et qu'il y a un signal, alors vOrderOpenBuy() / vOrderOpenSell()

Vient ensuite void vOrderModify(int iOTi) - c'est-à-dire qu'ils fixent les stops et les takei et vérifient ensuite les erreurs.

C'est-à-dire que tant que l'ordre n'est pas clôturé au stop ou au take, il n'est pas possible de le corriger en termes de trailing.

Vous avez besoin d'un (maximum deux) multiple de stop and take.

Si vous souhaitez modifier le stop suiveur et prendre un bénéfice, vous devez le faire manuellement.

Je suis encore en train de réfléchir à la manière de l'implémenter.

Dossiers :
111.mq4  25 kb