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

 

Les gars, j'ai une fonction OnTimer() qui doit être exécutée au début de chaque jour et à un certain résultat d'exécution, l'EA doit se mettre en veille. Si je fixe le moment de la prochaine exécution de la fonction OnTimer() au début du jour suivant et qu'ensuite l'EA se met en veille jusqu'au même moment (-1 seconde par exemple), le compteur de temps continuera à tourner et la fonction sera exécutée après être sortie de la veille au bout d'une seconde ?


P. S. Autre question un peu inquiétante : comment la documentation a-t-elle pu être rédigée dans un style aussi mielleux ? Je veux dire les espaces de code et la mise en scène des parenthèses, je n'ai jamais vu personne à part les "écoliers des laboratoires de programmation" et les gars qui écrivent en mql produire quelque chose comme ceci

for(int x=0;x<10;x++)

{

}


Le site se corrige d'une manière ou d'une autre, à propos des parenthèses je veux dire que les parenthèses sont placées avec la tabulation, c'est-à-dire qu'on ne peut pas tracer verticalement de manière intuitive où va une parenthèse.

 
ukrop1203:

Les gars, j'ai une fonction OnTimer() qui doit être exécutée au début de chaque jour et à un certain résultat d'exécution, l'EA doit se mettre en veille. Si je fixe le moment de la prochaine exécution de la fonction OnTimer() au début du jour suivant et qu'ensuite l'EA se met en veille jusqu'au même moment (-1 seconde par exemple), le compteur de temps continuera à tourner et la fonction sera exécutée après être sortie de la veille au bout d'une seconde ?


P. S. Autre question un peu inquiétante : comment la documentation a-t-elle pu être rédigée dans un style aussi mielleux ? Je veux dire les espaces de code et l'empilement des parenthèses, je n'ai jamais vu personne, à part les "écoliers des laboratoires de programmation" et les gars qui écrivent en mql, écrire quelque chose comme ceci

for(int x=0;x<10;x++)

{

}


Quant aux parenthèses, je veux dire que les parenthèses sont placées avec la tabulation, c'est-à-dire qu'il est impossible de suivre intuitivement où une parenthèse va verticalement.

Vous ne pouvez pas tracer verticalement où va la parenthèse, donc vous ne pourrez pas voir où elle va. Vous pouvez le mettre en veille pendant 5 minutes et mettre Print en OnTimer toutes les 10 secondes. Cela répondra à votre question. Pourquoi aller dormir si vous pouvez simplement changer la clé qui détermine le mode de l'algorithme principal dans n'importe quelle autre fonction ?

 

Bonjour à tous !


QUESTION sur MT5. Les marques de texte (chiffres) sont placées sous la forme d'une fine barre grise. Les points sont un tampon de contrôle pour visualiser les erreurs de MT5 dans ma tête. ....


Comparé à la documentation pour OBJ_TEXT, semble être le même....

//| Вывод текстовой метки с размером интервала "тела" свечи          |
//+------------------------------------------------------------------+
void LabText(const long  chart_ID=0,
             string      name="Text", 
             string      text="text", // ТЕКСТ ДЛЯ ВЫВОДА НА ГРАФИК
             datetime    time=0, 
             double      price=0,
             int         fontsizes=0,
             color       clr=0)
  {
  if(ObjectFind(chart_ID,name)!=0)
     {
   ObjectCreate(chart_ID,name,OBJ_TEXT,0,0,0);
   ObjectSetInteger(chart_ID,name,OBJPROP_TIME,time);
   ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price);
//--- установим угол наклона текста 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,0.0); 
//--- установим способ привязки 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,ANCHOR_LEFT); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,"Arial");
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,fontsizes);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true);
     }
  }

********************** В КОДЕ *********************************
    

    double  LW=iLow(NULL,PERIOD_H1,i);  //   ЦИКЛ I

                        *********** 

   LabText(0,"NAME  ("+string(i)+")",DoubleToString(bbull[i],0),iTime(NULL,PERIOD_H1,i),
              LW-(8*_Point),12,clrWhite);
   ExtLineBuffer1[i]=iHigh(NULL,PERIOD_H1,i);


 
kopeyka2:

Bonjour à tous !


QUESTION sur MT5. Les marques de texte (chiffres) sont placées sous la forme d'une fine barre grise. Les points sont un tampon de contrôle pour visualiser les erreurs de MT5 dans ma tête. ....


Comparé à la documentation pour OBJ_TEXT, semble être le même....


Voir ce que vous passez dans le paramètre fontsizes

 
Artyom Trishkin:

Voir ce que vous passez dans le paramètre fontsizes

MERCI ! !! J'ai introduit destailles de police à partir de variables globales. Définissez-la dans la fonction void LabText. Ça a marché...


 

