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

 
Artyom Trishkin :

OnInit() içinde, sembolün zaman serilerine bir çağrı yapın: iTime(Symbol,Timeframe,1);

OnTick()'te, en başta, en azından aynı if( iTime(Symbol,Timeframe,10)==0) return;

Daha sonra danışman yeni bir çubuk tanımına ulaşmayacak ve bir sonraki onay işaretini bekleyecektir.

OnInit()'te, zaman serisi verilerini istedik, böylece veri sayfalamayı etkinleştirdik.

OnTick()'te, EA için gerekli minimum geçmişin kullanılabilirliğini kontrol ederiz ve henüz mevcut değilse, bir sonraki onay için beklemeye bırakırız.

Ve EA tarafından istenen tüm veriler alınana kadar bir sonraki onay işaretini beklemeye devam edecektir.

Gerekli tüm veriler indirilip alınır alınmaz EA, yeni bir çubuk ve ihtiyaç duyduğu geçmişle çalışmaya başlayacaktır.

Seri verileri güncel tutmak için en az iki dakikada bir erişim sağlamak gerekir. Yaklaşık bir buçuk dakika (90 saniye) için ikinci bir zamanlayıcı yapın ve içindeki istenen sembolün herhangi bir zaman serisine bakın, örneğin iTime(Symbol,Timeframe,1); Alınan verileri kontrol etmeden - sadece hikayeyi "taşıyın". Ardından sembol üzerindeki tüm veriler her zaman güncel olacaktır.

Tabii ki, tüm TF'ler için yeni bir çubuğu kontrol etme seçeneğini deneyeceğim, ancak eşzamanlı olarak olmuyor mu, MT4 değil. Ve sorun barda değil, göstergeden çağrılan göstergelerin çalışmamasında ve bu da EA'dan çağrılıyor.

Bir dakika çalışıyorum, bu yüzden fikre göre hikaye her zaman alakalı olmalı.

Ve tüm bu kontrolleri test için yapıyoruz, ancak gerçek hayatta sadece işi yavaşlatacaklar, çünkü her şey test cihazının sabit koşullarında olduğundan daha yavaş çalışıyor, göstergenin gerçek bir hesapta doğru çalıştığını tekrar ediyorum.

 

Problemi bu şekilde çözerken, ana koda başlamadan önce başarısız olan göstergelerin hazır olup olmadığını kontrol ettim.

 //При появлении нового бара проверяем корректность расчета индикаторов
       if (isNewBar_Predv_Calc_Ind()== true )Predv_Calc_Ind= true ;
       if (Predv_Calc_Ind== true )
      {
       double arr_DonUp=ZZ_Vibor( 0 , 2 , 0 );
       double arr_DonDown=ZZ_Vibor( 0 , 3 , 0 );
       double arr_DonUp_m2=ZZ_Vibor( 1 , 2 , 0 );
       double arr_DonDown_m2=ZZ_Vibor( 1 , 3 , 0 );
       double arr_DonUp_m5=ZZ_Vibor( 2 , 2 , 0 );
       double arr_DonDown_m5=ZZ_Vibor( 2 , 3 , 0 );
       double arr_DonUp_m15=ZZ_Vibor( 3 , 2 , 0 );
       double arr_DonDown_m15=ZZ_Vibor( 3 , 3 , 0 );
       if (arr_DonUp< 1      || arr_DonDown< 1     ||
          arr_DonUp_m2< 1   || arr_DonDown_m2< 1 ||
          arr_DonUp_m5< 1   || arr_DonDown_m5< 1 ||
          arr_DonUp_m15< 1 || arr_DonDown_m15< 1
         ) return ;
       else {Predv_Calc_Ind= false ;}      
      }
//Операции выполняются только при появлении следующего бара   
   if (!isNewBar()) return ;

Ancak bu yaklaşım evrensel değildir, çünkü tüm göstergeler nasıl listelenmelidir, test cihazının ortamının doğru çalışmasını sağlamak için daha evrensel başka bir yöntem var mı?

 
Artyom Trishkin :

OnTick()'te, EA için gerekli minimum geçmişin kullanılabilirliğini kontrol ederiz ve henüz mevcut değilse, bir sonraki onay için beklemeye bırakırız.

Ve EA tarafından istenen tüm veriler alınana kadar bir sonraki onay işaretini beklemeye devam edecektir.

Gerekli tüm veriler indirilip alınır alınmaz EA, yeni bir çubuk ve ihtiyaç duyduğu geçmişle çalışmaya başlayacaktır.

Tarihin kullanılabilirliğini nasıl kontrol etmeyi önerirsiniz, bir şey anlamadım ...

 
fxsaber :

Bu satırı MQL4 işlevinden önce ekleyin

ve MT5'te çalışacak.

Parlak. Çok teşekkürler!

 
İyi günler, genç bir emekli MT5'te böyle düğmeler yapmak istedi.

Bana MT5'te bu tür düğmeleri uygulayabileceğinizi söyleyin, belki birileri zaten kodu paylaşmıştır ...


"Başlat" düğmesi ve "Tüm siparişleri kapat" düğmesi. ekranın etrafında hareket ettirin. MT5, tüm çiftler, tüm zaman dilimleri, 4/5 işaretleri. yüzde lot dahil ilk lot 0.01.
Kayma ve yeniden fiyat teklifi sağlayın.

"Başlat" düğmesinin işlevleri
Fiboyu manuel olarak esnettikten sonra 1'den 11'e kadar emirleri hemen BAY'de açmanız veya daha önce cari fiyattan SATIN almanız gerekiyor.
ayarlarda kaç tane emir açılacağını ve hangilerinin (1, 2, 5, 7 veya hepsi 11) genişletilmiş fibo yönünde seçilerek.
Her sipariş için ayarlarda lot miktarını manuel veya dinamik olarak artırma/azaltma belirtmek mümkün oldu.

TP - Kâr Al , 61.8 fibo seviyelerinde 1'den 11'e artan sırayla ayarlanır; 78.6; 100.0;
161.8; 185.4; 200.0; 261.8; 285.0; 423.6; 561.8; 685.4

SL - Sıfır fibo satırından - 2 spread (otomatik olarak hesaplanır) miktarında Zarar Durdur .

TS - Trailing Stop , tüm emirleri arkasından çeker.
1. takip, fiyat 61.8 seviyesine ulaştıysa, tüm emirlerin SL'sini 38.2 + 2 spread seviyesine taşır,
2. takip, eğer fiyat 100.0 seviyesine ulaştıysa, kalan tüm emirlerin SL'sini 50.0+2 spread seviyesine taşır,
3. fiyat 161.8 seviyesine ulaştıysa, kalan tüm emirlerin SL'sini 78.6+2 spread seviyesine taşır,
4. fiyat 261.8.5'e ulaşırsa, kalan tüm emirlerin SL'sini 100.0+2 spread seviyesine taşır.
5. fiyat 423.6 seviyesine ulaştıysa, kalan tüm emirlerin SL'sini 200.0+2 spread seviyesine taşır,
6. fiyat 561.8 seviyesine ulaştıysa, takip eden tüm emirlerin SL'sini 423.6+2 spread seviyesine taşır;

"Tüm siparişleri kapat" düğmesinin işlevleri - tüm siparişleri kapatmaya zorlayın.
 

Merhaba, CSymbolInfo sınıfından Ask and Bid fiyatlarında aşağı yukarı açıksa, o zaman örneğin, SessionInterest veya SessionBuyOrdersVolume veya SessionPriceLimitMin nasıl alınır, Sıfır verir, nedenini anlayamıyorum ...

 
Александр Юрин :

Merhaba, CSymbolInfo sınıfından Ask and Bid fiyatlarında aşağı yukarı açıksa, o zaman örneğin, SessionInterest veya SessionBuyOrdersVolume veya SessionPriceLimitMin nasıl alınır, Sıfır verir, nedenini anlayamıyorum ...

Ticaret sunucusu bu bilgiyi yayınlarsa, alırsınız.

Kural olarak, bu bilgiler Brokerlar tarafından hisse senedi sembolleri için yayınlanır (Broker ve işlem merkezlerini karıştırmayın).

 
Vladimir Karputov :

Ticaret sunucusu bu bilgiyi yayınlarsa, alırsınız.

Kural olarak, bu bilgiler Brokerlar tarafından hisse senedi sembolleri için yayınlanır (Broker ve işlem merkezlerini karıştırmayın).

Broker Açılışı, RTS Endeks Vadeli İşlemleri, en az SessionPriceLimitMin ve SessionPriceLimitMax yayınlaması gerektiğini düşünüyorum (çünkü anladığım kadarıyla açılış fiyatlarında piyasa emirlerinde kullanılıyorlar). Açılış gerçekten tercüme etmiyor mu ... Örneğin şunu yazıyorum:

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - danışmanınızdan

Dergide yalnızca Ask fiyatları alıyorum

Dosyalar:
y2a4cgbfjw.png  63 kb
 

Mevcut TF'ye kadar herhangi bir TF'de herhangi bir kayma ile son çubuğun tarihini doğru bir şekilde belirleyecek bir kod parçası yazmak için yardım istiyorum.

 int               N_bar= iBarShift ( Symbol (), PERIOD_CURRENT , iTime ( Symbol (),PERIOD_H1, 0 )); //номер текущего бара
datetime          StopDt= iTime ( Symbol (), PERIOD_CURRENT ,N_bar+ 1 ); //только для минуток и то может быть не корректно!

Print ( "StopDt_Shift=" , TimeToString (StopDt, TIME_DATE | TIME_MINUTES ));

Böyle bir kod genellikle çalışır, ancak yalnızca mevcut çubuğun başlangıç zamanı gerçek (en yakın dakikaya yuvarlanmış) çubukla çakışırsa, mevcut grafiğim M1 olduğundan. Ve eşleşmezse, farklı TF'lere bağlı olarak çeşitli olaylar ortaya çıkar. Örneğin, son M1 çubuğunun son saatteki başlangıç tarihini bulmam gerekiyor, eğer 12 saat ise sorun yok, saat 12:59 ve 13 saat ise, o zaman saat Saatlik çubuk 14:00'te ve 14:05'te açılmadığından ve iBarShift işlevi en yakın çubuğu 14:00'a yani 13:59'a döndürdüğünden zaten 13:58 olacaktır.

Eklendi: bunu yaptım, işe yarıyor gibi görünüyor

 datetime          StopDt= iTime ( Symbol (), PERIOD_CURRENT , Bars ( Symbol (), PERIOD_CURRENT , iTime ( Symbol (),TF_iDeltaP,_Shift- 1 ), iTime ( Symbol (), PERIOD_CURRENT , 0 )));
 
Александр Юрин :

Broker Açılışı, RTS Endeks Vadeli İşlemleri, en az SessionPriceLimitMin ve SessionPriceLimitMax yayınlaması gerektiğini düşünüyorum (çünkü anladığım kadarıyla açılış fiyatlarında piyasa emirlerinde kullanılıyorlar). Açılış gerçekten tercüme etmiyor mu ... Örneğin şunu yazıyorum:

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - danışmanınızdan

Dergide yalnızca Ask fiyatları alıyorum

Sunucu gerçek mi, demo mu?
Neden: