Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 747

 
Sergey Gritsay:

Vitaliy, sehen Sie sich https://www.mql5.com/ru/docs/series/timeseries_access#synchronized an , dort gibt es ein Beispielskript zum Laden der Historie, das könnte helfen

Danke, ich werde versuchen, mich damit zu befassen.

Nun stellt sich bereits eine Frage:

Die nächste wichtige Prüfung ist die Überprüfung des Programmtyps, aus dem die Funktion aufgerufen wird. Erinnern Sie sich daran, dass es höchst unerwünscht ist, eine Anfrage zur Aktualisierung einer Zeitreihe zu senden, die denselben Zeitraum hat wie der Indikator, der die Aktualisierung aufruft. Die Unerwünschtheit der Anforderung von Daten der gleichen Symbolperiode, wie sie der Indikator hat, da die Aktualisierung der historischen Daten im gleichen Thread erfolgt, in dem der Indikator arbeitet. Daher ist die Wahrscheinlichkeit eines Zusammenstoßes hoch. Um dies zu überprüfen, verwenden wir die FunktionMQL5InfoInteger() mit dem ModifikatorMQL5_PROGRAM_TYPE.

if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR&&Period()==period&&Symbol()==symbol)
zurück(-4);


Es sollte in meinem Indikator funktionieren.

 

Meine Herren, ich habe mit ZigZag zu kämpfen.

Ich muss die genauen Daten der vier Eckpunkte erhalten. Es stellt sich heraus, dass der erste, notwendigste Vertex von iCustom falsch angegeben wird. Sie weicht von der grafischen Darstellung ab, aber die nächsten drei sind korrekt. Etwas Ähnliches wurde bereits gefunden - https://www.mql5.com/ru/forum/100123

Ich habe alles versucht, was ich konnte, ich habe sogar einen separaten Expert Advisor nur für die Überprüfung der Daten von ZigZag erstellt. Überzeugen Sie sich selbst, vielleicht habe ich irgendwo einen Fehler gemacht? Einfach installieren und die Visualisierung der Eröffnungspreise aktivieren. Hör zu.


//+------------------------------------------------------------------+
//|                                                  data_ZigZag.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input string   data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
input int      ExtDepth=12;
input int      ExtDeviation=5;
input int      ExtBackstep =3;
input int n_zz=100;//n_zz =100; 
double pd_1,pd_2,pd_3,pd_4;
int pn_1,pn_2,pn_3,pn_4;
int zz_Handle;
double zz_buf[];
datetime time[];
string this_sym;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   this_sym=Symbol();
//+------------------------------------------------------------------+
//--- сохраним текущий символ графика для дальнейшей работы советника именно на этом символе
   zz_Handle=iCustom(this_sym,0,"Examples\\Zigzag",
                     ExtDepth,
                     ExtDeviation,
                     ExtBackstep
                     );
   Print(__FUNCTION__,"__LINE__",__LINE__," . . . . . ",
         "zz_Handle = ",zz_Handle,"  error = ",GetLastError());
//--- проверяем наличие хендла индикатора
   if(zz_Handle==INVALID_HANDLE)
     {
      //--- хендл не получен, выводим сообщение в лог об ошибке, завершаем работу с ошибкой
      Print(__FUNCTION__,"__LINE__",__LINE__," ----- ",
            "Не удалось получить хендл индикатора zz_Handle","  error = ",GetLastError());
      return(-1);
     }
//--- добавляем индикатор на ценовой график
   ChartIndicatorAdd(ChartID(),0,zz_Handle);
//--- устанавливаем индексацию для массива zz_buf как в таймсерии
   ArraySetAsSeries(zz_buf,true);
   ArraySetAsSeries(time,true);
//---

//+------------------------------------------------------------------+
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(zz_Handle);
   ArrayFree(zz_buf);
   ArrayFree(time);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//+------------------------------------------------------------------+
   int zz_copy=0;
//--- копируем данные из индикаторного массива в динамический массив 
   zz_copy=CopyBuffer(zz_Handle,0,0,n_zz,zz_buf);
//--- если есть ошибки, то выводим сообщение в лог об ошибке и выходим из функции
   if(zz_copy<0)
     {
      Print("Не удалось скопировать данные из индикаторного буфера zz_buf.  error = ",
            GetLastError()); return;
     }
//+------------------------------------------------------------------+
   pd_1 =0;
   pd_2 =0;
   pd_3 =0;
   pd_4 =0;
   pn_1 =0;
   pn_2 =0;
   pn_3 =0;
   pn_4 =0;

   int zz_q=ArraySize(zz_buf);
   int q=0;

   for(q=0; q<zz_q; q++)
     {
      if(zz_buf[q]!=0 && zz_buf[q]!=EMPTY_VALUE)
        {
              if(pd_1==0) { pn_1=q; pd_1=zz_buf[q]; }
         else if(pd_2==0) { pn_2=q; pd_2=zz_buf[q]; }
         else if(pd_3==0) { pn_3=q; pd_3=zz_buf[q]; }
         else if(pd_4==0) { pn_4=q; pd_4=zz_buf[q]; }
        }
      if(pn_4>0)break;
     }
