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

 
Taras Slobodyanik:

Initialisation des variables dans OnInit (y compris redessiner les objets)


Expliquez ce dont il s'agit.

Je l'ai ajouté à OnInit après avoir créé une étiquette

    ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);
    ChartRedraw();


Mais le résultat est le même.

 
psyman:


Expliquez ce dont il s'agit.

Je l'ai ajouté à OnInit après avoir créé la balise


mais le résultat est le même.

J'ai besoin de voir le code, ce qu'il y a là...

ps. le code ci-dessus fonctionne bien (je ne vois pas de problème)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. bien que j'ai remplacé la variable Bid par Bid0

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Bonjour, comment écrire l'ordre à ouvrir lorsque le prix touche un muvingien?
 
Ivan Rozhkov:
Bonjour, comment écrire l'ordre à ouvrir lorsque le prix touche un muvingien ?
if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik:

Je dois regarder le code pour voir ce qu'il y a...

psst. le code ci-dessus fonctionne bien (pas de problème).
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. bien que j'ai remplacé la variable Bid par Bid0

J'ai oublié d'ajouter que c'est moi qui teste en 5. Dans MT4, le marqueur vertical se met rapidement en place lorsque vous ouvrez le graphique, sans avoir à attendre un tick ou à déplacer la souris. Quelques fois, il y a eu des problèmes avec le décalage horizontal, qui n'ont pu être résolus qu'en recompilant l'indicateur.

 
psyman:


J'ai essayé, il faut bouger la souris pour récupérer la marque. C'est la même béquille, mais dans une autre main :-)

Et le passage d'un graphique à l'autre pourCHARTEVENT_CHART_CHANGE n'est pas un événement.

Quelqu'un peut-il penser à un moyen de surmonter cette anomalie ?


Print m'affiche un message si je change de fenêtre graphique, que ce soit en avant ou en arrière (je suis sur MT4, mais il n'est pas écrit dans la documentation de MT4 que le changement de graphique peut être pris en compte comme un événementCHARTEVENT_CHART_CHANGE).

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(id==CHARTEVENT_CHART_CHANGE) Print("graph");
}

Mais oui, c'est toujours une méthode de béquille. Nous devons découvrir pourquoi la coordonnée Y est différente lorsqu'on passe à un autre graphique. Mais en regardant le code, nous pouvons conclure que leChartTimePriceToXY donne des résultats différents pour une raison quelconque.

 
psyman:

J'ai oublié d'ajouter que je teste ceci en 5. Dans MT4, le marqueur vertical se met rapidement en place dès l'ouverture du graphique, sans qu'il soit nécessaire d'attendre un tick ou de déplacer la souris. Quelques fois, il y a eu des problèmes avec le décalage horizontal, qui n'ont pu être résolus qu'en recompilant l'indicateur.

Eh bien, dans Five, il y a beaucoup de "fonctionnalités" - de la file d'attente sur le graphique à la création de barres à partir des minutes, en passant par le déclenchement de la désinitération précédente après la désinitération actuelle).

Vous devez donc vérifier les barres/graphiques/objets - à quel moment une erreur se produit et la corriger.

 
Taras Slobodyanik:


en général - vous devez vérifier les barres/graphiques/objets - à quel moment une erreur se produit et la corriger.


Comment s'y prendre, par où commencer ?

 
psyman:


Comment s'y prendre, par où commencer ?

faire une impression partout, c'est-à-dire que nous imprimons l'offre (la date du jour est aussi possible) dans oninit et ensuite dans le calcul...
Je peux télépathier que cette histoire ne se construit pas immédiatement et que les barres apparaissent plus tard.

 
Taras Slobodyanik:

faire une impression partout, c'est à dire dans oninit imprimer l'offre (vous pouvez aussi imprimer la date actuelle) et ensuite lors du calcul aussi...
Je télépathe que cette histoire n'a pas le temps de se construire immédiatement et les barres apparaissent plus tard...

Pour le prochain code, une histoire en images :

//+------------------------------------------------------------------+
//|                                              !_clr_indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window


string objname="Bid";
input color Bid_color = clrCrimson;

int OnInit()
  {

int x,y;
double Bid0 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);  //ширина графика



        Print("1 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );

   ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
   
   ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid0, _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Bid_color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");

        ChartTimePriceToXY(0, 0, TimeCurrent(), Bid0, x, y);
        Print("2 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );
         
        ObjectSetInteger(0, objname, OBJPROP_XDISTANCE, width-60);

   ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);

   

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

return(rates_total);

  }

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) 
  { 

int x2,y2;
double Bid2 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
double  cprice;
datetime ctime;
int      cwindow=0;



if(id==CHARTEVENT_CHART_CHANGE) 
   {
   



           ChartTimePriceToXY(0, 0, TimeCurrent(), Bid2, x2, y2); 
      
      Print("5 Bid2 = ", Bid2,  " x2 = ", x2, " y2 = ", y2," TimeCurrent2()=", TimeCurrent() );
      
        ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y2);
   
   ChartXYToTimePrice(0,x2,x2,cwindow, ctime, cprice);
   

   }



  }



void OnDeinit(const int reason) 
   { 

      ObjectDelete(0,objname);
   } 
 
 


Déconnexion du réseau, ajout d'un indicateur

Je passe au tableau suivant


y2 a changé de valeur, je reviens en arrière


y2 a rendu sa valeur, mais le marqueur est compté par la valeur "partie" ! Je fais tourner la molette de la souris.

Le marqueur est de nouveau à sa place !