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

 

Merhaba.

Diyelim ki 2 gösterge var, birincisi 4 tampon, ikincisi 2 tane var. Bunları grafiğin üzerine atıyorum, data penceresini açıyorum (CTRL + D), listede 0'dan 5'e kadar 6 tampon var. Bu listedeki değeri MQL'de, örneğin 5 arabellekte okuyabilir miyim? iCustom üzerinden istenilen gösterge çok uygun değil. Bu listeden daha uygun. Yaptıklarını biliyorum ama nasıl?

 

Bir nesnenin oluşturulmasının sürekli olarak bir kontrolle yapıldığı yardımdaki örnekleri inceliyorum:

 //--- сбросим значение ошибки 
   ResetLastError (); 
//--- создадим кнопку 
   if (! ObjectCreate (chart_ID,name, OBJ_BUTTON ,sub_window, 0 , 0 )) 
     { 
       Print ( __FUNCTION__ , 
             ": не удалось создать кнопку! Код ошибки = " , GetLastError ()); 
       return ( false ); 
     } 


Bu neden nesneler için yapılır? Nesnenin yaratılamama olasılığı nedir?


Genel olarak, mql programlamada görgü kurallarını nerede okuyabileceğinizle ilgileniyorum, tırmıkların hangi çalılıklarda yattığını bilmek için tavsiyede bulunun.

 
psyman :

Bir nesnenin oluşturulmasının sürekli olarak bir kontrolle yapıldığı yardımdaki örnekleri inceliyorum:


Bu neden nesneler için yapılır? Nesnenin yaratılamama olasılığı nedir?


Genel olarak, mql programlamada görgü kurallarını nerede okuyabileceğinizle ilgileniyorum, tırmıkların hangi çalılıklarda yattığını bilmek için tavsiyede bulunun.

Örneğin, aynı ada sahip bir nesne zaten var.
Ve görgü kuralları her dil için aynıdır. Veri alırsınız - neye sahip olduğunuzu kontrol edin, bir nesne yaratın, ne yarattığınızı ve yaratıp yaratmadığınızı kontrol edin ... Vb.
 
Bu formatta 4 boyutlu bir dizi nasıl değerlerle doldurulur int Mas[1][2][2][2], bu dizinin her hücresine nasıl değer atanır , yani böyle bir kayıttan bahsediyorum, örneğin , 2 boyutlu bir dizi var int Arr[1][2]={ 3,4};, 4 boyutlu olan nasıl doldurulacak?
 
Artyom Trishkin :
Örneğin, aynı ada sahip bir nesne zaten var.
Ve görgü kuralları her dil için aynıdır. Veri alırsınız - neye sahip olduğunuzu kontrol edin, bir nesne yaratın, ne yarattığınızı ve yaratıp yaratmadığınızı kontrol edin ... Vb.


Bir fonksiyon içinde bir buton oluşturduğumda, küfrediyorum.

 return ( false );


'return' - 'void' işlevi bir değer döndürür breakeven_fish.mq5 112 on altı


Bu durumda nasıl olunur?

 
Seric29 :
Bu formatta 4 boyutlu bir dizi nasıl değerlerle doldurulur int Mas[1][2][2][2], bu dizinin her hücresine nasıl değer atanır , yani böyle bir kayıttan bahsediyorum, örneğin , 2 boyutlu bir dizi var int Arr[1][2]={ 3,4};, 4 boyutlu olan nasıl doldurulacak?

çok boyutlu diziler genellikle döngülerde gerekli değerlerle doldurulur - hata yapmak daha zordur, dört boyutlu bir dizi için bunun gibi bir şey olmalıdır, ancak yanılıyor olabilirim:

 int A[ 2 , 2 , 4 , 3 ] = {
                     { /*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  { 0 , 1 , 2 /*4-e измерение = 3 */ }, { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 } },
                        { { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 } }   
               
                     },
 // 1-е измерение = 2           
                     {  { { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 } },
                     {   { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 }, { 0 , 1 , 2 } }}
                  }; 

ruh hastası :

Bir fonksiyon içinde bir buton oluşturduğumda, küfrediyorum.

'return' - 'void' işlevi bir değer döndürür breakeven_fish.mq5 112 on altı

Bu durumda nasıl olunur?

yardımı okumaya başlayın https://www.mql5.com/en/docs/basis/function

bunlar dilin temelleri, eğer yeterli yardım yoksa, o zaman C ++ ile ilgili herhangi bir kitap, ilk bölümde, hangi işlevlerin açıklanması gerekir

 
psyman :


Bir fonksiyon içinde bir buton oluşturduğumda, küfrediyorum.


'return' - 'void' işlevi bir değer döndürür breakeven_fish.mq5 112 on altı


Bu durumda nasıl olunur?

Bir işlevden bool türünde bir değer döndürürseniz, işlevin türünün geçersiz kılınması gerekmez, ancak tahmin edin hangisi.
 

Yoldaşlar - doğruluk göstergesine bakın. Değer = (Open[0]-SMA(P,n))/SMA(P,n))*%100 formülü vardır.

Grafiği çiziyorum - her şey sayılır ve çizilir. Hesap makinesindeki herhangi bir çubuğun değerini kontrol etmeye başlıyorum - çizilenle eşleşmiyor...

İşte bir örnek, Açık 1.0178, MA(13) 1.0182 hesap makinesine ((1.0178-1.0182)/1.0182) * %100 - hesap makinesinin sonucu olarak -0.0393'e göre güveniyorum. Ve MT4 grafiğinde -0.0929. Kodda bir hata mı var yoksa hesap makinesi orada herhangi bir değeri doğru hesaplamıyor mu? Lütfen yardım et. Gösterge ektedir.

 #property indicator_separate_window 
#property indicator_buffers 1        // Количество буферов
#property indicator_color1   Blue     // Цвет линии 0 буфера

#property   indicator_level1    1
#property   indicator_level2   - 1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    = 5000 ;       // Колич.баров в расчётной истории
extern int Period_SMA = 13 ; 
 

double
   Line_0[];                         // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                           // Специальная функция init()
  {
   SetIndexBuffer ( 0 ,Line_0);         // Назначение массива буферу
   SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 2 ); // Стиль линии
   
   IndicatorShortName( "KRI" );
//--------------------------------------------------------------- 5 --
   
   return ( 0 );                           // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                             // Индекс бара
   n,                             // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i= Bars -Counted_bars- 1 ;           // Индекс первого непосчитанного
   if (i>History- 1 )                 // Если много баров то ..
      i=History- 1 ;                   // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while (i>= 0 )                       // Цикл по непосчитанным барам
     {
       //-------------------------------------------------------- 12 --
        
      SMA= iMA ( NULL , 0 ,Period_SMA, 0 , MODE_SMA , PRICE_CLOSE ,i); // Значение  SМА
     
      
      Line_0[i] = 0 ; 
       if (SMA> 0 ) Line_0[i] = ((Open[ 0 ]-SMA)/SMA)* 100 ;     //  Индик. массив линии KPI
     
       //-------------------------------------------------------- 13 --
      i--;                           // Расчёт индекса следующего бара
       //-------------------------------------------------------- 14 --
     }
   return ( 0 );                           // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
Dosyalar:
KRI.mq4  7 kb
 
Artyom Trishkin :
Bir işlevden bool türünde bir değer döndürürseniz, işlevin türünün geçersiz kılınması gerekmez, ancak tahmin edin hangisi.

Bir işlevden veri döndürmeniz gerekirse ne olur?


Her seferinde PositionsTotal kullanmadan yalnızca belirli bir karakter için konumlar üzerinde yineleme yapmak mümkün müdür?


Şimdiye kadar aklıma gelen tek şey, bir diziye bilet yazmak ve onlarla ayrı ayrı çalışmak, ama belki daha kolay bir seçenek var mı?

 
psyman :

Bir işlevden veri döndürmeniz gerekirse ne olur?


Her seferinde PositionsTotal'ı kullanmadan yalnızca belirli bir sembol için konumlar üzerinde yineleme yapmak mümkün müdür?


Şimdiye kadar aklıma gelen tek şey, bir diziye bilet yazmak ve onlarla ayrı ayrı çalışmak, ama belki daha kolay bir seçenek var mı?

Sonunda neyin gerekli olduğu belli değil - bazı dağınık düşünceler.