Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1091

 
FiVik:

Buon pomeriggio. Ho una domanda: dove posso vedere un esempio di codice per mostrare i valori di un indicatore da diversi timeframe su un grafico di prezzo?

Non riesco a cercarlo su Google, forse sto facendo una richiesta sbagliata.

Voglio mostrare nella seconda colonna del grafico dei prezzi la deviazione standard delle Bande di Bollinger da H1 a W1. La seconda colonna mostra i valori ottenuti moltiplicando la deviazione standard per i coefficienti.

Bande di Bollinger modificate.

Parole chiave per la ricerca su codobase "Multi timeframe".

Il testo può essere visualizzato usando OBJ_LABEL.

 
LRA:

1. Prova in MetaEditor: File --> Open shared data folder. Vedrai il percorso della cartella. Questo problema è stato discusso molte volte, ecco un link, per esempio

2. All'inizio prova senza includere. Quando farete il debug, inizierete ad includerlo.

3. Inserisci qui le tue fonti o usando il pulsante SRC qui sopra, o usando il pulsante Allega file qui sotto.

Grazie mille.
 

Per favore consigliate come disegnare una linea orizzontale al prezzo di apertura della barra alle 07:00.

Ho scritto questo codice, ma la linea non viene disegnata per qualche motivo. Dov'è l'errore?

extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {       
   ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
   return(0);
   }
 
RichLux:

Per favore consigliate come disegnare una linea orizzontale al prezzo di apertura della barra alle 07:00.

Ho scritto questo codice, ma la linea non viene disegnata per qualche motivo. Dov'è l'errore?

Se rimuovete ObjectMove, la linea è visibile? Provate ad allertare(StartPrice);
 
LRA:
Se rimuovete ObjectMove, la linea è visibile? Provate ad allertare(StartPrice);

Se rimuovi ObjectMove, non puoi vedere la linea, ma sescrivi un valore numerico al posto di "IndexOfBar", per esempio, "double StartPrice = Open[5];" disegna la linea al prezzo di apertura della quinta barra.

Grazie per l'idea con Alert - mostra il valore "0".

A proposito, la linea esiste anche nella lista degli oggetti con il valore 0.

 
RichLux:

Per favore consigliate come disegnare una linea orizzontale al prezzo di apertura della barra alle 07:00.

Ho scritto questo codice, ma la linea non viene disegnata per qualche motivo. Dov'è l'errore?

Non si può disegnare e calcolare nell'inite, è un errore grossolano. L'inite deve finire il suo lavoro il più velocemente possibile.

L'errore qui èint IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //leggere l'indice della barra dal tempo dato StartTime

L'ora può essere impostata direttamente in formato datetime, non c'è bisogno di perdere tempo con la macchina per la conversione, funziona così:

#property strict
#property  show_inputs

extern datetime StartTime = D'07:00';          //Начальное время для анализа, 00:00 EST
extern datetime AlTime = D'18:55';          //Время для трейдинга
extern datetime EndTime   = D'20:00';          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{       
   ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   Print(IndexOfBar,", ",StartPrice);
   ObjectMove(0,"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
   
 
evillive:

Non si può disegnare e calcolare init, è un errore grossolano. L'init dovrebbe completare il suo lavoro il più rapidamente possibile.

L'errore qui -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //leggere l'indice della barra dal tempo specificato StartTime

L'ora può essere impostata direttamente in formato datetime, non c'è bisogno di perdere tempo con la macchina per la conversione, funziona così:

Grazie per i preziosi consigli per me.

E un ringraziamento speciale per avermi sollevato il morale trovando l'errore. Sto cominciando a credere di nuovo che posso fare amicizia con MQL4

 
RichLux: versione del codice non funziona. La linea sul grafico ancora non appare...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict                                                       // -------- Возможно, Дело в этой строке
        
extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
void OnStart()
{
   ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask);    //созд гор линию по цене Ask   --- Для текущего графика ID пропускаем
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue);  //цвет темно-сиий  --- 0 = текущий график   DarkBlue - то же самое
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош

   // Первый параметр нужен типа string, а функция ChartID возвращает long
   int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); //  --- NULL = текущий график  ЗДЕСЬ И БЫЛА ОШИБКА???
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
 
evillive:

Non si può disegnare e calcolare init, è un errore grossolano. L'init dovrebbe essere completato il più rapidamente possibile.


E se prendete i calcoli dall'inite in una funzione separata e poi inserite questa funzione nell'inite, non sarà un errore grossolano?

LRA:

Funziona già.

 
RichLux:

E se prendete i calcoli dall'inite in una funzione separata, e poi inserite questa funzione nell'inite, non sarà un errore grossolano?

Se il codice viene eseguito troppo a lungo, l'inite terminerà forzatamente e il codice semplicemente non avrà il tempo di essere eseguito. Il codice eseguito, comprese le chiamate di funzioni secondarie, deve essere nelle funzioni predefinite di MQL - OnTick() per Expert Advisors, OnStart() per gli script, OnCalculate() per gli indicatori.

L'inite deve contenere il minimo di codice, solo le cose che devono essere eseguite una volta, subito prima dell'inizio del programma. Per esempio, l'inizializzazione di variabili globali, array, buffer di indicatori.