//+------------------------------------------------------------------+
   CopyTime(this_sym,Period(),0,n_zz,time);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name1");
   string name1="name1";

   if(!ObjectCreate(0,name1,OBJ_ARROW_UP,0,time[pn_1],pd_1))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name1,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name2");
   string name2="name2";

   if(!ObjectCreate(0,name2,OBJ_ARROW_UP,0,time[pn_2],pd_2))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name2,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name3");
   string name3="name3";

   if(!ObjectCreate(0,name3,OBJ_ARROW_UP,0,time[pn_3],pd_3))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name3,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name4");
   string name4="name4";

   if(!ObjectCreate(0,name4,OBJ_ARROW_UP,0,time[pn_4],pd_4))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name4,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
///*
   if(pd_1!=0 && pd_2!=0 && pd_3!=0 && pd_4!=0)
      Alert(__FUNCTION__,"__LINE__",__LINE__,
            "   q =",q,
            "   pd_1 =",pd_1,
            "   pd_2 =",pd_2,
            "   pd_3 =",pd_3,
            "   pd_4 =",pd_4,

            "   pn_1 =",pn_1,
            "   pn_2 =",pn_2,
            "   pn_3 =",pn_3,
            "   pn_4 =",pn_4,
            "   TimeCurrent()=",TimeCurrent()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
Wie erhält man genaue Daten?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
Hallo. Vorgestern habe ich mit dem Studium von MQL begonnen.


Das Testgerät liefert dieses Ergebnis:


Ich weiß nicht, wo der Haken ist. Liebe Fachleute, bitte klären Sie mich auf, ich wäre Ihnen sehr dankbar.


 

Frage Kann ich ein Programm in Metatrader 4 schreiben, um 2 bis 250 Positionen meiner Wahl mit einem festgelegten Stoploss und einem festgelegten Gewinn mit einem Klick zu öffnen? So muss ich nicht jedes Mal ein neues Fenster manuell öffnen.

 
fxtz:

Frage Kann ich ein Programm in Metatrader 4 schreiben, um 2 bis 250 Positionen meiner Wahl mit einem festgelegten Stoploss und einem festgelegten Gewinn mit einem Klick zu öffnen? Sie müssen sie nicht einzeln öffnen

Ja, das können Sie. Aber Sie stellen die Frage an der falschen Stelle - hier auf MT5.

Es gibt mehrere Threads für Neulinge auf MT4.

Zum Beispiel - hier.

 
antonsinichkin:
Hallo. Vorgestern habe ich mit dem Studium von MQL begonnen.


Das Testgerät liefert dieses Ergebnis:


Wo ist der Haken, den ich nicht begreifen kann? Sehr geehrte Fachleute, bitte klären Sie mich auf, ich werde Ihnen sehr dankbar sein.



Übersetzen Sie sie vor dem Druck in eine Zeichenkette. Oder erklären Sie, was falsch ist.
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 
Guten Tag. Nach dem letzten MT5-Update auf Build 1604 funktionieren meine Indikatoren nicht mehr richtig. Ich verwende
Sogenannte "flüssige" Indikatoren. Ich habe zum Beispiel mehrere mehrperiodige Stochastiken in einem Fenster. Nun, jetzt sind die Kurzen gezogen
Wie bisher werden die etwas längeren nur wenige Takte gezeichnet und die längsten überhaupt nicht.

Ich habe den Eindruck, dass sie plötzlich keine Geschichte mehr haben. Können Sie mir sagen, woran das liegen könnte?
 
Ich bin gerade von mql4 auf mql5 umgestiegen. Ich teste einen Expert Advisor für den RTS Index und habe nun das Problem, dass er mehrere Deals öffnet, aber eine der Bedingungen für das Öffnen eines Deals ist wie folgt: if (...OrdersTotal()==0). Warum funktioniert diese Bedingung nicht? Was kann ich tun, um nur eine Stelle zu eröffnen?
 
RogozaIV:
Ich bin vor kurzem von mql4 zu mql5 gewechselt. Ich teste einen Expert Advisor auf dem RTS Index und habe ein Problem mit der Eröffnung mehrerer Positionen, obwohl eine der Bedingungen für die Eröffnung einer Position angegeben ist: if (...OrdersTotal()==0). Warum funktioniert diese Bedingung nicht? Was kann ich tun, um nur einen Handel zu eröffnen?
PositionsTotal()