Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1483

 
klycko DEAL_ENTRY_OUT.
Mas não consigo entender como usá-lo.

Por favor, me ajude.

Atenciosamente, Alexander


Você está na direção certa. Mas não está suficientemente atento


 
klycko DEAL_ENTRY_OUT.
Mas não consigo entender como usá-lo.
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)
        {

           //---

        }

Atenciosamente, Vladimir.

 
Alexey Viktorov #:

Você está na direção certa. Mas não está suficientemente atento

Olá, Alexei, é ótimo que você apoie os iniciantes no aprendizado de uma linguagem de programação e não se canse de pessoas como nós. Muito obrigado!

Qual é o principal problema dos iniciantes? Vou falar apenas por mim. Sim, de fato, nem sempre entendo como aplicar a variedade de possibilidades oferecidas pela linguagem de programação MQL5. Sem educação básica ou prática de programação em linguagens de alto nível, é muito difícil entrar nesse tópico. Somente membros do fórum como vocês me ajudam. Sei que muitas pessoas estão cansadas (e, às vezes, não têm tempo ou paciência suficientes) de ficar insistindo constantemente com um novato que apareceu de repente no fórum.

Gostaria de expressar minha gratidão mais uma vez a todos os que respondem às nossas perguntas diletantes e desejar - que Deus lhes conceda saúde, vida longa, boa sorte e prosperidade!!!!

Saudações, Vladimir.

 

Bom dia a todos.
Por favor, diga-me como adicionar o indicador Accelerator Oscillator para dar um sinal de VENDA na cor vermelha e um sinal de COMPRA na cor verde, no fechamento da última barra.

Muito obrigado

 
makssub Accelerator Oscillator para dar um sinal de VENDA na cor vermelha e um sinal de COMPRA na cor verde, no fechamento da última barra.

Muito obrigado

Conecte o indicador ao Expert Advisor e obtenha seus dados por meio de CopyBuffer(). O buffer de cores tem índice 1, em que 0 é verde e 1 é vermelho.
Документация по MQL5: Технические индикаторы / iAC
Документация по MQL5: Технические индикаторы / iAC
  • www.mql5.com
iAC - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Conecte o indicador ao Expert Advisor e obtenha seus dados por meio de CopyBuffer(). O buffer de cores tem índice 1, em que o valor 0 é verde e 1 é vermelho.

Se você não se importar. Pode me dar um exemplo?

A MQL5 é difícil para mim depois da MQL4.

 
makssub #:

Se não for muito trabalhoso. Você pode me dar um exemplo?

A MQL5 é difícil para mim depois da MQL4.

Os exemplos estão nos links da minha postagem acima
 

Olá.

Há um indicador ADX na base de código. Ele contém este trecho de código

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

Se

ExtADXPeriod=14

verifica-se que ExtADXPeriod<<1 é igual ao valor 9.

Então, por que precisamos dessa entrada? Ela não pode ser escrita sem deslocamento de bits?

ExtADXPeriod<<1

código completo do indicador abaixo


//+------------------------------------------------------------------+
//|                                                          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 #:

Se

ExtADXPeriod=14

entãoExtADXPeriod<<1 é igual ao valor 9

é igual a 28 (14<<1 é como 14*2, desde que haja dígitos suficientes)

Não preste atenção, pois o compilador calculará as expressões const na compilação e elas não entrarão no código. Somente o resultado delas

pode ser uma otimização prematura ou o autor quis mostrar que é legal.

 
Maxim Kuznetsov #:

é igual a 28 (14<<1 é como 14*2, desde que haja dígitos suficientes)

não preste atenção, de qualquer forma o compilador contará as expressões const conhecidas na compilação e elas não entrarão no código. Somente o resultado delas

pode ser uma otimização prematura ou o autor quis mostrar que é legal.

1-Por que 28?

14 é binário. É 1110.

Deslocando um bit para a esquerda, é 0111, convertendo de volta para decimal, é 9. 1*1+1+1*2+1*4=7 (errado, não 9).


2-Eu ainda gostaria de um exemplo concreto nesse caso, o que é mais correto inserir em uma construção desse tipo em vez deExtADXPeriod<<1?

Razão: