Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 312

 
Aleksey Vyazmikin:

Suchen Sie nach einem Fehler in der Funktion - sie gibt die Bedingung für den Pfeil nach oben nicht zurück.


Dank anAleksey Vyazmikin, aber das Problem ist ernster. Wenn der Roboter ein Muster findet, setzt er eine große Anzahl von Pfeilen auf eine Koordinate. Das Terminal bleibt hängen. Wie man das beheben kann. Haben Sie versucht, meinen Expert Advisor auf Ihrem Terminal auszuführen?

 
voron_026:

Dank anAleksey Vyazmikin, aber es gibt ein größeres Problem. Wenn der Roboter ein Muster findet, setzt er eine große Anzahl von Pfeilen auf eine Koordinate. Das Terminal bleibt hängen. Wie man das beheben kann. Haben Sie versucht, meinen Expert Advisor auf Ihrem Terminal auszuführen?


Das Problem liegt in erster Linie in der Funktion - ich habe den Code aus einem bestimmten Grund nicht hinzugefügt. Die Funktion wird angepasst und zeichnet die Pfeile. Ich habe den Expert Advisor im Visualizer gestartet.

Der Expert Advisor zeichnet nicht bei jedem Tick Pfeile, sondern prüft nur, ob eine neue Kerze erscheint.

 
voron_026:

Dank anAleksey Vyazmikin, aber es gibt ein größeres Problem. Wenn der Roboter ein Muster findet, setzt er eine große Anzahl von Pfeilen auf eine Koordinate. Das Terminal bleibt hängen. Wie man das beheben kann. Haben Sie versucht, meinen Expert Advisor auf Ihrem Terminal auszuführen?

Wenn Sie von möglichst vielen Leuten Hilfe bekommen wollen, sollten Sie den Code hochladen, nicht die Datei. Nicht jeder möchte die Datei herunterladen, und dann muss man sie öffnen und anschließend löschen.

 

Wenn also eine neue Kerze auftaucht, muss die Funktion ObjectCreate ausgeschaltet werden, habe ich recht?

 
Vitaly Muzichenko:

Damit Ihnen möglichst viele Leute helfen können, müssen Sie den Code posten, nicht die Datei. Nicht jeder will die Datei herunterladen, und dann muss man sie öffnen und wieder löschen, was sehr mühsam ist.

Verstanden, ich schicke Ihnen den Code.
#property copyright "Copyright 2017,UriyGlushko"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern string Rodot           = "Параметры робота";
extern double Lots            = 0.2;
extern int    StopLoss        = 20;
extern int    TakeProfit      = 80;
extern int    Magic           = 999999;
extern int    Slippage        = 3; // Проскальзывание

extern bool UseDojiCandles = true; // Использование патерна Доджи
extern int TimeFrame = PERIOD_H4;
int DojiCandle = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  if (Digits == 3 || Digits ==5 )
  {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
  }
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if(UseDojiCandles = true && Doji() == 1)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_ARROW_UP,0,TimeCurrent(),Low[1]-300*_Point))
         {
         Print("Не удалось создать метку вверх");
         }
         
     }
   DojiCandle ++;

   
   if(UseDojiCandles = true && Doji() == -1)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1]+300*_Point))
         {
         Print("Не удалось создать метку вниз");
         }
         
     }
   DojiCandle ++;
 

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{
//Параметры Дожи
   double Open1 = iOpen(Symbol(), PERIOD_H4,1);
   double Close1 = iClose(Symbol(), PERIOD_H4,1);
   double High1 = iHigh(Symbol(), PERIOD_H4,1);
   double Low1 = iLow(Symbol(), PERIOD_H4,1);
   
//Параметры предыдущей свечи
   double Open2 = iOpen(Symbol(), PERIOD_H4,2);
   double Close2 = iClose(Symbol(), PERIOD_H4,2);
   double High2 = iHigh(Symbol(), PERIOD_H4,2);
   double Low2 = iLow(Symbol(), PERIOD_H4,2);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,14,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > Low1 -0.7*(High1-Low1) && 
      Open1 > Low1 -0.7*(High1-Low1) && 
      MathAbs((Close1-Open1) < 0.2*(High1-Low1))&&
      MathAbs((Close2-Open2) > 0.7*ATR))
      {
         if((Close2 - Open2) > 0)
         { 
         Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0)
         {
         Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
 
voron_026:
Verstanden, ich lege den Code fest.

Versuchen Sie es auf diese Weise:

if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_ARROW_UP,0,Time[0],Low[1]-300*_Point))
 

Hallo an alle) Ich bin auf dem Konto des VPN-Servers, schrieb ich die Adresse des Servers, zu dem mein Konto gehört, aber hier schreibt, dass nichts gefunden wird, was zu tun ist, bitte helfen, danke.

 
Vitaly Muzichenko:

Versuchen Sie es auf diese Weise:


Es hat nicht geklappt. Der Expert Advisor hat 7679 Objekte gezeichnet, interessanterweise mit ungerader Nummerierung

Ich verstehe nicht, was an der Doji-Funktion falsch ist. Warum die Aufwärtspfeile nicht gezeichnet werden

 
voron_026:

Es hat nicht geklappt. Der Expert Advisor hat 7679 Objekte gezeichnet, interessanterweise mit ungerader Nummerierung

Ich verstehe nicht, was an der Doji-Funktion falsch ist. Warum ist der Pfeil nach oben nicht eingezeichnet?

Sie haben ein Problem mit der Suche nach einem Muster. Versuchen Sie, den richtigen Code in der kodobase zu finden, es gibt eine Menge davon und das Problem wird sich von selbst lösen

MQL5 Code Base
MQL5 Code Base
  • www.mql5.com
Библиотека исходных кодов на языке MQL5 для MetaTrader 5
 
Vitaly Muzichenko:

Sie haben ein Problem mit der Mustersuche. Versuchen Sie, den richtigen Code in kodobase zu finden, es gibt viele davon und das Problem wird sich von selbst lösen


Das Problem beim Rendern einer großen Anzahl von Objekten wurde behoben. Ich habe den Check auf der neuen Leiste installiert. Ich habe den folgenden Code erhalten:

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                                       Copyright 2017,UriyGlushko |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,UriyGlushko"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern string Rodot           = "Параметры робота";
extern double Lots            = 0.2;
extern int    StopLoss        = 20;
extern int    TakeProfit      = 80;
extern int    Magic           = 999999;
extern int    Slippage        = 3; // Проскальзывание

extern bool UseDojiCandles = true; // Использование патерна Доджи
extern int TimeFrame = PERIOD_H4;
int DojiCandle = 0;
bool New_Bar = false;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  if (Digits == 3 || Digits ==5 )
  {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
  }
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_ARROW_UP,0,Time[0],Low[1]-300*_Point))
         {
         Print("Не удалось создать метку вверх");
         }
         
     }
   DojiCandle ++;

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_ARROW_DOWN,0,Time[0],High[1]+300*_Point))
         {
         Print("Не удалось создать метку вниз");
         }
         
     }
   DojiCandle ++;
 

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{
//Параметры Дожи
   double Open1 = iOpen(Symbol(), PERIOD_H4,1);
   double Close1 = iClose(Symbol(), PERIOD_H4,1);
   double High1 = iHigh(Symbol(), PERIOD_H4,1);
   double Low1 = iLow(Symbol(), PERIOD_H4,1);
   
//Параметры предыдущей свечи
   double Open2 = iOpen(Symbol(), PERIOD_H4,2);
   double Close2 = iClose(Symbol(), PERIOD_H4,2);
   double High2 = iHigh(Symbol(), PERIOD_H4,2);
   double Low2 = iLow(Symbol(), PERIOD_H4,2);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,14,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > Low1 -0.7*(High1-Low1) && 
      Open1 > Low1 -0.7*(High1-Low1) && 
      MathAbs((Close1-Open1) < 0.2*(High1-Low1))&&
      MathAbs((Close2-Open2) > 0.7*ATR))
      {
         if((Close2 - Open2) > 0)
         { 
         Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0)
         {
         Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
//+------------------------------------------------------------------+
//    Функция определения нового бара
//+------------------------------------------------------------------+
void Fun_New_Bar()                              // Ф-ия обнаружения .. 
  {                                             // .. нового бара 
   static datetime New_Time=0;                  // Время текущего бара 
   New_Bar=false;                               // Нового бара нет 
   if(New_Time!=Time[0])                        // Сравниваем время 
     { 
      New_Time=Time[0];                         // Теперь время такое 
      New_Bar=true;                             // Поймался новый бар 
     } 
  }  

Das einzige Problem ist, dass in den Eigenschaften des Objekts die Seriennummer des Pfeils nicht 1 2 3 ... lautet. und so weiter, aber 1 850427 1083295 ..... Ich nehme an, der Zähler funktioniert nicht richtig?

Meine Frage ist, wie man auf einen neuen Balken auf H4 prüft. Also, ich möchte, dass der Roboter für die Muster auf H4 zu suchen, während der Chart kann von jedem TF?