MG4 komut dosyalarını ve Uzman Danışmanları destekleyen test cihazı - sayfa 2

 
AlexeyVik :

Belki yaratıcılar, sıradan programcıların karşılaştığı bu tür zorlukları görmüyorlar.

Örneğin, bir zamanlar enstitüde BASIC okudum ve başka bir şey yok... Ve mql4'ü kendi başıma çalışmak zorunda kaldım, şimdi onunla hiçbir sorunum yok. Ve mql5'i anlamaya çalıştım, bu yüzden neredeyse bir hafta boyunca 100 satırdan az bir başlık içeren basit bir gösterge yazdım. Benim düşünceme göre, bir fark ve önemli bir fark var.

Bu bir efsane ve bunu biliyorsun.

Normal ATR.mq4'ü MetaTrader 4'ten alıyoruz. 104 satır var:

 //+------------------------------------------------------------------+
//|                                                          ATR.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright    "2005-2014, MetaQuotes Software Corp."
#property link          "https://www.mql4.com"
#property description "Average True Range"
#property strict

//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1  DodgerBlue
//--- input parameter
input int InpAtrPeriod= 14 ; // ATR Period
//--- buffers
double ExtATRBuffer[];
double ExtTRBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
   string short_name;
//--- 1 additional buffer used for counting.
   IndicatorBuffers( 2 );
   IndicatorDigits( Digits );
//--- indicator line
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,ExtATRBuffer);
   SetIndexBuffer ( 1 ,ExtTRBuffer);
//--- name for DataWindow and indicator subwindow label
   short_name= "ATR(" + IntegerToString (InpAtrPeriod)+ ")" ;
   IndicatorShortName(short_name);
   SetIndexLabel( 0 ,short_name);
//--- check for input parameter
   if (InpAtrPeriod<= 0 )
     {
       Print ( "Wrong input parameter ATR Period=" ,InpAtrPeriod);
       return ( INIT_FAILED );
     }
//---
   SetIndexDrawBegin( 0 ,InpAtrPeriod);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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[])
  {
   int i,limit;
//--- check for bars count and input parameter
   if (rates_total<=InpAtrPeriod || InpAtrPeriod<= 0 )
       return ( 0 );
//--- counting from 0 to rates_total
   ArraySetAsSeries (ExtATRBuffer, false );
   ArraySetAsSeries (ExtTRBuffer, false );
   ArraySetAsSeries (open, false );
   ArraySetAsSeries (high, false );
   ArraySetAsSeries (low, false );
   ArraySetAsSeries (close, false );
//--- preliminary calculations
   if (prev_calculated== 0 )
     {
      ExtTRBuffer[ 0 ]= 0.0 ;
      ExtATRBuffer[ 0 ]= 0.0 ;
       //--- filling out the array of True Range values for each period
       for (i= 1 ; i<rates_total; i++)
         ExtTRBuffer[i]= MathMax (high[i],close[i- 1 ])- MathMin (low[i],close[i- 1 ]);
       //--- first AtrPeriod values of the indicator are not calculated
       double firstValue= 0.0 ;
       for (i= 1 ; i<=InpAtrPeriod; i++)
        {
         ExtATRBuffer[i]= 0.0 ;
         firstValue+=ExtTRBuffer[i];
        }
       //--- calculating the first value of the indicator
      firstValue/=InpAtrPeriod;
      ExtATRBuffer[InpAtrPeriod]=firstValue;
      limit=InpAtrPeriod+ 1 ;
     }
   else
      limit=prev_calculated- 1 ;
//--- the main loop of calculations
   for (i=limit; i<rates_total; i++)
     {
      ExtTRBuffer[i]= MathMax (high[i],close[i- 1 ])- MathMin (low[i],close[i- 1 ]);
      ExtATRBuffer[i]=ExtATRBuffer[i- 1 ]+(ExtTRBuffer[i]-ExtTRBuffer[i-InpAtrPeriod])/InpAtrPeriod;
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


Aynı ATR.mq5'i MetaTrader 5'ten alıyoruz. 96 satır var.

 //+------------------------------------------------------------------+
//|                                                          ATR.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright    "2009, MetaQuotes Software Corp."
#property link          "https://www.mql5.com"
#property description "Average True Range"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots    1
#property indicator_type1   DRAW_LINE
#property indicator_color1  DodgerBlue
#property indicator_label1   "ATR"
//--- input parameters
input int InpAtrPeriod= 14 ;   // ATR period
//--- indicator buffers
double     ExtATRBuffer[];
double     ExtTRBuffer[];
//--- global variable
int        ExtPeriodATR;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit ()
  {
//--- check for input value
   if (InpAtrPeriod<= 0 )
     {
      ExtPeriodATR= 14 ;
       printf ( "Incorrect input parameter InpAtrPeriod = %d. Indicator will use value %d for calculations." ,InpAtrPeriod,ExtPeriodATR);
     }
   else ExtPeriodATR=InpAtrPeriod;
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtATRBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ExtTRBuffer, INDICATOR_CALCULATIONS );
//---
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,InpAtrPeriod);
//--- name for DataWindow and indicator subwindow label
   string short_name= "ATR(" + string (ExtPeriodATR)+ ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
   PlotIndexSetString ( 0 , PLOT_LABEL ,short_name);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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[])
  {
   int i,limit;
//--- check for bars count
   if (rates_total<=ExtPeriodATR)
       return ( 0 ); // not enough bars for calculation
//--- preliminary calculations
   if (prev_calculated== 0 )
     {
      ExtTRBuffer[ 0 ]= 0.0 ;
      ExtATRBuffer[ 0 ]= 0.0 ;
       //--- filling out the array of True Range values for each period
       for (i= 1 ;i<rates_total && ! IsStopped ();i++)
         ExtTRBuffer[i]= MathMax (high[i],close[i- 1 ])- MathMin (low[i],close[i- 1 ]);
       //--- first AtrPeriod values of the indicator are not calculated
       double firstValue= 0.0 ;
       for (i= 1 ;i<=ExtPeriodATR;i++)
        {
         ExtATRBuffer[i]= 0.0 ;
         firstValue+=ExtTRBuffer[i];
        }
       //--- calculating the first value of the indicator
      firstValue/=ExtPeriodATR;
      ExtATRBuffer[ExtPeriodATR]=firstValue;
      limit=ExtPeriodATR+ 1 ;
     }
   else limit=prev_calculated- 1 ;
//--- the main loop of calculations
   for (i=limit;i<rates_total && ! IsStopped ();i++)
     {
      ExtTRBuffer[i]= MathMax (high[i],close[i- 1 ])- MathMin (low[i],close[i- 1 ]);
      ExtATRBuffer[i]=ExtATRBuffer[i- 1 ]+(ExtTRBuffer[i]-ExtTRBuffer[i-ExtPeriodATR])/ExtPeriodATR;
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


104 sıra ile 96 sıra arasında hiçbir fark yoktur, hatta avantajı MQL5 tarafındadır.

İnsanlar saçmalıkları ve efsaneleri forumdan foruma böyle aktarıyorlar.

 
Renat :

Hiç de değil, dilin aynı olduğu anlamına gelmez.

Fark sadece küçük bir fonksiyon setindedir (MT5'te daha iyidirler) ve geliştirme için ciddi masraflar yoktur.

“Zaman kaybetmek istemiyorum” ve “Dün ihtiyacım var” hakkında, bir ticaret platformunun bir tüccarın verimliliğini artırmak için önemli bir araç olduğunu hatırlatmak istiyorum. Yakınlarda bariz bir şekilde daha etkili ve işlevsel bir çözüm varken, onu kullanmamak kendinize zarar vermek ve uydurulmuş efsanelerle kendinizi kandırmaktır.

MT4'ü sonsuza kadar unutmak için ticaret stratejilerini test edenleri karşılaştırmak yeterlidir. Şaka yapmıyorum ve fazla ileri gitmiyorum - bu gerçek.

MT5'teki pozisyonları özetlemenin en aptal ilkesi (ve bu, birkaç MTS'nin bir sembol ve bir hesapta aynı anda çalışmasını organize etmenin herhangi bir hile olmadan imkansızlığı anlamına gelir) sonsuza dek üzerinde ticaret yapılmasını engelledi. Gerçek hayatta MT5 sağlayan daha fazla broker olacağı zaman bile, eldeki parmaklardan daha fazla.

Ve sadece testçi uğruna MT5 kodunu yeniden yazmak - kusura bakmayın ama bu çok saçma.

 
evillive :

MT5'teki pozisyonları toplamanın en aptal ilkesi (ve bu, birkaç MTS'nin tek bir sembol ve bir hesapta aynı anda çalışmasını organize etmenin herhangi bir hile olmadan imkansızlığı anlamına gelir) sonsuza dek üzerinde alım satım yapılmasını engelledi. Gerçek hayatta MT5 sağlayan daha fazla broker olacağı zaman bile, eldeki parmaklardan daha fazla.

Hiç aptal değil.

Avantajları o kadar çok anlatıldı ki tekrarlamak istemiyorum. Ayrıca tekrar tekrar "tek bir sembolde birkaç MTS'nin kendini aldatma, kayıplar ve kitlesel kullanım için gerçekçi olmayan bir durum olduğunu" açıkladım.


Ve sadece testçi uğruna MT5 kodunu yeniden yazmak - kusura bakmayın ama bu çok saçma.

Bu saçma değil.

Kendinizi fırsatlardan mahrum ediyorsunuz ve gelişme fırsatlarını kaçırıyorsunuz. Açıkça daha kaliteli, işlevsel ve güçlü bir sistemin bir sürü kusuru olan eskisinden daha kötü olduğunu kendinize ve başkalarına kanıtlamak, kendinize doğrudan zarar vermektir.

 
Renat :

Hiç de değil, dilin aynı olduğu anlamına gelmez.

Fark sadece küçük bir fonksiyon setindedir (MT5'te daha iyidirler) ve geliştirme için ciddi masraflar yoktur.

“Zaman kaybetmek istemiyorum” ve “Dün ihtiyacım var” hakkında, bir ticaret platformunun bir tüccarın verimliliğini artırmak için önemli bir araç olduğunu hatırlatmak istiyorum. Yakınlarda bariz bir şekilde daha etkili ve işlevsel bir çözüm varken, onu kullanmamak kendinize zarar vermek ve uydurulmuş efsanelerle kendinizi kandırmaktır.

MT4'ü sonsuza kadar unutmak için ticaret stratejilerini test edenleri karşılaştırmak yeterlidir. Şaka yapmıyorum ve fazla ileri gitmiyorum - bu gerçek.

Renat, MT4 test cihazını MT5 test cihazıyla eşitlemek ne kadar zor?
 
Renat :

Bu bir efsane ve bunu biliyorsun.

Normal ATR.mq4'ü MetaTrader 4'ten alıyoruz. 104 satır var:


Aynı ATR.mq5'i MetaTrader 5'ten alıyoruz. 96 satır var.


104 sıra ile 96 sıra arasında hiçbir fark yoktur, hatta avantajı MQL5 tarafındadır.

İnsanlar saçmalıkları ve efsaneleri forumdan foruma böyle aktarıyorlar.

Evet, bunun hakkında yazmadım, ama aynı göstergeyi mql4'te bir saat içinde yazdığım ve aynı kodu mql5'te yazma konusunda ustalaşmamın bir hafta sürdüğü gerçeği hakkında... Bu hisse senedi sayısı ile ilgili değil. , ancak yaklaşım programlamayı anlamakla ilgili ...

mql4'teki normal bir göstergenin değerini mql5'teki aynı eylemden almak ne kadar farklı... Bunu çözerken neredeyse çıldıracaktım. Tabii ki, programlama kursları verebilirsiniz, ancak bu kursları almanıza izin vermeyebilecek diğer faktörleri de göz önünde bulundurmalısınız ... Ve maliyet, yaş ve mekandan uzaklık veya trafik maliyeti. çevrimiçi öğrenme olayı... Evet, bu yeterli değil...

 
AlexeyVik :
Renat, MT4 test cihazını MT5 test cihazıyla eşitlemek ne kadar zor?
MQL5.community ile entegrasyonun dördüne değil, sadece hizmet kısmına dokunmayacağız.
 
Renat :
MQL5.community ile entegrasyonun dördüne değil, sadece hizmet kısmına dokunmayacağız.
Evet, yapar mısın diye sormadım, o yüzden yapmazsın diye tahmin ettim. zor mu diye sordum...
 
AlexeyVik :

Evet, bunun hakkında yazmadım, ama aynı göstergeyi mql4'te bir saat içinde yazdığım ve aynı kodu mql5'te yazma konusunda ustalaşmamın bir hafta sürdüğü gerçeği hakkında... Bu hisse senedi sayısı ile ilgili değil. , ancak yaklaşım programlamayı anlamakla ilgili ...

mql4'teki normal bir göstergenin değerini mql5'teki aynı eylemden almak ne kadar farklı... Bunu çözerken neredeyse çıldıracaktım. Tabii ki, programlama kursları verebilirsiniz, ancak bu kursları almanıza izin vermeyebilecek diğer faktörleri de göz önünde bulundurmalısınız ... Ve maliyet, yaş ve mekandan uzaklık veya trafik maliyeti. çevrimiçi öğrenme olayı... Evet, bu yeterli değil...

İki dosyayı karşılaştırın ve en az farkı bulun.

"Usta olmak için bir hafta, neredeyse deliriyordum" - bu forumdaki kırmızı bir kelime için. Mitler böyle doğar.

 
AlexeyVik :
Sadece içindeki dil o kadar farklı ki, ustalaşmak çok zaman alıyor.
Evet, hayır. Bir ay yeterliydi.
 
Renat :

İki dosyayı karşılaştırın ve en az farkı bulun.

"Usta olmak için bir hafta, neredeyse deliriyordum" - bu forumdaki kırmızı bir kelime için. Mitler böyle doğar.

Pekala, bunun gerçek gerçek olduğunu kanıtlamayacağım. Genel olarak C++ programlamaya ve OOP'ye aşina olmayan bir kişi için bu oldukça zordur ve kırmızı bir kelime veya bir efsanenin doğuşu için hiç de değil. İşin garibi, bir hafta içinde anladım ve ihtiyacım olanı yazdım. Ve bu tamamen farklı bir efsane, mql5'te ustalaşmanın benim gibi profesyonel olmayanlar için bile mevcut olduğunu gösteriyor.
Neden: