Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1483

 
klycko DEAL_ENTRY_OUT değiştiricisini kullanmam gerekiyor.
Ama nasıl kullanılacağını anlayamıyorum.

Lütfen bana yardım edin.

Saygılarımla, Alexander


Doğru yoldasınız. Ama yeterince dikkatli değilsiniz.


 
klycko DEAL_ENTRY_OUT değiştiricisini kullanmam gerekiyor.
Ama nasıl kullanılacağını anlayamıyorum.
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)
        {

           //---

        }

Saygılarımla, Vladimir.

 
Alexey Viktorov #:

Doğru yoldasın. Ama yeterince dikkatli değilsiniz.

Merhaba Alexei, bir programlama dili öğrenmeye yeni başlayanları desteklemeniz ve bizim gibi insanlardan bıkmamanız harika. Çok teşekkür ederim!

Yeni başlayanların ana sorunu nedir. Ben sadece kendi adıma konuşacağım. Evet, gerçekten de MQL5 programlama dilinin sunduğu çeşitli olanakların nasıl uygulanacağını her zaman anlamıyorum. Üst düzey dillerde temel eğitim veya programlama pratiği olmadan bu konuya girmek çok zor. Sadece sizin gibi forum üyeleri bana yardımcı oluyor. Birçok insanın, aniden forumda beliren yeni bir üyeyi sürekli uyarmaktan yorulduğunun (ve bazen yeterli zaman veya sabra sahip olmadığının) farkındayım.

Zahmetli sorularımıza yanıt veren herkese bir kez daha şükranlarımı sunuyor ve Tanrı'dan hepinize sağlık, uzun ömür, iyi şans ve refah diliyorum!!!!

Saygılarımla, Vladimir.

 

Herkese iyi günler.
Lütfen, son çubuğun kapanışında kırmızı renkte SAT sinyali ve yeşil renkte AL sinyali vermek için Hızlandırıcı Osilatör göstergesini nasıl ekleyeceğimi söyleyin.

Teşekkürler

 
makssub Hızlandırıcı Osilatör göstergesini nasıl vidalayacağımı söyleyin.

Teşekkürler

Göstergeyi Uzman Danışmana bağlayın ve CopyBuffer() aracılığıyla verilerini alın. Renk tamponu 1 indeksine sahiptir, burada 0 yeşil ve 1 kırmızıdır.
Документация по MQL5: Технические индикаторы / iAC
Документация по MQL5: Технические индикаторы / iAC
  • www.mql5.com
iAC - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Göstergeyi Uzman Danışmana bağlayın ve CopyBuffer() aracılığıyla verilerini alın. Renk tamponunun indeksi 1'dir, burada 0 değeri yeşil, 1 kırmızıdır.

Eğer sakıncası yoksa. Bana bir örnek verebilir misiniz?

MQL5, MQL4'ten sonra benim için zor.

 
makssub #:

Eğer çok sorun olmayacaksa. Bana bir örnek verebilir misiniz?

MQL4'ten sonra MQL5 benim için zor.

Örnekler yukarıdaki yazımdaki bağlantılarda
 

Merhaba.

Kod tabanında bir ADX göstergesi var. Bu kod parçasını içeriyor

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

Eğer

ExtADXPeriod=14

ExtADXPeriod<<1 değerinin 9 değerine eşit olduğu ortaya çıkıyor.

O zaman neden böyle bir girdiye ihtiyacımız var? Bit kaydırmaları olmadan yazılamaz mı?

ExtADXPeriod<<1

tam gösterge kodu aşağıda


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

Eğer

ExtADXPeriod=14

o zamanExtADXPeriod<<1 değeri 9 değerine eşittir

28'e eşittir (14<<1, yeterli basamak olduğu sürece 14*2 gibidir)

Dikkat etmeyin, zaten derleyici const ifadeleri derleme sırasında hesaplayacak ve bunlar koda girmeyecektir. Sadece sonuçları

Erken optimizasyon olabilir ya da yazar havalı olduğunu göstermek istemiş olabilir.

 
Maxim Kuznetsov #:

28'e eşittir (14<<1, yeterli basamak olduğu sürece 14*2 gibidir)

dikkat etmeyin, zaten derleyici derleme sırasında bilinen const ifadeleri sayacak ve bunlar koda girmeyecektir. Sadece sonuçları

Erken optimizasyon olabilir ya da yazar havalı olduğunu göstermek istemiş olabilir.

1-Neden 28?

14 ikiliktir. 1110'dur.

Bir bit sola kaydırın, 0111 olur, tekrar onluğa çevirin, 9 olur. 1*1+1+1*2+1*4=7 (9 değil yanlış).


2-Bu durumda hala somut bir örnek istiyorum,ExtADXPeriod<<1 yerine böyle bir yapıya ne eklemek daha doğrudur?

Neden: