Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1257
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non è necessario scrivere questo codice in OnInit, ma in OnTick().
No, non puoi.
Non riesco a spiegare come.... modelli funzionano è così - finché non si chiama una tale funzione, il compilatore non sa nulla della sua esistenza (spesso, non ci sono nemmeno errori di compilazione se non c'è una chiamata)
poi si chiama una tale funzione template e il compilatore riempie i tipi necessari e solo allora controlla che tutto funzioni correttamente
e poi si fa un'altra chiamata al modello con diversi tipi di parametri - e il compilatore crea una nuova funzione, cioè una in più, cioè come se si scrivessero 2 funzioni, che fanno la stessa cosa, ma con diversi tipi di parametri
whew, ecco come funziona ))))
UPD:
è possibile, ma se i tipi nel template corrispondono, ecco un esempio, funziona correttamente:
Grazie, ancora più chiaro che nei docs) Si scopre che nel template la predefinizione delle variabili non permette di non specificarle. Ne ho bisogno per stampare su un file. Il registro non mi dà la possibilità di dividere i record. Vorrei che ci fossero 5 tronchi). Di conseguenza, i template danno un'opzione per non portare il tipo di variabile a quello desiderato, può essere fatto all'interno di una funzione template, ma il numero di variabili deve essere specificato per intero. Una semplice funzione con variabili predefinite del tipo richiesto dà la possibilità di specificare meno variabili in una chiamata, ma i tipi di variabili devono essere portati a quello giusto. Naturalmente, questo può essere fatto alla chiamata, ma la registrazione sarà troppo lunga.
Buon pomeriggio a tutti!
Ho creato una funzione per modificare lo stoploss. Ma quando funziona dà EURUSD,H1: OrderModify error 130.
E il prezzo è lontano dal luogo in cui lo stoploss dovrebbe essere impostato.
Ecco la funzione:
Prova in questo modo:
Grazie, ha funzionato!
Ma due sfumature in più:
1 quale condizione aggiungere per non chiudere gli ordini che sono stati aperti il venerdì della settimana corrente, e i venerdì delle settimane precedenti, rispettivamente, sono stati chiusi?
2. come correggere il codice - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
per rimuovere l'avviso"possibile perdita di dati a causa della conversione del tipo"? Sembra che si tratti di "...MarketInfo(nameSym,MODE_DIGITS)...".
Si prega di avvisare.
Nel tester, il valore di ritorno della funzione di somma dei lotti GetAmountLotFromOpenPos dà un valore di -1717986918.
Ho trovato la ragione. Avrei dovuto mettere OrderTakeProfit() in OrderModify invece di OrderProft(). L'ho guardato un po'.
Grazie per l'aiuto comunque.
Grazie, ha funzionato!
Ma due sfumature in più:
1 quale condizione aggiungere per non chiudere gli ordini che sono stati aperti il venerdì della settimana corrente, e i venerdì delle settimane precedenti, rispettivamente, sono stati chiusi?
2. come correggere il codice - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
per rimuovere l'avviso"possibile perdita di dati a causa della conversione del tipo"? Deve trattarsi di "...MarketInfo(nameSym,MODE_DIGITS)...".
Per la prima domanda, dovete fare questa funzione:
{Print("Errore durante la selezione dell'ordine", GetLastError();}
Per la seconda domanda, ci dovrebbe essere la seguente voce:
OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE);
Buona fortuna.