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

 
mila.com:

Merci, est-ce correct ?

label =ObjectGetInteger(0,nm,OBJPROP_COLOR,0);

if(label==Lime) BUY_ = true;

Non, c'est comme ça que vous obtenez les données de couleur en tant que type int.

Essayez de voir ce qui est imprimé dans le commentaire.

Comment( ColorToString((color)ObjectGetInteger(0,"NaneOBJ",OBJPROP_COLOR,0), true) );

Lire la suite de la conversion

 
Vitaly Muzichenko:

Lire la suite de la conversion

Merci, la condition elle-même est-elle correcte ?
 
mila.com:
Merci, la condition elle-même est-elle correcte ?
string label = ColorToString((color)ObjectGetInteger(0,"MP140269",OBJPROP_COLOR,0), true);
if(label==Lime) BUY_ = true;

if(label==Red) BUY_ = false;
Probablement pas. Si les données sont de typechaîne, vous devez les mettre entre guillemets et écrire une correspondance de couleur caractère par caractère : "clrLime".
 
Vitaly Muzichenko:
Probablement pas. Si les données sont de typechaîne, vous devez les mettre entre guillemets et écrire une correspondance de couleur caractère par caractère : "clrLime".
Merci, ça a marché)
 
Vitaly Muzichenko:
Probablement pas. Si les données sont de typechaîne de caractères, vous devez les mettre entre guillemets et écrire une correspondance de couleur caractère par caractère : "clrLime".
Non, vous n'avez pas besoin de le mettre entre guillemets - ce sont des constantes. C'est-à-dire que cela devrait être comme ceci : if(label==clrLime) {}
 
Artyom Trishkin:
Non, il n'a pas besoin d'être entre guillemets - ce sont des constantes. C'est-à-dire que cela devrait être comme ceci : if(label==clrLime) {}

Merci, ça marche.

Pourriez-vous me dire comment obtenir le niveau de l'indicateur stochastique correctement, à partir de la trame temporelle haute.

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

Lorsque l'indicateur est placé sur une échelle de temps élevée, tout est correct, la flèche est placée lorsque la ligne de l'indicateur est au-dessus de 55.

Quand on passe à un graphique inférieur, c'est le chaos.

 
mila.com:

Merci, ça marche.

Pourriez-vous me dire comment obtenir le niveau de l'indicateur stochastique correctement, à partir de la trame temporelle haute.

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

Lorsque l'indicateur est placé sur une échelle de temps élevée, tout est correct, la flèche est placée lorsque la ligne de l'indicateur est au-dessus de 55.

Quand on passe à une carte plus basse, c'est le chaos.

Si vous parlez du cycle de l'indicateur, alors pour savoir quelle barre du cadre supérieur correspond à la barre, indiquée par l'indice du cycle dans le cadre inférieur, vous devez obtenir le temps i de la barre . Ensuite, ce temps est utilisé pour identifier la barre de la highframe qui correspond à ce temps. Par exemple : une mesure de H4 correspond à quatre mesures de H1. Par conséquent, quatre valeurs de l'indice de cycle i de H1 indiqueront la même barre sur H4.

D'après vos variables (leurs noms), je ne comprends pas de quelle barre vous tirez les valeurs. Il est donc difficile de dire autre chose que la théorie.

 
Artyom Trishkin:

Si vous parlez de l'indicateur de cycle, pour savoir quelle barre du cadre temporel supérieur correspond à la barre indiquée par l'indice de cycle dans le cadre temporel inférieur, vous devez obtenir le temps de la barre i. Ensuite, ce temps est utilisé pour identifier la barre de la highframe qui correspond à ce temps. Par exemple : une mesure de H4 correspond à quatre mesures de H1. De même, quatre valeurs de l'indice de cycle i de l'échelle de temps H1 indiqueront la même barre sur l'échelle de temps H4.

A partir de vos variables (leurs noms) je ne peux pas comprendre à partir de quelle barre vous obtenez les valeurs. Il est donc difficile de dire autre chose que la théorie.

L'indicateur est placé sur M1.

La condition principale pour la flèche ascendante est la ligne d'indicateur sur M5 au-dessus du niveau 55.

Cette condition n'est pas remplie, même si la ligne est en dessous du niveau 55 sur M5, la flèche est toujours placée.

 

comment écrire la condition "si le haut de 1 barre est supérieur au bas de 3..." dans le robot.

Le déclencheur ne doit pas être "OnTick()".

mais chaque fois que 0 barre devient 1

 
trader781:

comment écrire la condition "si le haut de 1 barre est supérieur au bas de 3..." dans le robot.

Le déclencheur ne doit pas être "OnTick()".

mais chaque fois que 0 barre devient 1

Vous pourriez faire ce qui suit

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CNevBar
  {
private:
   datetime          curbar;
   datetime          lastbar;
public:
                     CNevBar();
                    ~CNevBar();
   bool              new_bar(string symbol,ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
  {
   curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return(true);
     }
   return(false);
  }

CNevBar newbar;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(newbar.new_bar(_Symbol,PERIOD_CURRENT))
     {
      if(High[1]>Low[3])
        {

        }
     }

  }
//+------------------------------------------------------------------+

...