MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1523

 
Сергей Таболин :

Ben, yıllardır tüm sınıfların kutsal anlamını anlayamayan bir amatör olarak ve genel olarak, neden özellikle (ticaret) işimizde OOP'ye ihtiyacımız var, sınıfların hepsinin yazılı kodlar olduğunu anlıyorum (hem MQ hem de MQ'dan). gurular)- "guru olmayan kod yazarları" için "hayatı kolaylaştırmak" için tasarlanmış kütüphaneler.

Sorun şu ki, daha önce de söylediğim gibi, tüm bu "aydınlatma"ları kullandığınızda kod yazmak hiç de kolay olmuyor. Çünkü gönderilen tüm siparişleri her zaman iki kez kontrol etmeniz gerekir! Çünkü hemen hemen herkes oradaki bazı "işlemleri" de kontrol etmemde ısrar ediyor. Üstelik bu "..hisseler" bozuk çıkıyor.

Bu yere şu ve bu açıyla bir çivi çakma emri veriyorum. Her şey. Ayrıca cevabı alıyorum - çivi dövülmüş. Sonra beni uyarıyorlar:

  • belki çivi doğru boyutta değildi - kontrol etmeniz gerekiyor.
  • belki doğru açı değil   - kontrol etmek gerekir.
  • belki yanlış yerdedir   - kontrol etmek gerekir.

Öyleyse neden böyle sanatçılara (sınıflara) ihtiyacım var ???

Biraz abartmış olabilirim ama bunun özü değişmiyor.

Ve hepsi neden? Çünkü sınıflarda işlenen herhangi bir veri, bu sınıfın ikameden şüphelenmeyeceği şekilde değiştirilebilir.


Açık.

Bu arada, OOP'nin programlamayı kolaylaştırmadığına katılıyorum.

OOP, büyük projeleri sürdürmeyi kolaylaştırır, ancak kural olarak, küçük projelerin oluşturulmasını zorlaştırır.

OOP yeni başlayanlar için daha zordur.

Yabancı sınıfları kullanmak bir dereceye kadar - kara kutuların kullanımı.

 
Merhaba. Lütfen nerede hata yaptığımı söyleyin, gösterge neden okları göstermiyor?
 #property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window


double       Buy[];             // Буфер для покупок
double       Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9 ;
input int kijun_sen1  = 26 ;
input int senkou_span_b1 = 52 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Buy);
   SetIndexBuffer ( 1 ,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue ( 0 , 0 );
   SetIndexEmptyValue ( 1 , 0 );
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle ( 0 , DRAW_ARROW );
   SetIndexStyle ( 1 , DRAW_ARROW ); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow( 0 , 234 );   //Стрелка "вниз" для продаж
   SetIndexArrow( 1 , 233 );   //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel( 0 , "Продаём" );
   SetIndexLabel( 1 , "Покупаем" );
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits ( Digits );
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ( "Мой первый индикатор" );
   
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
     int limit=rates_total-prev_calculated- 1 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
       // Снимем показания индикатора
       double tenkan_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
       double kijun_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
       double senkou_span_b = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
       double senkou_span_a = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
       double chikou_span = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
       if (tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if (tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn :
Merhaba. Lütfen nerede hata yaptığımı söyleyin, gösterge neden okları göstermiyor?
 #property indicator_buffers 2
 
MakarFX :

eksik satıra girdi ama hala ok yok!

 
jarikn :

eksik satıra girdi ama hala ok yok!

göstermek

 
MakarFX :

göstermek

 //+------------------------------------------------------------------+
//|                                                     ishimocu.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2

//--- input parameters
double       Buy[];             // Буфер для покупок
double       Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9 ;
input int kijun_sen1  = 26 ;
input int senkou_span_b1 = 52 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Buy);
   SetIndexBuffer ( 1 ,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue ( 0 , 0 );
   SetIndexEmptyValue ( 1 , 0 );
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle ( 0 , DRAW_ARROW );
   SetIndexStyle ( 1 , DRAW_ARROW ); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow( 0 , 234 );   //Стрелка "вниз" для продаж
   SetIndexArrow( 1 , 233 );   //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel( 0 , "Продаём" );
   SetIndexLabel( 1 , "Покупаем" );
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits ( Digits );
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ( "Мой первый индикатор" );
   
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
  
   
 
  
     int limit=rates_total-prev_calculated- 1 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
       // Снимем показания индикатора
       double tenkan_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
       double kijun_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
       double senkou_span_b = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
       double senkou_span_a = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
       double chikou_span = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
       if (tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if (tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn :

Ben çiziyorum...


 
MakarFX :

Ben çiziyorum...


kahrolası. Ichimoku başlatılmadı)))) çok teşekkür ederim

 
Alexey Viktorov :

Eh, evet ... minimum yazı ve maksimum baş ağrısı ...

Tam olarak ne? Belki sadece yanlış bir şey yapıyorum?

 
Andrey Sokolov :

Tam olarak ne? Belki sadece yanlış bir şey yapıyorum?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Okul çocukları için OOP.

Alexey Viktorov , 2019.10.04 16:01

Benim düşünceme göre, mql, OOP kullanılarak çözülmesi gereken çok dar bir dizi göreve sahiptir. Bana öyle geliyor ki dilin kendisi C++'daki OOP'den veya başka bir şeyden başka bir şey değil. Ve bu OOP, standart bir kitaplık olarak OOP sunar. Ve OOP'den bu OOP'ye, onu mahvetmeniz önerilir, aksi takdirde başka bir OOP diyemezsiniz. Ve sonra bir adım daha ... Büyücü doğru bir şekilde söyledi, kötü olsa da, ama iyiliksever olsa da, görevlerim için OOP bir köpek için bir dönüş gibidir. Ve eğer bu görev prosedürel bir tarzda sorunsuz bir şekilde çözülebiliyorsa, bir görev belirlemenin ve ardından OOP aracılığıyla uygulamanın kullanımı nedir?

Örneğin, MT5 ve MT4 için kod yazmak için fxsaber'dan .mqh alın. Belki birinin ihtiyacı vardır, ama bakın kim... mql5'i istemeyenler veya kesinlikle yapamayanlar için. Veya iCanvas'ı Nikolay'dan alın ..., soyadını unuttum, anlıyorsunuz. Yararlı bir kütüphane gibi görünüyor, ancak bunu anlamak kolay değil ve belge yok, en azından biraz açıklama. Bu bir şikayet değil, üzgünüm Nikolai, bu bir gerçek. Bu yüzden bir grafik etiket yazmayı denemeye karar verdiğimde, ne standart kütüphaneye ne de Nikolai'nin kütüphanesine başvurmadan yazmak benim için daha kolay oldu.

Ve sonra tüm konuyu okuyabilirsiniz.