Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 312

 
Aleksey Vyazmikin:

Cherchez une erreur dans la fonction - elle ne renvoie pas la condition de la flèche vers le haut.


Merci àAleksey Vyazmikin, mais le problème est plus grave. Lorsque le robot trouve un motif, il place un grand nombre de flèches à une coordonnée. Le terminal est suspendu. Comment le réparer. Avez-vous essayé d'exécuter mon conseiller expert sur votre terminal ?

 
voron_026:

Merci àAleksey Vyazmikin, mais il y a un plus gros problème. Lorsque le robot trouve un modèle, il place un grand nombre de flèches à une coordonnée. Le terminal est suspendu. Comment le réparer. Avez-vous essayé d'exécuter mon conseiller expert sur votre terminal ?


Le problème se situe dans la fonction en premier lieu - je n'ai pas ajouté le code pour une raison précise. La fonction est appariée et elle dessine les flèches. J'ai lancé le conseiller expert dans le visualiseur.

Le conseiller expert ne dessine pas de flèches à chaque tick - il vérifie simplement l'existence d'une nouvelle bougie.

 
voron_026:

Merci àAleksey Vyazmikin, mais il y a un plus gros problème. Lorsque le robot trouve un modèle, il place un grand nombre de flèches à une coordonnée. Le terminal est suspendu. Comment le réparer. Avez-vous essayé d'exécuter mon conseiller expert sur votre terminal ?

Si vous souhaitez obtenir l'aide du plus grand nombre de personnes possible, vous devez télécharger le code, et non le fichier. Tout le monde ne veut pas télécharger le fichier, puis il faut l'ouvrir et ensuite le supprimer.

 

Ainsi, lorsqu'une nouvelle bougie apparaît, la fonction ObjectCreate doit être désactivée, ai-je raison ?

 
Vitaly Muzichenko:

Pour qu'un maximum de personnes puissent vous aider, vous devez publier le code, et non le fichier. Tout le monde n'a pas envie de télécharger le fichier, et il faut ensuite l'ouvrir, puis le supprimer, ce qui est une véritable plaie.

Compris, je vous envoie le 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:
Bien reçu, je présente le code.

Essayez de cette façon :

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

Bonjour à tous) Je suis sur le compte du serveur VPN, j'ai écrit l'adresse du serveur auquel mon compte appartient, mais ici il est écrit que rien n'est trouvé, que faire, s'il vous plaît aidez, merci.

 
Vitaly Muzichenko:

Essayez de cette façon :


Ça n'a pas marché. Le Conseiller Expert a dessiné 7679 objets, et de façon intéressante, avec une numérotation impaire

Je ne comprends pas ce qui ne va pas avec la fonction Doji. Pourquoi les flèches vers le haut ne sont pas dessinées

 
voron_026:

Ça n'a pas marché. Le Conseiller Expert a dessiné 7679 objets, et de manière intéressante, avec une numérotation impaire

Je ne comprends pas ce qui ne va pas avec la fonction Doji. Pourquoi les flèches vers le haut ne sont pas dessinées

Vous avez un problème avec la recherche d'un modèle. Essayez de trouver le bon code dans la kodobase, il y en a beaucoup et le problème se résoudra de lui-même.

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

Vous avez un problème de recherche de modèle, essayez de trouver le bon code dans kodobase, il y en a beaucoup et le problème se résoudra de lui-même.


Résolution du problème de rendu d'un grand nombre d'objets. J'ai installé le contrôle sur la nouvelle barre. J'ai obtenu le code suivant :

//+------------------------------------------------------------------+
//|                                                          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;                             // Поймался новый бар 
     } 
  }  

La seule chose est que le numéro de série de la flèche dans les propriétés de l'objet ne va pas 1 2 3 ... et ainsi de suite, mais 1 850427 1083295 ..... Je suppose que le compteur ne fonctionne pas correctement ?

Ma question est la suivante : comment vérifier la présence d'une nouvelle barre en H4 ? Donc, je veux que le robot recherche les modèles sur H4, alors que le graphique peut être de n'importe quelle TF ?