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

 
Alexey Viktorov:

En effet, tous les claviers n'ont pas ce que j'ai écrit... Tu devrais peut-être changer de clavier.



Il y a trop d'"experts" ici :) Alors je me suis dit que j'allais me moquer de toi. Au lieu de répondre aux questions, ils se mettent à faire la morale.

 
Luchezar Shalomaev:

Il y a trop d'"experts" ici :) J'ai donc décidé de me moquer d'eux. Au lieu de répondre aux questions, commencez à faire la morale.

Ensuite, ne vous attendez pas à des réponses normales de la part de personnes qui sont occupées à faire leurs propres affaires et qui sont distraites de vous aider, si vous vous mettez en position de vous moquer de celui qui donne.

Ce n'est pas un cirque.

 
Artyom Trishkin:

Alors n'attendez pas à l'avenir de la part de personnes occupées par leurs affaires, et distraites pour vous aider, des réponses normales, si vous vous mettez en position de vous moquer du donneur.

Ce n'est pas un cirque.



Cher modérateur, si ceci n'est pas un cirque, auriez-vous l'amabilité d'emmener les clowns qui ont répondu à mes questions dans les coulisses ? Merci.

 
Luchezar Shalomaev:


Cher modérateur, si ce n'est pas un cirque, auriez-vous l'amabilité d'emmener les clowns qui ont répondu à mes questions dans les coulisses ? Merci.

Est-ce le moyen de vous envoyer dans les coulisses ?

Vous :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Luchezar Shalomaev, 2017.09.20 22:25

Bonjour. J'ai téléchargé le fichier de cotation EUR USD 1 minute de Ducascopy, j'essaie d'importer dans MT4 Alpari, rien ne se passe. Juste une fenêtre de conversion vide. Idem sur Instaforex. Qu'est-ce que ça peut être ?

Réponse :

Vous :

Réponse :

Vous :

Réponse :

Vous :

Vous :

Vous :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes.

Luchezar Shalomaev, 2017.09.21 21:10


Il y a trop d'"experts" ici :) J'ai donc décidé de me moquer d'eux. Au lieu de répondre à vos questions, ils se mettent à faire la morale.


Votre question a reçu une réponse - appuyez sur F2, ce qui fait apparaître la fenêtre de téléchargement du devis.

Mais vous avez commencé à plaisanter et vous avez eu droit à des plaisanteries en réponse.

Qu'est-ce que tu voulais ? Ce que vous avez apporté, comme on dit...

 
Artyom Trishkin:

Alors, je vous envoie dans les coulisses ?

Vous :

Réponse :

Vous :

Réponse :

Vous :

Réponse :

Vous :

Vous :

Vous :


Vous avez obtenu la réponse à votre question - appuyez sur F2, ce qui fait apparaître la fenêtre de téléchargement du devis.

Mais vous avez commencé à badiner, ce à quoi vous avez répondu par un badinage.

Que voulez-vous ? Ce que vous avez apporté, comme on dit...













Eh bien, vous dites que ce n'est pas un cirque.

 
Aleksey Vyazmikin:
La façon la plus simple d'écrire la logique est de la rendre plus claire - je ne comprends pas ce qu'est la logique... pouvez-vous le décrire en quelques mots ?

J'ai trouvé un défaut dans la logique. Je l'ai corrigé et ça marche.

int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,1),Digits);
   double Close1 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,1),Digits);
   double High1 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,1),Digits);
   double Low1 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,1),Digits);
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,2),Digits);
   double Close2 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,2),Digits);
   double High2 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,2),Digits);
   double Low2 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,2),Digits);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,21,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > High1 -0.7*(High1-Low1) && 
      Open1 > High1 -0.7*(High1-Low1) && 
      MathAbs(Close1-Open1) < 0.2*(High1-Low1)&&
      MathAbs(Close2-Open2) > 0.7*ATR)
      {
         if((Close2 - Open2) > 0 && New_Bar == true)
         { 
            Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0 && New_Bar == true)
         {
            Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
L'erreur se trouvait dans la description mathématique du modèle Doji.
 

La tâche est maintenant la suivante. Nous devons dessiner un rectangle au lieu d'une flèche, qui sera tracé par les Doji max et min et par le temps d'ouverture du Doji et le temps d'ouverture d'une nouvelle barre après le Doji. Et tout cela sur un graphique en 4 heures. En même temps, je dois être sur un graphique de 5 minutes. Que pouvez-vous nous conseiller ? Comment mettre en œuvre ?

Je ne sais pas comment faire. Merci.

 
voron_026:

J'ai trouvé un défaut dans la logique. Je l'ai corrigé et ça marche.

L'erreur se trouvait dans la description mathématique du modèle Doji.

C'est bien pour toi. Avez-vous déjà programmé ? Votre style n'est pas typique.

voron_026:

La tâche est maintenant la suivante. Au lieu des flèches, nous devons dessiner un rectangle, qui sera dessiné par les Doji max et min et par le temps d'ouverture du Doji et le temps d'ouverture d'une nouvelle barre après le Doji. Et tout cela sur un graphique de 4 heures. En même temps, je dois être sur un graphique de 5 minutes. Que pouvez-vous nous conseiller ? Comment mettre en œuvre ?

Merci.


Déclarez les variables communes (globales) qui seront calculées dans la fonction et renvoyez-la par void(){} . Pouvez-vous définir le temps... Bref, je n'ai pas encore compris la question exacte.

Au fait, je ne connaissais pas l'approche des variables globales auparavant et je renvoyais toutes les valeurs de la fonction via une variable de type chaîne...

 
voron_026:

La tâche est maintenant la suivante. Nous devons dessiner un rectangle au lieu d'une flèche, qui sera tracé par les Doji max et min et par le temps d'ouverture du Doji et le temps d'ouverture d'une nouvelle barre après le Doji. Et tout cela sur un graphique en 4 heures. En même temps, je dois être sur un graphique de 5 minutes. Que pouvez-vous nous conseiller ? Comment mettre en œuvre ?

Merci.

Vous devez utiliser OBJ_RECTANGLE. Vous savez comment obtenir les données de prix et de temps du graphique H4.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin:

C'est bien pour toi. Avez-vous déjà programmé ? Votre style n'est pas typique.


Déclarer les variables générales (globales) qui seront calculées dans la fonction et retourner de celle-ci void(){} . Pouvez-vous déterminer l'heure... Quoi qu'il en soit, je ne comprends pas quelle est exactement la question.

Au fait, je ne connaissais pas l'approche de la variable globale avant et je renvoyais toutes les valeurs de la fonction par une variable de type chaîne...


BonjourAleksey Vyazmikin Je suis la programmation il n'y a pas si longtemps. J'entre lentement dans le vif du sujet.

J'ai essayé de cette façon :

//+------------------------------------------------------------------+
//|                                                          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; // Использование патерна Доджи
int DojiCandle = 0;
bool New_Bar = false;

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
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);
//+------------------------------------------------------------------+
//| 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_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

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


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{

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

Le premier rectangle est dessiné, les autres ne le sont pas. J'essaie toujours de trouver comment le faire. Merci pour ces conseils. Qu'entendez-vous par "style atypique" ?

Raison: