Ciao Al gruppo
Ho iniziato da poco a studiare MQL5 e mi sono trovato a dover risolvere un quesito credo semplice per chi è più avanti.
Ho un periodo durante la giornata definibile dagli input.
Controllo se sono nel periodo o se il periodo è passato ma sono ancora nel giorno.
Aggiungo in un array con CopyRates i dati delle candele e cerco il valore più alto.
La cosa strana è che quando apro il grafico da Debug mi mostra nei Print prima i valori del H1 e passando a M1 variano anche se
le Candele che vado a memorizzare sono tutte a M1.
Aggiungo iI codice
Quello che vorrei ottenere è sapere il valore massimo del periodo e quale candela l'ha generato.
Grazie a chi mi potrà dare un suggerimento
Modifica così questa riga
int hBar = iHighest(NULL,PERIOD_M1,MODE_HIGH,ArraySize(rates),0); // Candela con valore Highest del periodo
Grazie Michele, non mi ero reso conto che mettendo 0 cambiava i valori in base al Time Frame del grafico.
Ora devo capire come "visualizzare" qual è la candela interessata sul grafico magari evidenziandola con una freccia o similari.
Ho provato aggiungendo
// Evidenziare Candela con valore hHighest su grafico ObjectCreate( 0 , "XX",OBJ_ARROW_CHECK,0,0,HhBar ); ObjectSetInteger(0,"XX",OBJPROP_COLOR,clrYellow); ObjectSetInteger(0,"XX",OBJPROP_ARROWCODE,135); // Disegnare linea orizzontale sul livello hHigest su grafico ObjectCreate( 0 , "Highest", OBJ_HLINE,0,0,HhBar); ObjectSetInteger(0 , "Highest",OBJPROP_WIDTH,3);
ma il risultato non è stato quello sperato, non viene visualizzata nessuna candela e la linea orizzontale è su un valore che non capisco da dove provenga.
Grazie Michele, non mi ero reso conto che mettendo 0 cambiava i valori in base al Time Frame del grafico.
Ora devo capire come "visualizzare" qual è la candela interessata sul grafico magari evidenziandola con una freccia o similari.
Ho provato aggiungendo
ma il risultato non è stato quello sperato, non viene visualizzata nessuna candela e la linea orizzontale è su un valore che non capisco da dove provenga.
Fai così per il segno di spunta:
datetime date = rates[hBar].time; // Evidenziare Candela con valore hHighest su grafico ObjectCreate( 0 , "XX",OBJ_ARROW_CHECK,0,date,HhBar); ObjectSetInteger(0,"XX",OBJPROP_ANCHOR,ANCHOR_BOTTOM); ObjectSetInteger(0,"XX",OBJPROP_COLOR,clrYellow); ObjectSetInteger(0,"XX",OBJPROP_ARROWCODE,135);
Per la linea è simile.
Ciao Michele, Grazie per il supporto.
Ho provato , ho aggiunto le righe da te proposte, ma ottengo che mi viene segnalata con il baffetto una candela delle 12.45 mentre il rande era dalle 2.00 alle 4.00
Dove sbaglio??
Ciao Michele, Grazie per il supporto.
Ho provato , ho aggiunto le righe da te proposte, ma ottengo che mi viene segnalata con il baffetto una candela delle 12.45 mentre il rande era dalle 2.00 alle 4.00
Dove sbaglio??
Probabile che sia la gestione dell'ora o del numero delle candele impostato,onde perdere tempo nel cercare dove sia l'errore nel tuo caso, ti posto un codice direttamente che dovrebbe funzionare:
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ string OraInizio="04:00"; string OraFine="17:55"; datetime starthour,endhour,OraAttuale; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { //--- starthour=StringToTime(OraInizio); endhour=StringToTime(OraFine); ChartSetSymbolPeriod(0,NULL,PERIOD_M1); if(Elabora() == true) { int n = Bars(Symbol(),PERIOD_M1,OraAttuale,starthour); //Calcolo il numero di candele da conteggiare Print("Il numero di barre da conteggiare sono:",n+1); MqlRates rates[]; ArraySetAsSeries(rates,true); int copied = CopyRates(Symbol(),PERIOD_M1,0,n,rates); // Calcola le candele nel periodo se ancora non completato // calcola sino all-ultima disponibile if(copied<=0) { Print("Errore nella copia dei dati dei prezzi ",GetLastError()); } else { Print("Copiate ",ArraySize(rates)+1," barre"); } int hBar = iHighest(NULL,PERIOD_M1,MODE_HIGH,ArraySize(rates),0); // Candela con valore Highest del periodo double HhBar = rates[hBar].high; // Valore Candela hBar Print("hBar : " + hBar); Print("HhBar : " + HhBar); datetime date = rates[hBar].time; // Evidenziare Candela con valore hHighest su grafico ObjectCreate(0, "XX",OBJ_ARROW_CHECK,0,date,HhBar); ObjectSetInteger(0,"XX",OBJPROP_ANCHOR,ANCHOR_BOTTOM); ObjectSetInteger(0,"XX",OBJPROP_COLOR,clrYellow); ObjectSetInteger(0,"XX",OBJPROP_ARROWCODE,135); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool Elabora() { OraAttuale = TimeLocal(); if(OraAttuale > starthour && OraAttuale < endhour) { Print("Orario Operativo"); return true; } else { Print("Orario non Operativo"); return false; } }
Probabile che sia la gestione dell'ora o del numero delle candele impostato,onde perdere tempo nel cercare dove sia l'errore nel tuo caso, ti posto un codice direttamente che dovrebbe funzionare:
Grazie Michele, mi studio il listato... poichè provato non funziona, ma prenderò spunto.

- 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
Ciao Al gruppo
Ho iniziato da poco a studiare MQL5 e mi sono trovato a dover risolvere un quesito credo semplice per chi è più avanti.
Ho un periodo durante la giornata definibile dagli input.
Controllo se sono nel periodo o se il periodo è passato ma sono ancora nel giorno.
Aggiungo in un array con CopyRates i dati delle candele e cerco il valore più alto.
La cosa strana è che quando apro il grafico da Debug mi mostra nei Print prima i valori del H1 e passando a M1 variano anche se
le Candele che vado a memorizzare sono tutte a M1.
Aggiungo iI codice
Quello che vorrei ottenere è sapere il valore massimo del periodo e quale candela l'ha generato.
Grazie a chi mi potrà dare un suggerimento