- Caratteristiche del linguaggio mql5, sottigliezze e tecniche
- Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici
- Errori, bug, domande
Per chiudere un ordine, non devi affatto definire il tipo di ordine e il prezzo corrispondente a quel tipo. È sufficiente scrivere OrderClosePrice()
void OnStart()
{
int i, total = OrdersTotal()-1;
for(i = total; i >= 0; i--)
{
if(OrderType() < OP_SELLSTOP)
{
if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100))
printf("***********");
}
}
}/********************************************************************/
Ci sono molte altre imprecisioni nella guida. PrendeteSetIndexBuffer(), per esempio.Cosa c'è di sbagliato nell'aiuto?
"Parametri
indice
[in] Numero del buffer dell'indicatore. La numerazione inizia con 0. Il numero deve essere inferiore al valore dichiarato nella #proprietà indicator_buffers". (questa affermazione non è vera)
La #proprietà indicator_buffers specifica il numero di buffer da visualizzare. Forse ciò che l'aiuto intende, anche se non l'ho verificato, è che i buffer usati per il calcolo non hanno bisogno di ricevere un numero da SetIndexBuffer(). Ma quello che ho verificato è che se al buffer usato per il calcolo viene dato un numero con SetIndexBuffer(), il suo valore può essere recuperato tramite iCustom().
Dal momento che gli sviluppatori stanno visitando il thread - c'è una domanda su "sottigliezze e trucchi":
Esempio di una stampa formattata: PrintFormat("Bid=%.5f", Bid)
Domanda: c'è un modo, invece di una precisione fissa (qui5), di specificare una condizione nella descrizione del formato in modo che la precisione dipenda da _Digits? Per fare a meno del 'preprocessing' come PrintFormat("Bid=%s", DoubleToString(Bid, _Digits))
In MQL4 lo stesso codice può dare risultati diversi a seconda dello stato della #proprietà strict. Ed è qui che la compilazione ha successo in entrambi i casi. Quindi, se l'esecuzione è "sconclusionata", si può cercare la causa nel posto sbagliato (severo) per molto tempo.
Domanda: invece di una precisione fissa (qui5), è possibile specificare una condizione nella descrizione del formato in modo che la precisione dipenda da _Digits?
- www.mql5.com
Описание проблемы
Sto scrivendo un indicatore in MQL4. Ho affrontato una caratteristica non documentata dello stile DRAW_HISTOGRAM.
Per visualizzare i valori sul grafico, ho bisogno di due buffer: per il valore superiore dell'istogramma e per quello inferiore. Quando si mappano i buffer dell'array di indicatori, se i buffer per lo stile avranno i valori 0 e 1, 2 e 3, 4 e 5, ecc. tutto viene visualizzato normalmente. Tuttavia, se ai buffer di stile sono assegnati valori che iniziano con OTHER, cioè 1 e 2, 3 e 4, 5 e 6, le linee dell'istogramma non saranno visualizzate correttamente nel grafico, anche se i valori nella finestra dei dati saranno corretti.
Si prega di aggiungere una menzione di questa peculiarità alla documentazione, o di correggerla, perché non è sempre il caso che la descrizione dello stile DRAW_HISTOGRAM inizi con un buffer pari!
Forum sul trading, sistemi di trading automatico e test di strategie di trading
-Aleks-, 2017.02.07 18:21
Potete consigliarmi, per favore, se in un Expert Advisor MT4, se un indicatore personalizzato con più di un buffer grafico è costantemente chiamato, allora il ricalcolo avviene ad ogni chiamata o tutti i buffer sono calcolati in una volta sola e si può fare riferimento all'indicatore nel codice molte volte e non aspettarsi che ci sia uno spreco di risorse. Sono anche interessato a sapere cosa succede se il codice non viene completato (gira più di un tick), ma il valore dell'indicatore cambia.
Forum sul trading, sistemi di trading automatico e test di strategia
Slawa, 2017.02.08 08:20
Tutti i buffer sono calcolati in una volta sola. Interrogare tranquillamente i valori dell'indicatore - non ci sarà nessun ricalcoloIn MT4 l'indicatore chiamato dall'Expert Advisor lavora nel flusso di questo EA e su una copia dei suoi dati storici. Puoi mettere in loop l'Expert Advisor, ma allo stesso tempo riceverai i dati dell'indicatore calcolati al momento della chiamata OnTick. Finché non si chiama RefreshRates. RefreshRates aggiorna i dati storici dell'Expert Advisor, dopo di che tutti i suoi dati saranno ricalcolati alla prima chiamata dell'indicatore
Per chiudere un ordine, non è necessario specificare il tipo di ordine e il prezzo corrispondente a questo tipo. È sufficiente scrivere chiudere al prezzo OrderClosePrice()
Quindi, potete usare OrderClosePrice solo DOPO il corrispondente OrderSelect. Perché OrderSelect copia i dati per le funzioni Order(const)- una volta, e lo stesso RefreshRates non è in grado di aggiornarli.
Cioè se, per esempio, OrderClosePrice non riesce a chiudere, allora bisogna rifare OrderSelect prima del prossimo tentativo (RefreshRates non è necessario).
ZS Questo thread è del 2005! Ecco gli argomenti dettagliati degli sviluppatori.
È un peccato...
---
In modo che il post non sia inutile:
invece di StringGetCharacter("a", 0) si può scrivere solo 'a'- spesso necessario quando si analizzano le stringhe in parti con StringSplit
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso