Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1831

 
Mihail Matkovskij #:

Il trailing edge dovrebbe essere attivato se il prezzo si muove nella direzione del TP e non fare nulla se il prezzo tira indietro. Il livello SL dovrebbe andare solo nella direzione del TP e non tornare indietro.

So che

Ho scritto.

c'è un numero infinito di posizioni stop and take istantaneamente

2021.12.23 21:07:51.634 2021.12.21 21:12:20 111 AUDUSD,M15: Modifica ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:20 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:18 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:16 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:15 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:13 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:11 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica ordine di acquisto riuscito!

2021.12.23 21:07:51.634 2021.12.21 21:12:10 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:08 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:06 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica dell'ordine di acquisto riuscita!

2021.12.23 21:07:51.634 2021.12.21 21:12:05 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica ordine di acquisto riuscito!

2021.12.23 21:07:51.634 2021.12.21 21:12:00 111 AUDUSD,M15: modifica #2 comprare 0,02 AUDUSD a 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: Modifica ordine di acquisto riuscito!

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15: modificare #2 comprare 0,02 AUDUSD a 0,71028 sl: 0,71068 tp: 0,71818

2021.12.23 21:07:51.634 2021.12.21 12:11:52 111 AUDUSD,M15: Modifica ordine di acquisto riuscito!


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

Lo so.

Ho scritto.

lo stop e il take sono spostati istantaneamente un numero infinito di volte

Dovresti ottenere lo SL dell'ordine che viene modificato e confrontarlo con lo SL calcolato. Se sono uguali, il robot non dovrebbe fare nulla finché lo SL calcolato non supera lo SL dell'ordine in elaborazione. Come confrontare due valori doppi: o confrontare NodmalizeDouble(value, Digits) (di ogni valore) o EqualDoubleshttps://www.mql5.com/ru/docs/basis/types/double

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

Lo so.


L'hai impostato correttamente. Hai cambiato qualcosa nella funzione TrailingOrders()?

 
Mihail Matkovskij #:

Dovresti ottenere lo SL dell'ordine che si sta modificando e confrontarlo con lo SL calcolato. ...

In generale, le regole sono le seguenti.

  • Lo SL calcolato è inferiore allo SL dell'ordine (meno favorevole) - non fare nulla
  • Lo SL calcolato è uguale allo SL dell'ordine - non fare nulla
  • Lo SL calcolato supera lo SL dell'ordine (più redditizio) - modificatelo con il valore calcolato
Queste regole di pesca a strascico possono essere utilizzate per costruire quasi tutte le reti a strascico con qualsiasi algoritmo di calcolo SL.
 
Tretyakov Rostyslav #:

L'hai impostato correttamente. Hai cambiato qualcosa nella funzione TrailingOrders()?

L'ho cambiato e messo "così com'è" e il risultato è stato lo stesso.

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

L'ho cambiato e l'ho messo "così com'è" e il risultato è lo stesso.

È necessario vedere i parametri di input, perché il log mostra che la rete a strascico funziona correttamente
 
Tretyakov Rostyslav #:
Abbiamo bisogno di vedere i parametri di input, perché secondo il log la rete a strascico funziona correttamente

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - copy: 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 - copy: 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;


forse ho messo la funzione nel codice in modo sbagliato?

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))); 
  }

e mettere la funzione stessa separatamente

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

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());
                 }
              }
           }
        }
     }
  }
 
законопослушный гражданин #:

ho messo la funzione nel codice in modo sbagliato?

e mettere la funzione stessa separatamente

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

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 traccia è corretta.

Prova così

 
Tretyakov Rostyslav #:

Il carrello sta in piedi correttamente.

Prova questo.

decollare nello spazio

stop si ferma prima, poi vola istantaneamente nello spazio insieme al take (chiudendo l'ordine durante il tragitto)

Non è questo il problema, come ho capito.

correggetemi se sbaglio: void OnTick()

se non ci sono ordini aperti e c'è un segnale, allora vOrderOpenBuy() / vOrderOpenSell()

Poi viene void vOrderModify(int iOTi) - cioè impostano stop e takei e poi controllano gli errori.

Cioè, finché l'ordine non si chiude allo stop o al take, non è possibile correggerlo in termini di trailing.

Avete bisogno di un (massimo due) multiplo di stop and take.

Se vuoi cambiare il trailing stop e prendere un profitto, allora dovresti farlo manualmente.

Sto ancora pensando a come implementarlo.

File:
111.mq4  25 kb