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

 
Vitaly Muzichenko #:

Devi prendere in considerazione il costo dell'oggetto

Posso darvi il codice, ma ci vorrà molto tempo per capirlo, è grande, tiene conto anche del massimo lotto possibile sul margine

Se non posso farlo, farò domande))) Naturalmente bisogna tener conto del valore del punto e la formula non è una formula a 2 fasi. Ho difficoltà a non capire completamente i termini, e testare la correttezza delle ipotesi richiede tempo))) Il valore del contratto = il valore di un lotto in denaro giorno calcolato))))

 

Buon giorno, per favore consigliate come restituire un valore da una lista di costanti sotto forma di testo.

Per esempio, la funzione HistoryDealGetInteger restituisce il valore int della listaENUM_DEAL_TYPE quando richiede l'evento. Come possiamo ottenere informazioni dal numero restituito che è "DEAL_TYPE_CREDIT - credit accrual". Poi dopo il debug questo valore non sarà ovviamente necessario, int sarà sufficiente per elaborare l'evento, ma durante il debug non è affatto chiaro cosa significano i numeri 3 o 5 restituiti dalla funzione.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Свойства сделок - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Кирилл Якимов #:

Buon giorno, potreste per favore dirmi come restituire un valore come testo da una lista di costanti.

Per esempio, la funzione HistoryDealGetInteger restituisce il valore int della listaENUM_DEAL_TYPE quando richiede l'evento. Come possiamo ottenere informazioni dal numero restituito che è "DEAL_TYPE_CREDIT - credit accrual". Poi dopo il debug questo valore non sarà ovviamente necessario, int sarà sufficiente per elaborare l'evento, ma durante il debug non è affatto chiaro cosa significano i numeri 3 o 5 restituiti dalla funzione.

string s = EnumToString((ENUM_DEAL_TYPE) x)

 
Maxim Kuznetsov #:

string s = EnumToString((ENUM_DEAL_TYPE) x)

Grazie mille, mi ha aiutato.
 

Potete per favore dirmi come risolvere:

1) Non ho caricato la storia, nella finestra del grafico durante il processo online ho avuto il tempo di caricare 70 000 barre di minuti. Sto caricando il mio Expert Advisor nello Strategy Tester e nel caso in cui abbia scritto il numero minimo di barre per un certo pattern, mi risponde con "non ci sono abbastanza barre per l'analisi". Stampo iBars e dice 1200 barre. Ho caricato la storia (8 000 000 bar). Riavviato, le impostazioni mostrano le barre "9999999999" nella finestra e nella cronologia. Nova scrive "non abbastanza storia". Stampare le barre iBar, ancora 1200. cos'è questo e come risolverlo?

2) Nell'analisi multivaluta, come posso forzare l'indicatore a non perdere nuovi tick in arrivo su altre coppie di valute, se le quotazioni nel grafico corrente sono improvvisamente congelate e OnTick non chiama il controllo? Ho provato OnTimer ma non funziona nel tester

 
In questo script, sto sperimentando il ridimensionamento degli array dinamici che hanno diverse direzioni di indicizzazione - al fine di capire da che parte appaiono le nuove celle dopo aver aumentato la dimensione dell'array
void OnStart()
  {
   
   int a[], b[], size = 5, new_size = size + 5;
   
   if( ArraySize( a ) != size )
     ArrayResize( a, size, 0 );
   
   if( ArraySize( b ) != size )
     ArrayResize( b, size, 0 );
   
   if( ArrayGetAsSeries( a ) )
     ArraySetAsSeries( a, false );
   
   if( !ArrayGetAsSeries( b ) )
     ArraySetAsSeries( b, true );
   
   for( int i = 0; i < size; i++ )
     {
      a[i] = i;
      b[i] = i;
     };
   
   ArrayResize( a, new_size, 0 );
   ArrayResize( b, new_size, 0 );
   
   for( int i = 0; i < new_size; i++ )
     {
      Alert( "a", i, " ", a[i] );
      Alert( "b", i, " ", b[i] );
      Alert(" ");
     };
   
  }

Ed ecco il risultato


Si scopre che l'array b[] (che ha un'indicizzazione inversa) in qualche modo duplica i suoi valori dopo aver aumentato la dimensione

. Perché? Mi manca qualcosa o ho fatto qualche errore?
 
Alexandr Sokolov direzioni di indicizzazione - al fine di capire da che parte appaiono le nuove celle dopo aver aumentato la dimensione dell'array

E questo è il risultato


Si scopre che l'array b[] (che ha indicizzazione inversa) ha in qualche modo valori duplicati dopo aver aumentato la dimensione

Perché? Mi manca qualcosa o ho fatto qualche errore?

In ogni caso, non possiamo fare affidamento su nessun valore nelle nuove celle dell'array - queste sono variabili non inizializzate che possono contenere qualsiasi schifezza.

 
Alexandr Sokolov direzioni di indicizzazione - al fine di capire da quale lato appaiono nuove celle dopo aver aumentato la dimensione dell'array

E questo è il risultato


Si scopre che l'array b[] (che ha un'indicizzazione inversa) ha in qualche modo valori duplicati dopo aver aumentato la dimensione

Perché? Mi manca qualcosa o ho fatto qualche errore?

Dovete capovolgere l'array dopo che è stato riempito.

 
JRandomTrader #:

In ogni caso non possiamo fare affidamento su nessun valore nelle nuove celle dell'array - queste sono variabili non inizializzate che possono contenere qualsiasi schifezza.

Vero, ma ci sono 2 ma
1) Il mirroring si osserva a qualsiasi altra dimensione, non solo, come nel mio esempio - 5
2) Se un array ha un'indicizzazione inversa, allora le nuove celle dovrebbero apparire all'inizio dell'array - che non è il caso

 
Alexey Viktorov #:

Dovete capovolgere l'array dopo averlo riempito.

Ho pensato anche a questo - almeno non vedo altre soluzioni al momento