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

 
       // AO
       if (ao) {
         CopyTime (symbol_name[st],ao_time_frame, 1 , 1 ,time_buf);
         if (symbol_ao_timebar[st]!=time_buf[ 0 ]) {
            symbol_ao_timebar[st]=time_buf[ 0 ];
             double ao_buf[];
             CopyBuffer (symbol_ao_handle[st], 0 ,enter_bar, 2 ,ao_buf);
             if (ao_buf[ 1 ]>ao_buf[ 0 ]&&ao_buf[ 0 ]< 0 ) symbol_ao_signal[st]= 0 ;
             if (ao_buf[ 1 ]<ao_buf[ 0 ]&&ao_buf[ 0 ]> 0 ) symbol_ao_signal[st]= 1 ;
            }
         } else symbol_ao_signal[st]= 2 ;
      
       // AC
       if (ac) {
         CopyTime (symbol_name[st],ac_time_frame, 1 , 1 ,time_buf);
         if (symbol_ac_timebar[st]!=time_buf[ 0 ]) {
            symbol_ac_timebar[st]=time_buf[ 0 ];
             double ac_buf[];
             CopyBuffer (symbol_ac_handle[st], 0 ,enter_bar, 2 ,ac_buf);
             if (ac_buf[ 1 ]>ac_buf[ 0 ]&&ac_buf[ 0 ]< 0 ) symbol_ac_signal[st]= 0 ;
             if (ac_buf[ 1 ]<ac_buf[ 0 ]&&ac_buf[ 0 ]> 0 ) symbol_ac_signal[st]= 1 ;
            }      
         } else symbol_ac_signal[st]= 2 ;
Merhaba. İşte soru. Bir kod parçası var. Kim konuşuyor. Daha doğrusu alman ya da satman gerektiğini söylemeliyim ama sadece AO ve AC göstergesi aynı düzlemdeyken. Sıfırın altında alış ve sıfırın üzerinde satış.
Öyle mi? Guru yardım lütfen.
Soru temelde ne olduğu. Bu normal bir kod mu yoksa bitkisel yağda çöp mü?
 
MASTERXAYS :
Merhaba. İşte soru. Bir kod parçası var. Kim konuşuyor. Daha doğrusu alman ya da satman gerektiğini söylemeliyim ama sadece AO ve AC göstergesi aynı düzlemdeyken. Sıfırın altında alış ve sıfırın üzerinde satış.
Öyle mi? Guru yardım lütfen.
Soru temelde ne olduğu. Bu normal bir kod mu yoksa bitkisel yağda çöp mü?

Yaklaşımın kendisine " bitkisel yağda çöp " derdim.

Fiyatın göstergeyi takip ettiğini hiç gördünüz mü? Bunların B. Williams'ın göstergeleri olduğunu ve bildiğiniz gibi Forex'te işlem yapmadığını ve özün kendisinin uzun süredir modası geçmiş olduğunu düşünmeye değer.

 
-Aleks- :
Ve, üzgünüm, bu sıfırlamayı nasıl yapacağım?
Aynı şekilde, basit türlerin geçersiz kılınması gibi. Onlara 0 değerini atayarak. Gerekli alanlara 0 değerleri atanır atanmaz, StructToTime() ters işlemini kullanın.
 
MASTERXAYS :
Merhaba. İşte soru. Bir kod parçası var. Kim konuşuyor. Daha doğrusu alman ya da satman gerektiğini söylemeliyim ama sadece AO ve AC göstergesi aynı düzlemdeyken. Sıfırın altında alış ve sıfırın üzerinde satış.
Öyle mi? Guru yardım lütfen.
Soru temelde ne olduğu. Bu normal bir kod mu yoksa bitkisel yağda çöp mü?

Sinyal oluşturma kodlarının açıklandığı makalemi okuyun. Ama ben kişisel olarak sinyal fonksiyonlarını bu şekilde yazıyorum.

 ENUM_ORDER_TYPE GetSignal( int i, ENUM_TIMEFRAMES tf)
  {
   double bbup[ 1 ];
   double bbdw[ 1 ];
   double rsi[ 1 ];
   double macd[ 2 ];
   double stoh[ 2 ];
   double Close [ 2 ];

   if (IND01[i]== INVALID_HANDLE || IND01[i]== 0 ){IND01[i]= iBands (m_symbol,tf,BB_period, 0 , 2 , PRICE_CLOSE ); return ( WRONG_VALUE );}
   if (IND02[i]== INVALID_HANDLE || IND02[i]== 0 ){IND02[i]= iRSI (m_symbol,tf,RSI_period, PRICE_CLOSE ); return ( WRONG_VALUE );}
   if (IND03[i]== INVALID_HANDLE || IND03[i]== 0 ){IND03[i]= iMACD (m_symbol,tf,MACD_fast_ema_period,MACD_slow_ema_period, 9 , PRICE_CLOSE ); return ( WRONG_VALUE );}
   if (IND04[i]== INVALID_HANDLE || IND04[i]== 0 ){IND04[i]= iStochastic (m_symbol,tf,ST_Kperiod,ST_Dperiod,ST_slowing, MODE_SMA , STO_LOWHIGH ); return ( WRONG_VALUE );}

   if ( CopyBuffer (IND01[i], 1 , 0 , 1 ,bbup)< 1 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND01[i], 2 , 0 , 1 ,bbdw)< 1 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND02[i], 0 , 0 , 1 ,rsi)< 1 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND03[i], 0 , 0 , 2 ,macd)< 2 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND04[i], 0 , 0 , 2 ,stoh)< 2 ) return ( WRONG_VALUE );
   if ( CopyClose (m_symbol,tf, 0 , 2 , Close )< 2 ) return ( WRONG_VALUE );

   if ( Close [ 0 ]<bbdw[ 0 ]&& Close [ 1 ]>bbdw[ 0 ]&&  stoh[ 1 ]>stoh[ 0 ]&&  stoh[ 0 ]< 20   &&  rsi[ 0 ]< 30   &&  macd[ 1 ]<macd[ 0 ]) return ( ORDER_TYPE_BUY );
   if ( Close [ 0 ]>bbup[ 0 ]&& Close [ 1 ]<bbup[ 0 ]&&  stoh[ 1 ]<stoh[ 0 ]&&  stoh[ 0 ]> 80   &&  rsi[ 0 ]> 70   &&  macd[ 1 ]>macd[ 0 ]) return ( ORDER_TYPE_SELL );

   return ( WRONG_VALUE );
  }
 
Aleksey Lebedev :

1 olacak, her iki zaman da önce bir tam güne yuvarlanır, sonra çıkarılır.

Size ifadede tüm sayıların yuvarlandığını düşündüren nedir? Yuvarlama da yok. Burada değişkene yuvarlatılmış bir sayı atanır - katılıyorum.

Evet ve yuvarlayacak olsaydım, bir örnek gösterdim - bugünün geçerli çubuğu ve dün hesaplanan - TF 1 saat - herhangi bir yuvarlama için farkları sıfır olacaktır ... peki, belki her zaman yuvarlamayı zorlarsanız . ..

Alexey Kozitsyn :
Aynı şekilde, basit türlerin geçersiz kılınması gibi. Onlara 0 değerini atayarak. Gerekli alanlara 0 değerleri atanır atanmaz, StructToTime() ters işlemini kullanın.

Teşekkürler - tekrar anlamaya çalışacağım - yardımdaki örnekler başarılı değil ...

 
-Aleks- :

Size ifadede tüm sayıların yuvarlandığını düşündüren nedir? Yuvarlama da yok. Burada değişkene yuvarlatılmış bir sayı atanır - katılıyorum.

Ve eğer yuvarlayacak olsaydım, bir örnek gösterdim - bugünün mevcut çubuğu ve dün hesaplanan - TF 1 saat - farkları herhangi bir yuvarlama için sıfır olacaktır ... peki, belki her zaman yuvarlamayı zorlarsanız ...

Tam sayıları bölerken (int, long, datetime, vb.), sonuç bir tamsayıdır, yani. kalan atılır. Bugün 00:00 ve dün 23:59:59 aradaki fark 1 gün olacaktır.

 

Lütfen bana MQL4'ü söyle...
Göstergenin M5'te çalışıp çalışmadığını anlayamıyorum, kodunda H1'deki önceki çubuğun Yüksek veya Düşük değerine nasıl başvurabilirim?
iHigh(NULL, PERIOD_H1 , i) yazın ... Buradaki nokta, mevcut M5 mumunun önceki saatin Yüksek fiyatını geçip geçmediğini belirlemektir (M5 grafiğine yukarı/aşağı ok koyarak).


 
MQL4 gösterge kodunda, dizi değiştirme
 for (i=pos; i<rates_total; i++) 
sicim
 for (i=pos; i<rates_total- 1 ; i++) 
göstergenin mevcut (eksik) çubukta hesaplanmamasına neden olur - bu çubuğun altında hiçbir gösterge çizgisi yoktur.
MQL5'te, mevcut çubukta böyle bir değişiklikle bazı garip gösterge değerleri alıyorum, bazen sadece 0.0000
Bunlarla ne yapılabilir?
 
MikeZv :

Lütfen bana MQL4'ü söyle...
Göstergenin M5'te çalışıp çalışmadığını anlayamıyorum, kodunda H1'deki önceki çubuğun Yüksek veya Düşük değerine nasıl başvurabilirim?
iHigh(NULL, PERIOD_H1 , i) yazın ... Buradaki nokta, mevcut M5 mumunun önceki saatin Yüksek fiyatını geçip geçmediğini belirlemektir (M5 grafiğine yukarı/aşağı ok koyarak).


MikeZv :
MQL4 gösterge kodunda, dizi değiştirme
sicim
göstergenin mevcut (eksik) çubukta hesaplanmamasına neden olur - bu çubuğun altında hiçbir gösterge çizgisi yoktur.
MQL5'te, mevcut çubukta böyle bir değişiklikle, bazen sadece 0.0000 gibi bazı garip gösterge değerleri alıyorum.
Bunlarla ne yapılabilir?

Gösterge arabelleklerini nasıl çevireceğinizi asla bilemezsiniz - burada sadece Juna yardımcı olacaktır.

Katma:

hata ayıklama sırasında, bir kontrol koyun - timeseries dizisinde hangi değer bulunur time[i] - böylece çubukları hesaplamaya hangi uçtan başladığınızı ve nerede "sıfır" bir çubuğunuz olduğunu anlayacaksınız.

 
Karputov Vladimir

Gösterge arabelleklerini nasıl çevireceğinizi asla bilemezsiniz - burada sadece Juna yardımcı olacaktır.
... hangi uçtan çubukları hesaplamaya başlarsınız ve nerede "sıfır" bir çubuğunuz vardır.

Vladimir, ilk soruyu yanıtladığın için teşekkürler, bu işlevleri kaçırdım...

Aynı göstergeyi MT4 ve MT5'e de koydum (tabii ki kod her platform için uyarlanmıştır).
Sıfır çubuğuna kadar aynı değerlere sahipler yani bir uçtan görülüyor... :)
Ve MT4'teki mevcut çubuktaki hesaplamayı kapattığınızda, MT5'te mevcut çubuğun altına hiçbir şey çizilmez - yanlış değerler.

Dosyalar:
mvt_Vlt.mq4  5 kb
mvt_Vlt.mq5  5 kb