Ora non capisco una cosa, devo creare 2 buffer per avere High & Low di un altro periodo nell'indicatore????
e nell'articolo
perché le funzioni non funzionano correttamente, ad es:
//+------------------------------------------------------------------+
//| Ottenere il massimo per un dato numero di barra|
//+------------------------------------------------------------------+
doubleiHigh(stringsymbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
intcopiato=CopyHigh(simbolo,timeframe,0,Barre(simbolo,timeframe),High);
if(copiato>0 && indice<copiato) high=High[indice];
return(high);
}
Cosa significa "sbagliato"? Dovreste fornire esempi concreti invece di affermazioni generiche "tutto è sbagliato".
Provate a eseguire l'esempio della sezione CopyHigh():
//+------------------------------------------------------------------+
//|Alto e basso.mq5 |
//| Copyright 2009, MetaQuotes Software Corp. | |
//| http://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property description "Esempio di output dei valori High[i] e Low[i]"
#property description "per barre selezionate a caso".
double High[],Low[];
//+------------------------------------------------------------------+
//|| Ottenere il livello basso per un dato numero di barre.
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double low=0;
ArraySetAsSeries(Low,true);
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
return(low);
}
//+------------------------------------------------------------------+
//| Ottenere il massimo per un determinato numero di barre.
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
//+------------------------------------------------------------------+
//| Funzione tick dell'esperto|
//+------------------------------------------------------------------+
void OnTick()
{
//--- visualizzare i valori alti e bassi della barra con l'indice ad ogni tick,
//--- pari al secondo di arrivo del tick
datetime t=TimeCurrent();
int sec=t%60;
printf("High[%d] =%G Low[%d] =%G",
sec,iHigh(Symbol(),0,sec),
sec,iLow(Symbol(),0,sec));
}
//+------------------------------------------------------------------+
Questo è ciò che ho ottenuto, mostra tutto correttamente.

Cosa significa "sbagliato"? Dovreste fornire esempi concreti invece di affermazioni generiche "tutto è sbagliato".
Provate a eseguire l'esempio della sezione CopyHigh():
Questo è ciò che ho ottenuto, mostra tutto correttamente.
Mi scuso per l'aspecificità delle affermazioni.
Mi sembra che se una funzione è scritta, è implicito che funzioni con parametri diversi. Altrimenti non hanno senso.
Aggiungiamo il parametro TimeFrame. E testiamo il programma con un parametro diverso, ad esempio uguale a quello attuale, ad esempio impostandolo uguale a PERIOD_D1 su un grafico giornaliero.
//+------------------------------------------------------------------+ //|Alto e basso.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | | //| https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property description "Esempio di output dei valori High[i] e Low[i]" #property description "per barre selezionate a caso". double High[],Low[]; input ENUM_TIMEFRAMES TimeFrame; //+------------------------------------------------------------------+ //|| Ottenere il livello basso per un dato numero di barre. //+------------------------------------------------------------------+ double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; ArraySetAsSeries(Low,true); int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low); if(copied>0 && index<copied) low=Low[index]; return(low); } //+------------------------------------------------------------------+ //| Ottenere il massimo per un determinato numero di barre. //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; ArraySetAsSeries(High,true); int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); if(copied>0 && index<copied) high=High[index]; return(high); } //+------------------------------------------------------------------+ //| Funzione tick dell'esperto| //+------------------------------------------------------------------+ void OnTick() { //--- visualizzare i valori alti e bassi della barra con l'indice ad ogni tick, //--- uguale al secondo di arrivo del tick datetime t=TimeCurrent(); int sec=t%60; printf("High[%d] =%G Low[%d] =%G", sec,iHigh(Symbol(),TimeFrame,sec), sec,iLow(Symbol(),TimeFrame,sec)); } //+------------------------------------------------------------------+
Mi scuso per l'aspecificità delle affermazioni.
Mi sembra che se si scrive una funzione, è implicito che essa funzioni con parametri diversi. Altrimenti non hanno senso.
Aggiungiamo il parametro TimeFrame. E testiamo il programma con un altro parametro, per esempio uguale a quello attuale, cioè, per esempio, impostandolo uguale a PERIOD_D1 su un grafico giornaliero.
Ho controllato la vostra variante: funziona correttamente. L'ho eseguita come script sul timeframe D1 con i parametri H1 e D1. I valori erano corretti (ho controllato le ultime tre barre).
Ho controllato la tua variante - anche questa funziona correttamente. L'ho eseguita come script sul timeframe D1 con i parametri H1 e D1. I valori erano corretti (ho controllato le ultime tre barre).
Ho appena iniziato a imparare. L'ho scaricato, l'ho messo nella cartella D:/MetaTrader 5/ MQL5/Indicators.
L'ho compilato e messo sul grafico. Alcuni indicatori non mostrano nulla ((.
Dovrebbe essere così o ho fatto qualcosa di sbagliato?
Gli indicatori CrossMa.mq5, Toned_WPR.mq5 e HistogramSample.mq5 non vengono visualizzati.
gli altri funzionano
Cosa significa "sbagliato"? Dovreste fornire esempi concreti invece di affermazioni generiche "tutto è sbagliato".
Provate a eseguire l'esempio della sezione CopyHigh():
Questo è ciò che ho ottenuto, mostra tutto correttamente.
Copiare l'intero array di dati?
Penso che sia molto antieconomico copiare 1 elemento.
Prival:
È normale che sia così o ho sbagliato qualcosa?
Ciao, Sergei. Questo articolo è stato scritto nella foga del momento, per le prime build pubbliche. Da allora sono cambiate molte cose e forse alcuni indicatori devono essere migliorati.
Lo rivedrò non appena avrò tempo.
- 2010.02.25
- MetaQuotes Software Corp.
- www.mql5.com
Sono riuscito a risolvere questo problema solo definendo un solo buffer contrassegnato come INDICATOR_DATA e spostando tutti gli altri in INDICATOR_CALCULATIONS, in questo modo CopyBuffer/GetData restituiscono gli elementi copiati correttamente negli array di destinazione.
- 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
Il nuovo articolo Passi su Nuovi Binari: Indicatori Personalizzati in MQL5 è stato pubblicato:
Non elencherò tutte le nuove possibilità e funzionalità del nuovo terminale e del nuovo linguaggio. Sono numerose e alcune novità meritano la trattazione in un articolo a parte. Inoltre non c'è codice qui, scritto con programmazione orientata agli oggetti, è un argomento troppo serio per essere semplicemente menzionato in un contesto come i vantaggi aggiuntivi per gli sviluppatori. In questo articolo, considereremo gli indicatori, la loro struttura, il disegno, i tipi e i loro dettagli di programmazione rispetto a MQL4. Spero che questo articolo sia utile sia per i principianti che per gli sviluppatori esperti, forse alcuni di loro troveranno qualcosa di nuovo.
Ecco un esempio di visualizzazione dei toni, utilizzando il numero massimo di colori:
Autore: TheXpert