Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 846

 
Pokrov :

Fonksiyonlardan sonra GetLastError yazdım ve bir hata oluşursa bu bloğa (yazıldığı gibi) gitmeyecek ve komutlar yürütülmeyecek mi? Anladığım kadarıyla zincir, örneğin OrderSend() -> GetLastError -> hata bloğu Sleep(3000) RefreshRates() -> bloktan çıkıyor ve koşullar devam ederse, OrderSend() isteği tekrar gidiyor. Ya da benim akıl yürütmem ve temsillerim doğru değil. 1 veya 0 dönüş değerini bloğa yazmamı öneriyorsunuz anlıyorum ama basit fonksiyonlarım SignalBuy türündeki Boolean değerlerine bağlı değil, eğer doğru anladıysam ve dönüş değerleri o zaman olmalı iade.

Bir hata durumunda alım satım denemelerinin sayısı için bir döngü oluşturursunuz. Ticaret ortamınızı güncelleyin. Önceki hatanın değerini sıfırlayın, döndürülen sonucu kontrol eden bir ticaret talebi gönderin. Bir hata döndürürseniz, onu analiz edin ve hata koduna bağlı olarak ya döngüyü tamamen durdurun ya da hatayı ortadan kaldırmak ve döngünün bir sonraki yinelemesine geçmek için gerekli adımları atın. İşlem işlemi başarılıysa, döngüyü kırın ve işlem talebinin sonucunu daha fazla işlemek için program mantığına karşılık gelen değeri çağıran programa geri gönderin (işlev yürütme başarı bayrağı veya açık bir emrin bilet numarası, vb.).
 
Pokrov :

Fonksiyonlardan sonra GetLastError yazdım ve bir hata oluşursa bu bloğa (yazıldığı gibi) gitmeyecek ve komutlar yürütülmeyecek mi? Anladığım kadarıyla zincir, örneğin OrderSend() -> GetLastError -> hata bloğu Sleep(3000) RefreshRates() -> bloktan çıkıyor ve koşullar devam ederse, OrderSend() isteği tekrar gidiyor. Ya da benim akıl yürütmem ve temsillerim doğru değil. 1 veya 0 dönüş değerini bloğa yazmamı öneriyorsunuz anlıyorum ama basit fonksiyonlarım SignalBuy türündeki Boolean değerlerine bağlı değil, eğer doğru anladıysam ve dönüş değerleri o zaman olmalı iade.

Ayrıca örneğinizde şunu da ekleyeyim, bir hata aldıktan sonra tepki yok. Neyin kontrol edildiği, neyin olmadığı, biraz uyumaya karar vermeleri veya verileri güncellemeleri dışında. OnTick() işlevi tamamlandıktan sonra çıkın
 
Tünaydın!

Tavsiye ihtiyacı. Koşullara uygun olarak pozisyon kapatılmalı ve 121 saniye sonra yeni bir pozisyon açılmalıdır. Uyku (121000) ile nasıl yapılır?

 if (GetProfitOpenHigestInPoint( NULL ,OP_BUY,magic) > PiespieduClose* 10 )
{
ClosePosWithMaxProfitInCurrency( NULL ,OP_BUY,magic);
Sleep ( 121000 );
OpenPosition( NULL , OP_BUY, LotSize(), 0 , 0 ,magic); 
}
 
abeiks :
Tünaydın!

Tavsiye ihtiyacı. Koşullara uygun olarak pozisyon kapatılmalı ve 121 saniye sonra yeni bir pozisyon açılmalıdır. Uyku (121000) ile nasıl yapılır?

OnTimer() kurtarmaya
 
artmedia70 :
OnTimer() kurtarmaya
Teşekkür ederim! OnTimer() hiç kullanılmadı. Bu kod parçası geçersiz OnTick() içindedir. Ardından OpenPosition işlevi ortaya çıkacaktır (OnTimer() tarafından işlenir mi? Yapabiliyorsanız, lütfen kodu düzeltin OnTimer()'ı oraya doğru şekilde nasıl yerleştireceğinizi..
 void OnTick ()
{
...

if (GetProfitOpenHigestInPoint( NULL ,OP_BUY,magic) > PiespieduClose* 10 )
{
ClosePosWithMaxProfitInCurrency( NULL ,OP_BUY,magic);
EventSetTimer(121); 
OpenPosition( NULL , OP_BUY, LotSize(), 0 , 0 ,magic); 
}

...   
}
 

İnsanlar Mt4'ü yüklemek istedikten sonra Windows 7'yi yeniden yüklediler, sorun şu ki dosyalar indirilmiyor, ne yapmalıyım?

 
Alexey ve Artem, nitelikli yorumlar ve tavsiyeler için teşekkürler!
 
abeiks :
Teşekkür ederim! OnTimer() hiç kullanılmadı. Bu kod parçası geçersiz OnTick() içindedir. Ardından OpenPosition işlevi ortaya çıkacaktır (OnTimer() tarafından işlenir mi? Yapabiliyorsanız, lütfen kodu düzeltin OnTimer()'ı oraya doğru şekilde nasıl yerleştireceğinizi..

Zamanlayıcı OnInit() içinde başlatılır

 EventSetTimer ( 1 ); // раз в секунду

Geri sayımı başlatmak için zamanlayıcıda son pozisyonun kapanış saatini bulmanız ve bu andan itibaren 121 saniye saymanız gerekir. Yeni bir pozisyonun açılmasına izin veren bir bayrak iletmek için kapsamı tüm programı kapsayan global bir değişken kullanın. Başlangıçta 121'den büyük bir değer içermesini sağlayabilirsiniz, örneğin 122 (bekleme süresini ayarlardan değiştirebilirsiniz).

OnTick()'te Bu değişkeni kontrol edin. 121'den fazlaysa ve pozisyon yoksa - bir pozisyon açın - ve açılış başarısını kontrol ettikten sonra değişkeni sıfırlayın.

Pozisyon kapanır kapanmaz zamanlayıcı kapanma zamanını görür (bunu sürekli olarak saniyede bir yapar) ve mevcut zamandan pozisyon kapanma zamanına 121 saniyeden az bir süre geçmişse, zaman sayımı başlar - her saniye değeri 1 ile değişken olarak ekleyin.

Aşağı yukarı böyle. Nerede bir hata olabilir - pozisyon henüz kapanmadıysa, kapanma zamanı sıfırdır. Bu, geri sayımın başlatılmasında bir soruna neden olabilir. Örneğin, değişkeni -1'e sıfırlayabilirsiniz.

Evet, OnDeinit() içindeki zamanlayıcıyı yok etmeyi unutmayın:

 //+------------------------------------------------------------------+
   void OnDeinit ( const int reason) { EventKillTimer ();}
//+------------------------------------------------------------------+
 
artmedia70 :

Zamanlayıcı OnInit() içinde başlatılır

Geri sayımı başlatmak için zamanlayıcıda son pozisyonun kapanış saatini bulmanız ve bu andan itibaren 121 saniye saymanız gerekir. Yeni bir pozisyonun açılmasına izin veren bir bayrak iletmek için kapsamı tüm programı kapsayan global bir değişken kullanın. Başlangıçta 121'den büyük bir değer içermesini sağlayabilirsiniz, örneğin 122 (bekleme süresini ayarlardan değiştirebilirsiniz).

OnTick()'te Bu değişkeni kontrol edin. 121'den fazlaysa ve pozisyon yoksa - bir pozisyon açın - ve açılış başarısını kontrol ettikten sonra değişkeni sıfırlayın.

Pozisyon kapanır kapanmaz zamanlayıcı kapanma zamanını görür (bunu sürekli olarak saniyede bir yapar) ve mevcut zamandan pozisyon kapanma zamanına 121 saniyeden az bir süre geçmişse, zaman sayımı başlar - her saniye değeri 1 ile değişken olarak ekleyin.

Aşağı yukarı böyle. Nerede bir hata olabilir - pozisyon henüz kapanmadıysa, kapanma zamanı sıfırdır. Bu, geri sayımın başlatılmasında bir soruna neden olabilir. Örneğin, değişkeni -1'e sıfırlayabilirsiniz.

Evet, OnDeinit() içindeki zamanlayıcıyı yok etmeyi unutmayın:

Tamam teşekkürler. Bunu tek satırda yapmayı umuyordum, ancak görünüşe göre çalışması daha uzun sürecek.

 
abeiks :

Tamam teşekkürler. Bunu tek satırda yapmayı umuyordum, ancak görünüşe göre çalışması daha uzun sürecek.