Je veux ajouter et supprimer des indicateurs sur le graphique avec le script, car l'application du modèle supprime toutes les lignes dessinées.


#property indicator_label1  "MA8"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1


int indicator_handle;

void OnStart()
  {

   indicator_handle = iMA(0,0,8,0,MODE_EMA,PRICE_CLOSE);

   Print(indicator_handle);

   //ChartIndicatorAdd(0,0,indicator_handle);

   
  }

Je reçois une réponse

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) cannot load indicator 'Moving Average' [4302]

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) -1


Le code se compile pourtant sans erreur.


 
psyman:

Je veux ajouter et supprimer des indicateurs sur le graphique avec le script, car l'application du modèle supprime toutes les lignes dessinées.


Je reçois une réponse

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) cannot load indicator 'Moving Average' [4302]

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) -1


Bien que le code se compile sans erreur.


ERR_MARCHÉ_NON_SÉLECTIONNÉ

4302

Symbole non sélectionné dans MarketWatch


Pourquoi mettez-vous 0 à la place du nom du symbole ? Si vous voulez la valeur actuelle, vous devez écrire NULL, ou son nom, par exemple "EURUSD".

iMA

Renvoie la poignée de l'indicateur de moyenne mobile. Un seul tampon.

intiMA(
chaîne de caractères symbole, // nom du symbole
ENUM_TIMEFRAMESpériode, // période
int ma_period, // période de calcul de la moyenne
int ma_shift, // décalage horizontal de l'indicateur
ENUM_MA_METHODma_method, // type de lissage
ENUM_APPLIED_PRICE applied_price // type de prix ou de poignée
) ;

Paramètres

symbole

[Nom du symbole de l'instrument dont les données seront utilisées pour calculer l'indicateur. NULL signifie le symbole actuel.

période

[La valeur de la période peut être une des valeurs de l'énumération ENUM_TIMEFRAMES, 0 signifie la période actuelle.

ma_période

[Période de moyenne pour le calcul de la moyenne mobile.

ma_shift

[Décalage de l'indicateur par rapport au graphique des prix.

ma_méthode

[Méthode de calcul de la moyenne. Peut être l'une des valeurs de ENUM_MA_METHOD.

prix appliqué

[Prix utilisé. Peut être l'une des constantes de prix de ENUM_APPLIED_PRICE ou un handle d'un autre indicateur.

Valeur retournée

Renvoie le handle de l'indicateur technique spécifié, en cas d'échec, renvoie INVALID_HANDLE. La fonction IndicatorRelease() est utilisée pour libérer la mémoire de l'ordinateur d'un indicateur qui n'est plus utilisé.

 
Bonjour, pourriez-vous me dire comment faire pour qu'un tableau de poignées MA renvoie des prix normaux, je veux dire comme ils devraient l'être, 5 décimales, pas 8
int OnInit()
  {
 ima1_handle        = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);
 ima2_handle        =  iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
 Stoch_handle       = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
 ATR_handle         = iATR        (Symbol(),0,21);                              //хендл

   if(Digits==3 || Digits==5)
     {
      Slippage*=10;
      TrailingStop *= 10;
      TrailingStep *= 10;
     }
   return(0);
  }
void OnDeinit(const int reason)
  {

  }

void OnTick()
  { 
    double ima1_massiv [];                                          //динамический массив для быстрой машки
    ArraySetAsSeries(ima1_massiv, true);   
    int ima_count1 = CopyBuffer(ima1_handle,0,0,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    //double ima1_normal = NormalizeDouble(ima1_massiv[0], Digits);
    string ima1_massiv_str0 = DoubleToString (ima1_massiv[0]);
    string ima1_massiv_str1 = DoubleToString (ima1_massiv[1]);
    printf ("сегодня = "+ ima1_massiv_str0 + " вчера = "+ ima1_massiv_str1);  
    
  }    
langage mt5
 
Sergey Lobzankin:
Bonjour, pourriez-vous me dire comment faire pour qu'un tableau de poignées MA renvoie des prix normaux, je veux dire comme ils devraient l'être, 5 chiffres après la virgule et non 8.
if(Digits==3 || Digits==5)
     {
      Slippage*=10;
      TrailingStop *= 10;
      TrailingStep *= 10;
     }
   return(0);

cool)

double normalMA=NormalizeDouble(MA,_Digits);    
 

Bonjour, pourriez-vous me dire comment faire pour qu'un tableau de poignées MA renvoie des prix normaux, je veux dire comme ils devraient l'être, 5 chiffres après la virgule et non 8.

langue mt5

DoubleToStr dans mt5, il n'y a pas deDoubleToString(); mais cela ne sert à rien
DoubleToStr - Преобразование данных - Справочник MQL4
DoubleToStr - Преобразование данных - Справочник MQL4
  • docs.mql4.com
DoubleToStr - Преобразование данных - Справочник MQL4