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

 
Alexey Viktorov:

Proprio così.

Grazie, proprio quello di cui ho bisogno!

 

Buon pomeriggio!

Potresti per favore dare un consiglio su questo problema?

Piazzo un ordine in sospeso:

bool send1=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,NULL,MagicNumber,0,clrGreen);

E poi cerco di fare un trailing stop su di esso dopo l'apertura:

 {
 for(int i=0; i<OrdersTotal(); i++) 
  {
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  if(OrderType()==OP_BUY)
   {
  if(TrailingStop>0)  
    {                 
  if(Bid-OrderOpenPrice()>TrailingStop)
     {
  if(OrderStopLoss()<Bid-TrailingStop)
      {
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,clrRed);
      }
     }
    }
   }
  }
 }

Dopo la sua apertura l'ordine diventa OP_BUY? Qual è il trucco, perché il trailing non funziona in questo caso?

 
YanSay:

Buon pomeriggio!

Potresti per favore dare un consiglio su questo problema?

Piazzo un ordine in sospeso:

E poi cerco di fare un trailing stop su di esso dopo l'apertura:

Dopo la sua apertura l'ordine diventa OP_BUY? Qual è il trucco, perché il trailing non funziona in questo caso?

100500 motivi. Il 1° ovvio è che Bid-TrailngStop non è normalizzato. Potrebbe essere ancora più vicino al livello dello stopplevel e quindi anche opaco.
 
YanSay:

Buon pomeriggio!

Potresti per favore dare un consiglio su questo problema?

Piazzo un ordine in sospeso:

E poi cerco di fare un trailing stop su di esso dopo l'apertura:

Dopo la sua apertura l'ordine diventa OP_BUY? Qual è il trucco, perché il trailing non funziona in questo caso?

TrailingStop in pip? Moltiplicare per Point allora.
 

Ho fatto la domanda sbagliata, scusate. Preso fuori contesto.

Soprattutto per testare il codice di trailing, i trade si aprono, ma il trailing non funziona, non importa come l'ho girato, stallo(

//Вводные
#define  MagicNumber 150
double SL=0;                        //Stop Loss
input int Trailing=100;             //Трэйлинг

//Код

void OnTick()
{
 if (OrdersTotal()==0)
 {
   if(TimeCurrent()>StrToTime("17:59")&&TimeCurrent()<StrToTime("18:01"))
  {
SL = Low[1]-Point; //Стоп лосс
bool send1=OrderSend (Symbol(), OP_BUY,1,Bid,30,SL,0,NULL,MagicNumber,0,clrNONE);
  }
 }
 if (OrdersTotal()>0)
   {
      for (int i=0; i<OrdersTotal (); i++)
    {
   bool select1=OrderSelect (i, SELECT_BY_POS);
   if (OrderMagicNumber() == MagicNumber && OrderSymbol () == Symbol())
     {
   if (OrderType()==OP_BUY)
      {
     if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))
     bool modify1=OrderModify (OrderTicket(),0,Ask-Trailing,OrderTakeProfit(),0,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay:

Ho fatto la domanda sbagliata, scusate. Preso fuori contesto.

Soprattutto per testare il codice di trailing, i trade si aprono, ma il trailing non funziona, non importa come l'ho girato, stallo(

Ho risposto alla tua domanda sopra.
 
Vladislav Andruschenko:
Ho risposto alla tua domanda sopra.
Grazie mille, mi ha aiutato!
 
YanSay:
Grazie mille, mi ha aiutato!

Lì avete ancora problemi.

Il ciclo è in avanti, dovrebbe essere inverso - in avanti salterà le posizioni dopo che una di esse si chiude sulla rete a strascico

Non c'è controllo per la distanza minima dello stop (StopLevel) - ci saranno errori di modifica se lo stop è più vicino al prezzo della distanza minima consentita (non dimenticare lo spread fluttuante)

Forse qualcos'altro - guardato in diagonale - di sfuggita, visto che ti è già stato detto.

ZS. Ha guardato di nuovo:

if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))

questo è il tipo di controllo che manca il punto stesso del controllo con la normalizzazione, poiché avete normalizzato entrambi i valori e quando controllate, il risultato non è normalizzato di nuovo.

Dovete controllare la differenza normalizzata dei due valori doppi. State confrontando due valori normalizzati.

 
Artyom Trishkin:

Hai ancora problemi lì.

Il ciclo è in avanti; deve essere inverso - con un ciclo in avanti le posizioni saranno saltate dopo che una di esse si chiude sulla rete a strascico

Non c'è controllo per la distanza minima dello stop (StopLevel) - ci saranno errori di modifica se lo stop è più vicino al prezzo della distanza minima consentita (non dimenticare lo spread fluttuante)

Forse qualcos'altro - guardato in diagonale - di sfuggita, visto che ti è già stato detto.

ZS. ha guardato di nuovo:

questo è il tipo di controllo che manca il punto stesso del controllo con la normalizzazione, poiché avete normalizzato entrambi i valori e quando controllate, il risultato non è normalizzato di nuovo.

Dovresti controllare la differenza normalizzata di due valori doppi. State confrontando due valori normalizzati.

Come questo?

for (int i = OrdersTotal() - 1; i >= 0; --i)
if (NormalizeDouble((Ask-OrderStopLoss()>Trailing*Point),Digits))
 
the size of local variables is too large (more than 512 kb)
Cosa significa l'errore?


Ho una funzione con due oggetti:

bool              CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                      int dir);

Una delle classi ha una struttura con più di 4000 campi (soprattutto enum).

Cosa fare con questo errore?