Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 481

 
Ciao!

Qualcuno ha un esempio di codice che disegna alcune icone, per esempio frecce sul grafico dell'indicatore, quando le linee si incrociano, se ce ne sono due, o quando la linea "0" è attraversata, o qualsiasi altro criterio? Preferibilmente nella parte superiore e inferiore della finestra dell'indicatore di autoscala.
 
Sergei Vladimirov:
Premere "Load". Solo le ultime 2048 barre sono caricate automaticamente, il resto deve essere calciato.
Questo è come è venuto fuori dopo "Load" ...
 
Mike:
È così che è venuto fuori dopo "Load" ...
Cancellare forzatamente la cartella dell'archivio storico ed eseguire il terminale - poi scaricare tutte le citazioni.
 
Leo59:
Ciao!

Forse qualcuno ha un codice di esempio che disegna alcune icone, come le frecce sul grafico dell'indicatore, quando si attraversano le linee, se ce ne sono due, o quando si attraversa la linea "0", o qualsiasi altro criterio? Preferibilmente nella parte superiore e inferiore della finestra dell'indicatore di autoscala.

Ecco uno dei miei tacchini, forse può aiutare. Il codice è per MT4, così com'è. Funziona anche con i registri.

void PlotArrowUP(int i)
{
    string sup = "\xE9"; //233
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen); //настроить масштаб под свои нужды
    ObjectCreate("arr1"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]-dprice);   
    ObjectSetText("arr1"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowUp);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowUp(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}

void PlotArrowDown(int i)
{
    string sup = "\xEA"; //234
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen);
    dprice*= 2.0;
    ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);   
    ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowDown(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}
 
Alexey Volchanskiy:

Вот из моего индюка, может, поможет. Код для МТ4, выкладываю, как есть. Там еще работа с логами.

Grazie Alexey per il tuo feedback!

Nel tuo esempio è attraverso gli oggetti. Mi chiedo se è possibile farlo attraverso gli array, in modo che quando cambio scala, sono sempre ai confini superiore e inferiore della finestra?
 
Leo59:
Alexey Volchanskiy:
Grazie Alexey per il tuo feedback!

Nel vostro esempio, è attraverso gli oggetti. Mi chiedo se è possibile farlo attraverso gli array, in modo che quando cambio scala, sono sempre nella parte superiore e inferiore della finestra?

Non capisco gli array. Vedi i commenti, ho aggiunto

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);
// "arr0"+ArrowIdx - формируем уникальное имя стрелки
// FastBuffer[i]+dprice - тут формируется цена, на которой будет рисоваться стрелка
   
ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
ArrowIdx++; // для каждой стрелки нужно уникальное имя

Inoltre, se avete bisogno di disegnare sul bordo superiore, fate come segue

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, ChartGetDouble(0,CHART_PRICE_MAX,0); 

Leggete l'aiuto dell'editor; è descritto qui in dettaglio con esempi

Riferimento MQL4 / Costanti, enumerazioni e strutture standard / Costanti del grafico / Esempi di lavoro con i grafici

 
Alexey Volchanskiy:

Non capisco gli array. Vedi i commenti, ho aggiunto

Inoltre, se avete bisogno di disegnare sul bordo superiore, fate come segue

Leggete l'aiuto dell'editor; è descritto qui in dettaglio con esempi

Riferimento MQL4 / Costanti, enumerazioni e strutture standard / Costanti del grafico / Esempi di lavoro con i grafici

Cambiare

WindowPriceMax() и WindowPriceMin()

Gli oggetti dovrebbero essere forzatamente ridisegnati a una data distanza dai bordi della finestra

 
Leo59:

Con il cambiamento

gli oggetti dovranno essere forzati ad essere ridisegnati ad una data distanza dai bordi della finestra

I vecchi oggetti rimarranno al loro posto - ai vecchi prezzi. Se avete bisogno di spostarli ai confini, dovrete ridisegnarli manualmente. Non conosco completamente il tuo problema.

Potete usare OnChartEvent per tracciare i cambiamenti della finestra.

 
Alexey Volchanskiy:

I vecchi oggetti rimarranno al loro posto - ai vecchi prezzi. Se hai bisogno di spostarli ai confini, devi ridisegnarli a mano. Non conosco completamente il suo compito.

Potete usare OnChartEvent per tracciare i cambiamenti della finestra.

A prima vista, sembra un compito semplice. MA! ....
C'è una linea di qualsiasi oscillatore nella finestra dell'indicatore, che si sta muovendo relativamente "0" con diversa ampiezza.
Il problema reale è:
- All'incrocio "0" dal basso verso l'alto, disegnate una freccia sul bordo inferiore della finestra dell'indicatore,
- A "0" attraversando dall'alto verso il basso, per disegnare una freccia vicino al bordo superiore della finestra dell'indicatore,
- all'autoscala del grafico dell'oscillatore nella finestra dell'indicatore, le frecce dovrebbero rimanere automaticamente ai loro bordi della finestra dell'indicatore.
Cioè, scorrendo il grafico avanti e indietro nella storia o cambiando la sua scala orizzontale, le frecce rimangono sempre ai confini della finestra dell'indicatore.
 
Leo59:
A prima vista, il compito sembra semplice come tre copechi. MA! ....
C'è una linea di qualsiasi oscillatore nella finestra dell'indicatore, che ruota relativamente "0" con diversa ampiezza.
Il problema reale è:
- All'incrocio "0" dal basso verso l'alto, disegnate una freccia sul bordo inferiore della finestra dell'indicatore,
- A "0" attraversando dall'alto verso il basso, per disegnare una freccia vicino al bordo superiore della finestra dell'indicatore,
- all'autoscala del grafico dell'oscillatore nella finestra dell'indicatore, le frecce dovrebbero rimanere automaticamente ai loro bordi della finestra dell'indicatore.
Cioè, scorrendo il grafico avanti e indietro nella storia o cambiando la sua scala orizzontale, le frecce rimangono sempre ai confini della finestra dell'indicatore.

Il compito è ed è abbastanza semplice.

Quando la finestra viene modificata o fatta scorrere, viene chiamatoOnChartEvent, che passa un evento senza parametri:

CHARTEVENT_CHART_CHANGEevento di cambiamento del grafico

Se questo evento si verifica, determiniamo la barra visibile a sinistra e a destra ed entro questi limiti troviamo tutte le frecce nella finestra dell'indicatore. Se viene trovato, lo spostiamo al confine necessario. Quando create le frecce, date loro nomi come UpArrow***** e DownArrow***** per evitare problemi relativi all'analisi. Poi, per sicurezza, chiamate ChartRedraw.

Motivazione: