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

 
klycko DEAL_ENTRY_OUT.
Mais je ne comprends pas comment l'utiliser.

Merci de m'aider.

Je vous prie d'agréer, Monsieur, l'expression de mes salutations distinguées.


Vous êtes dans la bonne direction. Mais pas assez attentif


 
klycko DEAL_ENTRY_OUT.
Mais je ne comprends pas comment l'utiliser.
void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // структура торговой транзакции
   const MqlTradeRequest&        request, // структура запроса
   const MqlTradeResult&         result   // структура ответа
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_OUT)
        {

           //---

        }

Cordialement, Vladimir.

 
Alexey Viktorov #:

Vous êtes dans la bonne direction. Mais pas assez attentif

Bonjour Alexei, c'est formidable que vous souteniez les débutants qui apprennent un langage de programmation et que vous ne vous lassiez pas des gens comme nous. Merci beaucoup!

Quel est le principal problème des débutants ? Je ne parlerai qu'en mon nom. Oui, en effet, je ne comprends pas toujours comment appliquer les nombreuses possibilités offertes par le langage de programmation MQL5. Sans une formation de base ou une pratique de la programmation dans des langages de haut niveau, il est très difficile d'aborder ce sujet. Seuls les membres du forum comme vous m'aident. Je suis conscient que de nombreuses personnes sont fatiguées (et n'ont parfois ni le temps ni la patience) d'interpeller constamment un nouveau venu qui est soudainement apparu sur le forum.

Je tiens à exprimer une fois de plus ma gratitude à tous ceux qui répondent à nos questions dilettantes et je souhaite que Dieu vous accorde santé, longue vie, chance et prospérité !!!!.

Bien à vous, Vladimir.

 

Bonjour à tous.
S'il vous plaît, dites-moi comment ajouter l'indicateur Accelerator Oscillator pour donner un signal de VENTE sur la couleur rouge et un signal d'ACHAT sur la couleur verte, à la clôture de la dernière barre.

Merci de votre compréhension.

 
makssub Accelerator Oscillator pour donner un signal de VENTE sur la couleur rouge et un signal d'ACHAT sur la couleur verte, à la clôture de la dernière barre.

Merci de votre compréhension.

Connectez l'indicateur à l'Expert Advisor et obtenez ses données par CopyBuffer(). Le tampon de couleur a l'index 1, où 0 est vert et 1 est rouge.
Документация по MQL5: Технические индикаторы / iAC
Документация по MQL5: Технические индикаторы / iAC
  • www.mql5.com
iAC - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Connecter l'indicateur à l'Expert Advisor et obtenir ses données par CopyBuffer(). Le tampon de couleur a l'index 1, où la valeur 0 correspond au vert et la valeur 1 au rouge.

Si vous le voulez bien. Pouvez-vous me donner un exemple ?

MQL5 est difficile pour moi après MQL4.

 
makssub #:

Si ce n'est pas trop difficile. Pouvez-vous me donner un exemple ?

MQL5 est difficile pour moi après MQL4.

Les exemples sont dans les liens de mon post ci-dessus
 

Bonjour.

Il y a un indicateur ADX dans la base de code. Il contient ce morceau de code

//--- set draw begin
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtADXPeriod<<1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,ExtADXPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,ExtADXPeriod);

Si

ExtADXPeriod=14

il s'avère que ExtADXPeriod<<1 est égal à la valeur 9.

Pourquoi avons-nous besoin d'une telle entrée alors ? Ne peut-on pas l'écrire sans décalage de bits ?

ExtADXPeriod<<1

Code complet de l'indicateur ci-dessous


//+------------------------------------------------------------------+
//|                                                          ADX.mq5 |
//|                             Copyright 2000-2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2000-2023, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property description "Average Directional Movement Index"
#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  LightSeaGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_type2   DRAW_LINE
#property indicator_color2  YellowGreen
#property indicator_style2  STYLE_DOT
#property indicator_width2  1
#property indicator_type3   DRAW_LINE
#property indicator_color3  Wheat
#property indicator_style3  STYLE_DOT
#property indicator_width3  1
#property indicator_label1  "ADX"
#property indicator_label2  "+DI"
#property indicator_label3  "-DI"
//--- input parameters
input int InpPeriodADX=14; // Period ADX
//--- indicator buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];

int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      PrintFormat("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else
      ExtADXPeriod=InpPeriodADX;
//--- indicator buffers
   SetIndexBuffer(0,ExtADXBuffer);
   SetIndexBuffer(1,ExtPDIBuffer);
   SetIndexBuffer(2,ExtNDIBuffer);
   SetIndexBuffer(3,ExtPDBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(4,ExtNDBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,ExtTmpBuffer,INDICATOR_CALCULATIONS);
//--- indicator digits
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set draw begin
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtADXPeriod<<1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,ExtADXPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,ExtADXPeriod);
//--- indicator short name
   string short_name="ADX("+string(ExtADXPeriod)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- checking for bars count
   if(rates_total<ExtADXPeriod)
      return(0);
//--- detect start position
   int start;
   if(prev_calculated>1)
      start=prev_calculated-1;
   else
     {
      start=1;
      ExtPDIBuffer[0]=0.0;
      ExtNDIBuffer[0]=0.0;
      ExtADXBuffer[0]=0.0;
     }
//--- main cycle
   for(int i=start; i<rates_total && !IsStopped(); i++)
     {
      //--- get some data
      double high_price=high[i];
      double prev_high =high[i-1];
      double low_price =low[i];
      double prev_low  =low[i-1];
      double prev_close=close[i-1];
      //--- fill main positive and main negative buffers
      double tmp_pos=high_price-prev_high;
      double tmp_neg=prev_low-low_price;
      if(tmp_pos<0.0)
         tmp_pos=0.0;
      if(tmp_neg<0.0)
         tmp_neg=0.0;
      if(tmp_pos>tmp_neg)
         tmp_neg=0.0;
      else
        {
         if(tmp_pos<tmp_neg)
            tmp_pos=0.0;
         else
           {
            tmp_pos=0.0;
            tmp_neg=0.0;
           }
        }
      //--- define TR
      double tr=MathMax(MathMax(MathAbs(high_price-low_price),MathAbs(high_price-prev_close)),MathAbs(low_price-prev_close));
      if(tr!=0.0)
        {
         ExtPDBuffer[i]=100.0*tmp_pos/tr;
         ExtNDBuffer[i]=100.0*tmp_neg/tr;
        }
      else
        {
         ExtPDBuffer[i]=0.0;
         ExtNDBuffer[i]=0.0;
        }
      //--- fill smoothed positive and negative buffers
      ExtPDIBuffer[i]=ExponentialMA(i,ExtADXPeriod,ExtPDIBuffer[i-1],ExtPDBuffer);
      ExtNDIBuffer[i]=ExponentialMA(i,ExtADXPeriod,ExtNDIBuffer[i-1],ExtNDBuffer);
      //--- fill ADXTmp buffer
      double tmp=ExtPDIBuffer[i]+ExtNDIBuffer[i];
      if(tmp!=0.0)
         tmp=100.0*MathAbs((ExtPDIBuffer[i]-ExtNDIBuffer[i])/tmp);
      else
         tmp=0.0;
      ExtTmpBuffer[i]=tmp;
      //--- fill smoothed ADX buffer
      ExtADXBuffer[i]=ExponentialMA(i,ExtADXPeriod,ExtADXBuffer[i-1],ExtTmpBuffer);
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.11.30
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Novichokkk #:

Si

ExtADXPeriod=14

il s'avère queExtADXPeriod<<1 est égal à la valeur 9

est égal à 28 (14<<1 est égal à 14*2, tant qu'il y a assez de chiffres)

Ne faites pas attention, de toute façon le compilateur calculera les expressions constantes à la compilation et elles n'entreront pas dans le code. Seulement leur résultat

il pourrait s'agir d'une optimisation prématurée ou l'auteur a voulu montrer qu'il est cool.

 
Maxim Kuznetsov #:

est égal à 28 (14<<1 est égal à 14*2, tant qu'il y a suffisamment de chiffres)

ne faites pas attention, de toute façon le compilateur comptera les expressions constantes connues à la compilation et elles n'entreront pas dans le code. Seul leur résultat

il pourrait s'agir d'une optimisation prématurée ou l'auteur voulait montrer qu'il est cool.

1-Pourquoi 28 ?

14 est binaire. C'est 1110.

Décalez d'un bit vers la gauche, c'est 0111, reconvertissez en décimal, c'est 9. 1*1+1+1*2+1*4=7 (faux et non 9).


2-J'aimerais quand même un exemple concret dans ce cas, qu'est-ce qui est plus correct d'insérer dans une telle construction au lieu deExtADXPeriod<<1?