Questions des débutants MQL5 MT5 MetaTrader 5 - page 747

 
Sergey Gritsay:

Vitaliy, consultez https://www.mql5.com/ru/docs/series/timeseries_access#synchronized, il y a un exemple de script pour charger l'historique, cela pourrait vous aider.

Merci, je vais essayer de m'en occuper.

Maintenant, une question se pose déjà :

Le prochain contrôle important consiste à vérifier le type de programme à partir duquel la fonction est appelée. Rappelons que l'envoi d'une demande de rafraîchissement d'une série temporelle ayant la même période que celle de l'indicateur qui appelle le rafraîchissement est hautement indésirable. Le caractère indésirable de la demande de données de la même période que celle de l'indicateur est déterminé par le fait que la mise à jour des données historiques est effectuée dans le même thread, dans lequel l'indicateur travaille. Il y a donc une forte probabilité de conflit. Pour le vérifier, nous utilisons la fonctionMQL5InfoInteger() avec le modificateurMQL5_PROGRAM_TYPE.

if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR&&Period()==period&&Symbol()==symbol)
retour(-4) ;


Cela devrait fonctionner dans mon indicateur.

 

Messieurs, j'ai du mal avec ZigZag.

J'ai besoin d'obtenir les données exactes des quatre sommets. Il s'avère que le premier, le plus nécessaire des vertex que iCustom donne incorrectement. Il est décalé par rapport à l'image graphique, les trois suivants sont corrects. Une chose similaire a déjà été trouvée - https://www.mql5.com/ru/forum/100123

J'ai essayé tout ce que je pouvais, j'ai même créé un Conseiller Expert séparé juste pour vérifier les données de ZigZag. Voyez par vous-même, peut-être ai-je fait une erreur quelque part ? Il suffit d'installer et d'activer la visualisation des prix d'ouverture. Écoutez ça.


//+------------------------------------------------------------------+
//|                                                  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()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
Comment obtenir des données précises ?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
Bonjour. Avant-hier, j'ai commencé à étudier le MQL.


Le testeur donne ce résultat :


Je n'arrive pas à comprendre le piège. Chers professionnels, veuillez m'éclairer, je vous en serais très reconnaissant.


 

Question Puis-je écrire un programme dans Metatrader 4 pour ouvrir de 2 à 250 positions de mon choix avec un stoploss et un profit définis en un clic ? Ainsi, je n'ai pas besoin d'en ouvrir manuellement un à la fois.

 
fxtz:

Question Puis-je écrire un programme dans Metatrader 4 pour ouvrir de 2 à 250 positions de mon choix avec un stoploss et un profit définis en un clic ? Vous n'avez pas besoin d'ouvrir un par un

Oui, vous pouvez. Mais vous posez la question au mauvais endroit - ici, sur MT5.

Il existe plusieurs fils de discussion pour les débutants sur MT4.

Par exemple - ici.

 
antonsinichkin:
Bonjour. Avant-hier, j'ai commencé à étudier le MQL.


Le testeur donne ce résultat :


Où est le piège que je n'arrive pas à comprendre. Mesdames et Messieurs les professionnels, veuillez m'éclairer, je vous en serai très reconnaissant.



Traduisez-le en chaîne de caractères avant l'impression. Ou expliquer ce qui ne va pas.
 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".
 
Bon après-midi. Après la dernière mise à jour de MT5 (build 1604), mes indicateurs ne fonctionnent plus correctement. J'utilise
Les indicateurs dits "liquides". Par exemple, j'ai plusieurs stochastiques multi-périodes dans une fenêtre. Eh bien, maintenant les courts sont tirés
Comme précédemment, les plus longs ne sont dessinés que sur quelques barres et les plus longs ne sont pas dessinés du tout.

J'ai l'impression qu'ils ont soudainement commencé à manquer d'histoire. Pouvez-vous me dire ce qui pourrait clocher ?
 
Je viens de passer de mql4 à mql5. Je teste un Expert Advisor sur l'indice RTS et j'ai maintenant le problème qu'il ouvre plusieurs transactions, mais l'une des conditions pour ouvrir une transaction est la suivante : si (...)OrdersTotal()==0). Pourquoi cette condition ne fonctionne-t-elle pas ? Que puis-je faire pour n'ouvrir qu'un seul poste ?
 
RogozaIV:
Je viens de passer de mql4 à mql5. Je teste un Expert Advisor sur l'indice RTS et j'ai un problème d'ouverture de plusieurs positions, bien que l'une des conditions d'ouverture d'une position soit spécifiée : if (...OrdersTotal()==0). Pourquoi cette condition ne fonctionne-t-elle pas ? Que puis-je faire pour n'ouvrir qu'une seule transaction ?
PositionsTotal()
Raison: