Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1483

 
klycko DEAL_ENTRY_OUT.
Ma non riesco a capire come utilizzarlo.

Per favore, aiutatemi.

Cordiali saluti, Alexander


Siete nella direzione giusta. Ma non siete abbastanza attenti


 
klycko DEAL_ENTRY_OUT.
Ma non riesco a capire come utilizzarlo.
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)
        {

           //---

        }

Saluti, Vladimir.

 
Alexey Viktorov #:

Siete nella direzione giusta. Ma non siete abbastanza attenti

Ciao Alexei, è fantastico che tu sostenga i principianti nell'apprendimento di un linguaggio di programmazione e che non ti stanchi di persone come noi. Grazie mille!

Qual è il problema principale dei principianti? Parlerò solo per me. Sì, in effetti, non sempre capisco come applicare la varietà di possibilità offerte dal linguaggio di programmazione MQL5. Senza una formazione di base o una pratica di programmazione in linguaggi di alto livello, è molto difficile addentrarsi in questo argomento. Solo i membri del forum come voi mi aiutano. Mi rendo conto che molte persone sono stanche (e a volte non hanno abbastanza tempo o pazienza) di sollecitare continuamente un nuovo arrivato che è apparso improvvisamente sul forum.

Vorrei esprimere ancora una volta la mia gratitudine a tutti coloro che rispondono alle nostre domande dilettantesche e augurare - Dio conceda a tutti voi salute, lunga vita, fortuna e prosperità!!!!

Saluti, Vladimir.

 

Buongiorno a tutti.
Per favore, ditemi come aggiungere l'indicatore Accelerator Oscillator per dare un segnale di SELL sul colore rosso e un segnale di BUY sul colore verde, alla chiusura dell'ultima barra.

Grazie

 
makssub Accelerator Oscillator per dare un segnale di SELL sul colore rosso e un segnale di BUY sul colore verde, alla chiusura dell'ultima barra.

Grazie

Collegare l'indicatore all'Expert Advisor e ottenere i suoi dati tramite CopyBuffer(). Il buffer dei colori ha indice 1, dove 0 è verde e 1 è rosso.
Документация по MQL5: Технические индикаторы / iAC
Документация по MQL5: Технические индикаторы / iAC
  • www.mql5.com
iAC - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Collegare l'indicatore all'Expert Advisor e ottenere i suoi dati tramite CopyBuffer(). Il buffer dei colori ha indice 1, dove il valore 0 è verde, 1 è rosso.

Se non le dispiace. Mi può dare un esempio?

MQL5 è difficile per me dopo MQL4.

 
makssub #:

Se non è troppo disturbo. Mi può fare un esempio?

MQL5 è difficile per me dopo MQL4.

Gli esempi si trovano nei link nel mio post qui sopra
 

Salve.

Nella base di codice è presente un indicatore ADX. Contiene questo pezzo di codice

//--- 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

si scopre che ExtADXPeriod<<1 è uguale al valore 9.

Perché allora abbiamo bisogno di una voce del genere? Non è possibile scriverla senza bit shift?

ExtADXPeriod<<1

codice completo dell'indicatore qui sotto


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

alloraExtADXPeriod<<1 è uguale al valore 9

è uguale a 28 (14<<1 è come 14*2, purché ci siano abbastanza cifre)

Non fate attenzione, tanto il compilatore calcolerà le espressioni const in fase di compilazione e non entreranno nel codice. Solo il loro risultato

Potrebbe trattarsi di un'ottimizzazione prematura o l'autore ha voluto dimostrare di essere un tipo in gamba.

 
Maxim Kuznetsov #:

è uguale a 28 (14<<1 è come 14*2, purché ci siano abbastanza cifre)

Non fate attenzione, in ogni caso il compilatore conterà le espressioni const conosciute in fase di compilazione e non entreranno nel codice. Solo il loro risultato

potrebbe essere un'ottimizzazione prematura o l'autore ha voluto dimostrare di essere un tipo in gamba.

1-Perché 28?

14 è binario. È 1110.

Spostando un bit a sinistra, è 0111, convertito in decimale, è 9. 1*1+1+1*2+1*4=7 (sbagliato, non 9).


2-Vorrei ancora un esempio concreto in questo caso, cosa è più corretto inserire in una costruzione del genere al posto diExtADXPeriod<<1?