Se dici che è brutto, dimmi come renderlo buono. Spostare i calcoli a OnInit?
Giusto rimprovero )) Qui, una variante del codice che è stato pubblicato qui:
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i,limit;
if(prev_calculated == 0) {
limit = rates_total - 1; //--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
}
else limit = rates_total - prev_calculated + 1;
for(i = limit; i >= 0; i--) { //--- В этом цикле основные вычисления. Таким образом обрабатываться будет только "свежая" информация
}
return(rates_total);
Prova a farlo in questo modo. Non c'è bisogno di spostare nulla in OnInit.
Non ho pubblicato tale codice qui - non è il mio genere :)
Io uso altre costruzioni - più semplici e più chiare.
È mio, come potrebbe essere più semplice? ))) (almeno, ho anche nel mio modello il commentolimit = rates_total - 1;//--- Prima chiamata dell'indicatore o cambiamento di timeframe o caricamento di dati dalla storia) e il mio stile di formattazione - una parentesi graffa vicino a for() {
Per imparare a scrivere il tuo indicatore, prendi il modello di cui sopra e aggiungi almeno il prezzo di chiusura e ottieni il tuo primo indicatore, poi impara a fare il MAH da questo prezzo di chiusura
for(i = limit; i >= 0; i--) { //--- В этом цикле основные вычисления. Таким образом обрабатываться будет только "свежая" информация
Buffer[i] = close[i];
}
Non è il tuo codice. È stato pubblicato da alcuni miei colleghi, ma non ricordo chi e dove. Era questo codice che intendevo quando ho scritto che nulla dovrebbe essere spostato a OnInit ma non il codice sorgente. Non sono stato molto chiaro.
E quale costruzione consiglieresti? Questo sembra essere molto semplice.
Ah, ecco l'autore del pezzo )))) Davanti a me. A proposito, anch'io uso questo stile di formattazione - con una parentesi graffa aperta in una riga.
Andrei Novichkov: Ah, ecco l'autore del frammento )))) Davanti a me. A proposito, anch'io uso questo stile di formattazione - con una parentesi graffa aperta in una riga.
Si esegue la procedura guidata per la creazione di un indicatore, si selezionano i tipi e i colori delle linee e si aggiungono gli input, se necessario
e questo è tutto, l'indicatore è pronto, quindi copiateil corpo daltemplate OnCalculate() e scrivete i calcoli ,
puoi scrivere il tuo primo indicatore in 1 minuto, il codice "Ciao parola I indicatore! - Ho mostrato :)
ZS: A proposito, gli indicatori possono essere trasferiti da MT4 a MT5 in questa forma, la cosa principale è impostare correttamente i buffer degli indicatori, in MT5 c'è un creep nell'indicizzazione degli array sotto i buffer.... sono solo array con il solito array )))) indicizzazione .... prima era difficile abituarsi all'indicizzazione dei buffer degli indicatori in MT4, ora al contrario è impossibile abituarsi e passare a MT5 ))))
Questo non è il vostro codice. È stato pubblicato da uno dei miei colleghi, ma non ricordo chi e dove. Era questo codice che intendevo quando ho detto che nulla dovrebbe essere spostato a OnInit ma non il codice sorgente. Non sono stato molto chiaro.
E quale costruzione consiglieresti? Questo sembra essere molto semplice.
Ah, ecco l'autore del pezzo )))) Davanti a me.
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)if(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.if(limit>1)
// если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории// если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,// при подгрузке истории и на первом запуске - перерасчёт всей истории
{
limit=rates_total-1;
// здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
// необходимые действия по расчёту индикатора
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
sì, a cosa serve il codice del modello di indicatore? eseguire la procedura guidata per creare un indicatore , scegliere i tipi e il colore delle linee e, se necessario, aggiungere gli input
e il gioco è fatto, l'indicatore è pronto, quindi copia il corpo dal modello OnCalculate()e scrivi i calcoli,
puoi scrivere il tuo primo indicatore in 1 minuto, il codice sopra è "Hello word I indicator!!!" Ho mostrato :)
PS: a proposito, in questa forma, gli indicatori possono essere trasferiti da MT4 a MT5, l'importante è impostare correttamente i buffer degli indicatori, in MT5 c'è un orrore che con gli array di indicizzazione per i buffer .... sono solo array con il solito array)))) indicizzazione .. .. prima era difficile abituarsi all'indicizzazione dei buffer degli indicatori in MT4, ora invece è impossibile abituarsi e passare a MT5))))
Niente di complicato. Un esempio di indicatore multipiattaforma (usa una classe), ma il modello può essere estratto - rimuovi la classe e tutto ciò che è superfluo che darà errori dopo - il modello multipiattaforma rimarrà.
Questo indicatore funzionerà allo stesso modo su entrambe le piattaforme senza modifiche: basta compilare con l'estensione richiesta. Ho dovuto dividere il codice in due parti: la classe e l'indicatore stesso (tutto era in un elenco)
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Come creare un array di istanze di classe?
Ho fatto ClassName* className[], poi ArrayResize su di esso, ma non mi dà accesso ai metodi
La vostra classe, le cui istanze volete raccogliere in un array, deve essere ereditata da CObject.
E poi è semplice: create una lista (array) di oggetti CArrayObj, e aggiungeteci i vostri oggetti.
Cercando le parole "indicator template" e il tuo nome non si trova nulla, e tu hai già scritto qui su quel volume di Guerra e Pace.
Mi viene in mente qualsiasi combinazione di parole del post.
Beh, mi dispiace, per quanto riguarda il template dell'indicatore forse ho fatto confusione - il template a strascico è stato postato.
Mettiamola così: create un modello di indicatore nell'editor, aggiungete il numero richiesto di variabili di input e di buffer da disegnare.
Successivamente, suddividete ciò che dovete fare dal compito specifico.
Se dici che è brutto, dimmi come renderlo buono. Spostare i calcoli a OnInit?
Giusto rimprovero )) Qui, una variante del codice che è stato pubblicato qui:
Prova a farlo in questo modo. Non c'è bisogno di spostare nulla in OnInit.
Giusto rimprovero )) Qui, una variante del codice che è stato pubblicato qui:
Prova a farlo in questo modo. Non c'è bisogno di spostare nulla in OnInit.
Non ho pubblicato tale codice qui - non fa per me :)
Io uso altre costruzioni - è più semplice e più chiaro.
In OnInit() dovrebbe essere trasferito. Perché avete bisogno di assegnare un array al buffer dell'indicatore su ogni tick?
Non ho pubblicato tale codice qui - non è il mio genere :)
Io uso altre costruzioni - più semplici e più chiare.
È mio, come potrebbe essere più semplice? ))) (almeno, ho anche nel mio modello il commentolimit = rates_total - 1;//--- Prima chiamata dell'indicatore o cambiamento di timeframe o caricamento di dati dalla storia) e il mio stile di formattazione - una parentesi graffa vicino a for() {
Per imparare a scrivere il tuo indicatore, prendi il modello di cui sopra e aggiungi almeno il prezzo di chiusura e ottieni il tuo primo indicatore, poi impara a fare il MAH da questo prezzo di chiusura
Non ho pubblicato tale codice qui - non è il mio genere :)
Uso costruzioni diverse - più semplici e più chiare.
Niente deve essere copiato in OnInit(). Perché dovrei assegnare un array al buffer dell'indicatore ad ogni tick?
Non è il tuo codice. È stato pubblicato da alcuni miei colleghi, ma non ricordo chi e dove. Era questo codice che intendevo quando ho scritto che nulla dovrebbe essere spostato a OnInit ma non il codice sorgente. Non sono stato molto chiaro.
E quale costruzione consiglieresti? Questo sembra essere molto semplice.
Ah, ecco l'autore del pezzo )))) Davanti a me. A proposito, anch'io uso questo stile di formattazione - con una parentesi graffa aperta in una riga.Ah, ecco l'autore del frammento )))) Davanti a me. A proposito, anch'io uso questo stile di formattazione - con una parentesi graffa aperta in una riga.
Si esegue la procedura guidata per la creazione di un indicatore, si selezionano i tipi e i colori delle linee e si aggiungono gli input, se necessario
e questo è tutto, l'indicatore è pronto, quindi copiateil corpo daltemplate OnCalculate() e scrivete i calcoli ,
puoi scrivere il tuo primo indicatore in 1 minuto, il codice "Ciao parola I indicatore! - Ho mostrato :)
ZS: A proposito, gli indicatori possono essere trasferiti da MT4 a MT5 in questa forma, la cosa principale è impostare correttamente i buffer degli indicatori, in MT5 c'è un creep nell'indicizzazione degli array sotto i buffer.... sono solo array con il solito array )))) indicizzazione .... prima era difficile abituarsi all'indicizzazione dei buffer degli indicatori in MT4, ora al contrario è impossibile abituarsi e passare a MT5 ))))Questo non è il vostro codice. È stato pubblicato da uno dei miei colleghi, ma non ricordo chi e dove. Era questo codice che intendevo quando ho detto che nulla dovrebbe essere spostato a OnInit ma non il codice sorgente. Non sono stato molto chiaro.
E quale costruzione consiglieresti? Questo sembra essere molto semplice.
Ah, ecco l'autore del pezzo )))) Davanti a me.sì, a cosa serve il codice del modello di indicatore? eseguire la procedura guidata per creare un indicatore , scegliere i tipi e il colore delle linee e, se necessario, aggiungere gli input
e il gioco è fatto, l'indicatore è pronto, quindi copia il corpo dal modello OnCalculate() e scrivi i calcoli,
puoi scrivere il tuo primo indicatore in 1 minuto, il codice sopra è "Hello word I indicator!!!" Ho mostrato :)
PS: a proposito, in questa forma, gli indicatori possono essere trasferiti da MT4 a MT5, l'importante è impostare correttamente i buffer degli indicatori, in MT5 c'è un orrore che con gli array di indicizzazione per i buffer .... sono solo array con il solito array)))) indicizzazione .. .. prima era difficile abituarsi all'indicizzazione dei buffer degli indicatori in MT4, ora invece è impossibile abituarsi e passare a MT5))))Niente di complicato. Un esempio di indicatore multipiattaforma (usa una classe), ma il modello può essere estratto - rimuovi la classe e tutto ciò che è superfluo che darà errori dopo - il modello multipiattaforma rimarrà.
Questo indicatore funzionerà allo stesso modo su entrambe le piattaforme senza modifiche: basta compilare con l'estensione richiesta. Ho dovuto dividere il codice in due parti: la classe e l'indicatore stesso (tutto era in un elenco)
Classe:
Indicatore: