Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1091

 
FiVik:

Guten Tag. Ich habe eine Frage: Wo kann ich ein Beispiel für einen Code sehen, um die Werte eines Indikators aus verschiedenen Zeitrahmen auf einem Preisdiagramm auszugeben?

Ich kann es nicht googeln, vielleicht mache ich eine falsche Anfrage.

Ich möchte in der zweiten Spalte des Preisdiagramms die Standardabweichung der Bollinger-Bänder von H1 bis W1 ausgeben. Die zweite Spalte zeigt die Werte, die man durch Multiplikation der Standardabweichung mit den Koeffizienten erhält.

Bollinger Bands geändert.

Schlüsselwörter für die Codobase-Suche "Multi timeframe".

Text kann mit OBJ_LABEL angezeigt werden.

 
LRA:

1. Versuchen Sie es in MetaEditor: Datei --> Gemeinsamen Datenordner öffnen. Sie sehen dann den Pfad zum Ordner. Dieses Thema wurde bereits mehrfach erörtert, hier zum Beispiel ein Link

2. Versuchen Sie es zunächst ohne Einschluss. Wenn Sie es debuggen werden, werden Sie es einbauen.

Geben Sie hier Ihre Quellen ein, entweder über die Schaltfläche SRC oben oder über die Schaltfläche Datei anhängen unten.

Ich danke Ihnen vielmals.
 

Wie kann man eine horizontale Linie zum Eröffnungskurs des Balkens um 07:00 Uhr ziehen?

Ich habe diesen Code geschrieben, aber die Linie wird aus irgendeinem Grund nicht gezeichnet. Wo liegt der Fehler?

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:

Wie kann man eine horizontale Linie zum Eröffnungskurs des Balkens um 07:00 Uhr ziehen?

Ich habe diesen Code geschrieben, aber die Linie wird aus irgendeinem Grund nicht gezeichnet. Wo liegt der Fehler?

Wenn Sie ObjectMove entfernen, ist die Zeile sichtbar? Versuchen Sie Alert(StartPrice);
 
LRA:
Wenn Sie ObjectMove entfernen, ist die Zeile sichtbar? Versuchen Sie Alert(StartPrice);

Wenn Sie ObjectMove entfernen, können Sie die Linie nicht sehen, aber wennSie anstelle von "IndexOfBar" einen numerischen Wert schreiben, z. B. "double StartPrice = Open[5];", wird die Linie beim Eröffnungskurs des fünften Balkens gezeichnet.

Danke für die Idee mit dem Alert - er zeigt den Wert "0" an.

Übrigens, die Zeile existiert auch in der Liste der Objekte mit dem Wert 0.

 
RichLux:

Wie kann man eine horizontale Linie zum Eröffnungskurs des Balkens um 07:00 Uhr ziehen?

Ich habe diesen Code geschrieben, aber die Linie wird aus irgendeinem Grund nicht gezeichnet. Wo liegt der Fehler?

Man kann nicht in der Inite zeichnen und rechnen, das ist ein grober Fehler. Der Inite muss seine Arbeit so schnell wie möglich beenden.

Der Fehler hier -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //den Index des Balkens um die angegebene Zeit lesen StartTime

Die Uhrzeit kann direkt im Datetime-Format eingestellt werden, so dass keine Zeit für die Konvertierung verschwendet werden muss:

#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:

Man kann im init nicht zeichnen und rechnen, das ist ein grober Fehler. Das init sollte seine Arbeit so schnell wie möglich abschließen.

Der Fehler hier -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //den Index des Balkens um die angegebene Zeit lesen StartTime

Die Uhrzeit kann direkt im Datetime-Format eingestellt werden, so dass keine Zeit für die Konvertierung verschwendet werden muss:

Vielen Dank für die wertvollen Tipps für mich.

Und besonderen Dank dafür, dass Sie meine Moral gesteigert haben, indem Sie den Fehler gefunden haben. Ich beginne wieder daran zu glauben, dass ich mich mit MQL4 anfreunden kann.

 
RichLux: Version des Codes funktioniert nicht. Die Linie im Diagramm erscheint immer noch nicht...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#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:

Man kann im init nicht zeichnen und rechnen, das ist ein grober Fehler. Das Init sollte so schnell wie möglich abgeschlossen werden.


Und wenn Sie die Berechnungen aus dem Inite in eine separate Funktion übernehmen und diese Funktion dann in das Inite einfügen, ist das kein grober Fehler?

LRA:

Es funktioniert bereits.

 
RichLux:

Und wenn Sie die Berechnungen aus dem inite in eine separate Funktion übernehmen und diese Funktion dann in das inite einfügen, ist das kein grober Fehler?

Wenn der Code zu lange ausgeführt wird, bricht das Inite zwangsweise ab und der Code kann nicht mehr ausgeführt werden. Der ausgeführte Code, einschließlich der Aufrufe von sekundären Funktionen, muss in den vordefinierten Funktionen von MQL sein - OnTick() für Expert Advisors, OnStart() für Skripte, OnCalculate() für Indikatoren.

Das inite muss ein Minimum an Code enthalten, nur die Dinge, die einmal ausgeführt werden müssen, direkt vor dem Start des Programms. Zum Beispiel die Initialisierung von globalen Variablen, Arrays, Indikatorpuffern.