Удобство имеет большое значение в работе, а тем более в работе трейдера, где скорость и точность решают многое. При подготовке терминала к работе каждый настраивает своё рабочее место максимально комфортно для себя, чтобы в максимально короткий срок можно было совершить анализ и войти в рынок. Но реальность такова, что разработчики не могут...
Ho semplicemente scritto come ho impostato gli ordini pendenti nel visualizzatore.
Lo sto provando ora. Non volevo perdere tempo, non ho bisogno del pannello nel funzionamento del robot, mi serve solo per un test. Pertanto, non avevo intenzione di studiare l'argomento in dettaglio.
При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается.
Potete dirmi perché quando cambio il codice qui sotto da close[i-1] a close[i-2] si verifica l'Array of Range? Il codice è stato scritto seguendo rigorosamente il libro MQL5, ma non spiega perché il buffer viene superato quando il prezzo viene spostato di più di 2 celle.
{
int values_to_copy;
int start;
int calculated=BarsCalculated (iBands1_handle);
if (calculated <=0)
{
return (0);
}
if (prev_calculated==0 || calculated!=bars_calculated)
{
start=1;
if (calculated> rates_total) values_to_copy=rates_total;
else values_to_copy=calculated;
}
else
{
start=rates_total-1;
values_to_copy=1;
}
if(!FillArrayFrom_iBands1_handleBuffer(Base,Upper,Lower,iBands1_handle,values_to_copy)) return(0);
for (int i=start; i <rates_total &&!IsStopped ();i++)
{
Print("C ", close[i-2]);
}
Potete dirmi perché quando cambio il codice qui sotto da close[i-1] a close[i-2] si verifica l'Array of Range? Il codice è stato scritto seguendo rigorosamente il libro MQL5, ma non descrive perché il ritiro dal buffer avviene quando il prezzo è spostato di più di 2 celle.
Per quanto ho capito, stiamo parlando di un indicatore. Quindi, considerate due casi di accesso a una serie temporale di array"chiusa": (1) cosa succede quando"start" è uguale a "1" e (2) cosa succede quando"start" è uguale a "rates_total-1".
Calcolate nella vostra mente l'indice dell'array"close" risultante se provate a fare "close[i-2]" per il caso (1) e per il caso (2).
Capisco che stiamo parlando di un indicatore. Quindi, consideriamo due casi di accesso all'array di serie temporali"vicine": (1) cosa succede quando"start" è uguale a "1" e (2) cosa succede quando"start" è uguale a "rates_total-1".
Calcolate nella vostra mente l'indice dell'array"close" risultante se provate a fare "close[i-2]" per il caso (1) e per il caso (2).
Grazie, ho controllato, c'era bisogno di mettere un numero maggiore di 1 nel valore start = 1, il debug ha mostrato che l'errore si verifica quando l'array close cerca di prendere un valore da una cella che non è ancora apparsa all'inizio del ricalcolo.
Vorrei creare un array bidimensionale con i tempi di apertura e chiusura e la lunghezza delle candele, e sarebbe molto interessante. Voglio creare un EA basato su questo esempio usando la matematica superiore, cioè l'integrale triplo. assumiamo che x e y conoscano il prezzo e il tempo, troviamo z - in questo caso lo faccio io.
Un'altra domanda - se questo codice imposta la condizione che il prezzo di chiusura sarà superiore alla linea (supponiamo che questa condizione sia effettivamente prima dell'inizio del programma), il codice funziona come dovrebbe essere ma se aggiungiamo una condizione inversa, cioè diverse condizioni attuali prima dell'inizio del codice, i dati non saranno corretti dopo il debug. Per favore, consigliatemi perché succede? Dopo tutto, questo è solo un confronto in una dichiarazione di condizione, perché dovrebbe avere qualche effetto negativo sulle prestazioni del codice?
for (int i = start; i < rates_total &&!IsStopped ();i++)
{
if(close[i] > Upper[i])
Print("C ", close[i]);
Esempio: se
if(close[i] < Upper[i])
Il risultato del debug è il seguente:
I dati vanno correttamente, aggiornandosi alla stessa velocità con cui si aggiorna il prezzo
Ma se inizialmente impostiamo una tale condizione:
if(close[i] > Upper[i])
Allora il risultato sarà errato:
Cioè, i valori dei prezzi di chiusura non coincidono con il prezzo corrente
Purtroppo non ho trovato l'articolo, forse qualcun altro può suggerirlo.
Non sarai in grado di impostare gli ordini perché non sarai in grado di inserire il giusto prezzo di impostazione. Lo stesso vale per i lotti.
Ho impostato con il mouse.
Scommetto con il mouse.
Il pannello di controllo di questo articolo https://www.mql5.com/ru/articles/62 funzionerà nel tester (solo pulsanti)?
Il pannello di controllo di questo articolo https://www.mql5.com/ru/articles/62 funzionerà nel tester (solo pulsanti)?
Allora prova - cosa lo ferma?
Ho appena scritto come ho messo io stesso gli ordini pendenti nel visualizzatore.
Allora provaci - cosa ti ferma?
Ho semplicemente scritto come ho impostato gli ordini pendenti nel visualizzatore.
Lo sto provando ora. Non volevo perdere tempo, non ho bisogno del pannello nel funzionamento del robot, mi serve solo per un test. Pertanto, non avevo intenzione di studiare l'argomento in dettaglio.
Potete dirmi perché quando cambio il codice qui sotto da close[i-1] a close[i-2] si verifica l'Array of Range? Il codice è stato scritto seguendo rigorosamente il libro MQL5, ma non spiega perché il buffer viene superato quando il prezzo viene spostato di più di 2 celle.
{ int values_to_copy; int start; int calculated=BarsCalculated (iBands1_handle); if (calculated <=0) { return (0); } if (prev_calculated==0 || calculated!=bars_calculated) { start=1; if (calculated> rates_total) values_to_copy=rates_total; else values_to_copy=calculated; } else { start=rates_total-1; values_to_copy=1; } if(!FillArrayFrom_iBands1_handleBuffer(Base,Upper,Lower,iBands1_handle,values_to_copy)) return(0); for (int i=start; i <rates_total &&!IsStopped ();i++) { Print("C ", close[i-2]); }Potete dirmi perché quando cambio il codice qui sotto da close[i-1] a close[i-2] si verifica l'Array of Range? Il codice è stato scritto seguendo rigorosamente il libro MQL5, ma non descrive perché il ritiro dal buffer avviene quando il prezzo è spostato di più di 2 celle.
Per quanto ho capito, stiamo parlando di un indicatore. Quindi, considerate due casi di accesso a una serie temporale di array"chiusa": (1) cosa succede quando"start" è uguale a "1" e (2) cosa succede quando"start" è uguale a "rates_total-1".
Calcolate nella vostra mente l'indice dell'array"close" risultante se provate a fare "close[i-2]" per il caso (1) e per il caso (2).
Capisco che stiamo parlando di un indicatore. Quindi, consideriamo due casi di accesso all'array di serie temporali"vicine": (1) cosa succede quando"start" è uguale a "1" e (2) cosa succede quando"start" è uguale a "rates_total-1".
Calcolate nella vostra mente l'indice dell'array"close" risultante se provate a fare "close[i-2]" per il caso (1) e per il caso (2).
Grazie, ho controllato, c'era bisogno di mettere un numero maggiore di 1 nel valore start = 1, il debug ha mostrato che l'errore si verifica quando l'array close cerca di prendere un valore da una cella che non è ancora apparsa all'inizio del ricalcolo.
if(close[i] < Upper[i])Il risultato del debug è il seguente:
I dati vanno correttamente, aggiornandosi alla stessa velocità con cui si aggiorna il prezzo
Ma se inizialmente impostiamo una tale condizione:
if(close[i] > Upper[i])Allora il risultato sarà errato:
Cioè, i valori dei prezzi di chiusura non coincidono con il prezzo corrente
Non riesco a capire perché succede così.
Blocco di codice di base nel post#8792