
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
Ciao DSC,
Ho capito. Molte grazie.
se c'è 100 bar, i tassi totali partono da 0 a 99.
All'inizio, pre_cal =0 --> limite=100 bar - 0 =100.
for(int=1 a limite=100; I++)
alla fine, I=100(valore dell'indice) e non c'è questa barra 100.
Pertanto, per rendere il massimo I=99, ho messo limite -1;
Mi chiedo se c'è un modo migliore.
Inoltre, ciò che mi confonde è che in molti altri indicatori, uso lo stesso approccio e non c'è questo problema di fuori range.
Inoltre, grazie per la scheda Expert.
SCFX
Inoltre, ciò che mi rende confuso è che in molti altri indicatori, uso lo stesso approccio e non c'è questo problema di out of range.
prima che B600 fuori portata non fosse un errore critico
Quindi, per rendere il max I=99, ho messo limite -1;
Mi chiedo se c'è un modo migliore.
Il tuo codice ora disegnerà la storia del grafico dalla barra 1 in su senza errori, ma non disegnerà per nessuna nuova barra. Ci sono molti modi per codificarlo a seconda di ciò che vuoi che faccia. Guardate gli indicatori inclusi in metaeditor per vedere come lo fanno i codificatori di MQ. Quando potrete leggere il loro codice e capire il motivo di ogni linea non avrete problemi a creare indicatori.
Ho capito ora DSC.
Personalmente parlando, è difficile da immaginare quando leggo il documento. Ancora non sono sicuro del perché prev_calculated= Total_rates -1.
Così faccio un esempio numerico qui. Spero che possa aiutare qualcuno nuovo come me.
Normalmente vediamo:
Limite= tariffe_totale- prev_calcolato; //(no-1)
O
for(i=1;i<limit;i++) o for(i=1;i<=limit;i++)
L'importante è assicurarsi che LIMIT >=1. Nella mia situazione, LIMIT=0 e quindi, l'indicatore non viene RIFESCIATO quando arriva un nuovo tick.
Perché, vediamo. (Penso che la causa sia il prev_calcolato, almeno nel mio caso)
Supponendo che io attacchi l'indicatore quando ci sono 100 barre sul grafico. Ecco i valori delle variabili:
Prima tabella dei valori
Variabile
Total_rates 100
Indice della barra 0-99
prev_calculato 0
Limite 100
Loop i valore 1-99
Tutto va bene. Il valore apparirà la prima volta dalla barra 1 all'inizio del grafico.Quante barre sono già state calcolate? È un punto critico per il mio errore e non sono chiaro al 100%.
Quando inizia una nuova barra, sul grafico ora ci sono 101 barre. L'indicatore non viene aggiornato sulla barra già chiusa, che ora è la barra 1.
Seconda tabella di valori
Variabile
Total_rates 101
Indice della barra 0-100
prev_calculated 99 OR 100 (vedi sotto)
Limite2 OR 1
Loop i valore 1to1 OR 1 to 0
In base alla 1a tabella, l'indicatore calcola 99 barre (dato che va in loop da 1 a 99).
Quindi la soluzione è abbastanza chiara: Fare for(i=1; ___ questo qui deve essere maggiore di 1 per (<) o maggiore o uguale a 1 per (<=)___; i++). Nel mio ultimo codice, è uguale a 0.Tuttavia, dal documento si legge: "MA se non è la prima chiamata di start(), verrà restituito il valore uguale a Bars-1".) Quindi restituirà 101-1=100.
Questa barra diversa causa problemi. Se il sistema restituisce 100 come prev_calculato.
Vedete che, se prev_calculated=99, il ciclo funzionerà.
Tuttavia, sembra che prev_calculated = 100 e quindi il ciclo non funzionerà come limite =0 o -1 dipende.
Qualcuno può aiutarmi a vedere la logica dietro il prev_calculated= Bars-1 in questo caso?
Spero che sia d'aiuto.
SCFX
prev_calculated == rates_total
Ora ho capito SDC.
Personalmente, è difficile da immaginare quando leggo il documento. Ancora non sono sicuro del perché prev_calculated = Total_rates -1.
SCFX
Create un nuovo indicatore, mettete questo codice nella funzione start, attaccatelo ad un grafico a 1 minuto e guardate gli avvisi quando arrivano i tick.
Vedrete che rates_total è l'attuale quantità di barre.
prev_calculated è la quantità di barre che c'erano al tick precedente.
prev_calculated == tassi_totale
Create un nuovo indicatore e mettete questo codice nella funzione start, collegatelo a un grafico a 1 minuto e guardate gli avvisi quando arrivano i tick.
Vedrete che rates_total è l'attuale quantità di barre.
prev_calculated è la quantità di barre che c'erano al tick precedente.
Wow, che strano.
Nel link postato prima, si dice che se :MA se non è la prima chiamata di start(), viene restituito il valore uguale a Bars-1.
Come mai restituisce Bars (Rate_totals).
Sì, lo so che lo dicono, ma non è del tutto accurato.
Quello che succede in realtà è questo.
rates_total == quantità totale di barre quando il tick corrente è arrivato. prev_calculated == quantità totale di barre quando il tick precedente è arrivato.
Quindi avete 3 stati principali di prev-calcolato vs rates_total. Indicatore caricato, tick di metà barra, primo tick della nuova barra.
prev_calculato == 0 alla prima esecuzione perché non c'è stato nessun tick precedente dal caricamento dell'indicatore.
Inoltre se il grafico viene cambiato o viene aggiunta la cronologia, prev_calculated si azzera di nuovo.
Il valore di ritorno da OnCalculate non è usato, ma è meglio usare il ritorno di default (rates_total) nel caso in cui lo sistemino.
So cosa dicono i nuovi documenti. Se lo fai a modo loro devi testare prev_calculated per non-zero e regolare rates_total - prev_calculated giù di uno. Questo è tornare a decrementare la confusione di indicator_counted.
Non ha senso fare return( rates_total - 1 ) il valore di prev_calculated è quello come se fosse return(rates_total) indipendentemente da quello che gli avete detto di restituire.