Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 364

 
bercut0077:
Buon giorno, c'è un indicatore, ma nel tester dopo un certo periodo dall'inizio dell'anno a marzo funziona e poi smette di dare segnali, e ho bisogno di testare un lungo periodo (AuthorizedSSBODynamicBreakoutBoxFinalEdition), dove nel codice può essere questa limitazione - si prega di dare almeno una punta dove scavare, quali operatori lo determinano?
A volte ha dei glitch. Smette semplicemente di disegnare la scatola. Non ci sono restrizioni da nessuna parte. Prova il potikovo. A volte aiuta.
 
Sepulca:
Avete il codice sorgente dell'indicatore? In caso contrario, cercate l'autore))))

Ho il codice sorgente - è un casino.
 
No, non ci proverò nemmeno allora. A volte ci si perde nel proprio codice, figuriamoci in quello di qualcun altro))))
 

Come dirmi per favore qualche Expert Advisor provato in MQL4 e 5, e il tempo è molto breve, a volte è necessario controllare un'idea o aiutare qualcuno a creare finalmente una base per il robot e per finire di scriverlo voi stessi ...

Sarei grato, grazie in anticipo!!! =)

 
vadynik:

Sto scrivendo una funzione come questa

Ma perché OrderOpenPrice() restituisce il prezzo arrotondato a quattro cifre sulle cinque cifre?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
Provate a fare questo e vedere cosa restituisce realmente OrderOpenPrice(), forse la ragione è che state normalizzando la funzione con il parametro Digits e vedete nella stampante non quello che è realmente.
 
vadynik:

Sto scrivendo una funzione come questa

Ma perché OrderOpenPrice() restituisce il prezzo arrotondato a quattro cifre decimali?

Print non restituisce un prezzo arrotondato, in questo caso, emette semplicemente il numero predefinito di cifre decimali.
In realtà, Forex non funziona con decimali inferiori alle cifre. In generale, usando l'esempio di EURSD è solo quattro decimali, e anche il quinto decimale è un'idea delle società di brokeraggio.

Ma nel vostro caso è meglio fare così: Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg:

Provate a farlo e vedete cosa restituisce realmente OrderOpenPrice(), forse la ragione è che normalizzate la funzione con il parametro Digits e vedete nella stampante non quello che è realmente.

È lo stesso senza normalizzazione, ho bisogno di sottrarre punti dal prezzo di apertura, se è così il prezzo è quello che mi serve, ma poi ottengo un type mismatch in IF(
Print(DoubleToStr(OrderOpenPrice(),Digits));
 
vadynik:

Ho bisogno di sottrarre punti dal prezzo di apertura, e se è così, il prezzo è quello di cui ho bisogno, ma poi ottengo un mismatch di tipo in IF (

Fai i calcoli in quattro cifre. Se la precisione è importante per te, allora rimetti il valore dell'ultima cifra, dato che non cambia durante i calcoli a causa della natura dei calcoli.
 
Ekburg:

Fate i calcoli come per quattro cifre, e se la precisione è importante per voi, allora riportatela al suo posto, con il valore dell'ultima cifra che era prima, perché non cambia durante i calcoli, a causa delle specifiche dei calcoli.
La normalizzazione è necessaria solo in Ordersend, orderclose etc. Bene e ancora al confronto di valori reali e nelle stampanti specificare qualsiasi quantità di segni dopo un punto decimale. Ma se scrivete semplicemente Print(whatever_double_value), di solito stamperà quattro cifre decimali. Pertanto, il modo corretto di farlo è scrivere
Print(DoubleToStr(OrderOpenPrice(),Digits));

Come già detto, prima convertite il doppio in una stringa con il numero di decimali specificato e poi stampatelo nel log usando Print....
 
E se i punti vengono calcolati, non confonderli con i punti. Diciamo che il doppio SPRED=punti Ask-Bid, o anche che il doppio SPRED=(Ask-Bid)/punti.