Çaydanlıktan gelen sorular - sayfa 56

 
Interesting :

Kene işleyicisinden farklı olarak, zamanlayıcı hafta sonları veya iş günlerini umursamaz, dönem tarafından belirtilen belirli bir süre sonra yürütülür.

Zamanlayıcının yoğun işlenmesi durumunda, elbette, bir kayma ile veya ilk tik işaretine kadar (birçok seçenek vardır) bir süre kesmek daha iyidir, ancak zamanlayıcı işlemesi çok zor değilse ve süre yeterince uzun, zamanlayıcı kesilemez.

Ayrıca zamanlayıcının işlenmesinde iş günü olup olmadığının kontrol edilmesini sağlayabilirsiniz.

Gerekirse, hafta sonu için yoğun hesaplamalar planlayabilir (örneğin, Expert Advisor'ın otomatik optimizasyonu ) ve bu işlemi bir zamanlayıcıdan başlatabilirsiniz. Hesaplamaların yürütülmesinin sonunda (veya yürütmenin başlangıcında), zamanlayıcı doğru bir şekilde kesilebilir.

Çoklu para birimi Uzman Danışmanının OnTimer() işlevi aracılığıyla test cihazında test etmeye gelince. Diyelim ki zamanlayıcı 10 saniyelik aralıklarla ayarlandı. Test süresi boyunca tüm hafta sonlarını işaretleyecek mi? Anladığım kadarıyla, Vladimir tam olarak bunu kastetmişti. Yani, zamanlayıcıya Cumartesi ve Pazar günleri atlamasını söylerseniz, test çok daha hızlı olacaktır.
 
tol64 :
Çoklu para birimi Uzman Danışmanının OnTimer() işlevi aracılığıyla test cihazında test etmeye gelince. Diyelim ki zamanlayıcı 10 saniyelik aralıklarla ayarlandı. Test süresi boyunca tüm hafta sonlarını işaretleyecek mi? Anladığım kadarıyla, Vladimir tam olarak bunu kastetmişti. Yani, zamanlayıcıya Cumartesi ve Pazar günleri atlamasını söylerseniz, test çok daha hızlı olacaktır.

1. Hafta sonu için timer'ı çok karmaşık olmayan hesaplamalarla kapatmaya çalıştım, pek bir fark hissetmedim (farklılıklar olsa da tabii), şimdilik timer'ı kapatmamaya karar verdim.

2. Evet, zamanlayıcı ayarlanmışsa, test cihazında veya normal modda bir fark olmaksızın, zamanlayıcı kapatılana kadar işlem gerçekleşir. Bir test cihazından bahsediyorsak, 10 saniye aralıklarla, işlem tüm test süresi boyunca - her 10 saniyede bir gerçekleşir.

Hafta sonu için zamanlayıcıyı durdururken birkaç çözüm vardır:

a. Bir değişkende bir durum kaydı ile zamanlayıcıyı kesmek için. Ana cihazdaki (veya bir "casus" sinyalindeki) ilk tikte, zamanlayıcı yeniden başlatılabilir. Bu yöntemin, likit olmayan bir piyasada bir tik kaçırma veya tik geciktirme olasılığı ile ilişkili dezavantajları vardır. Kene atlama, ticaret sunucusuna bağlantı eksikliğinden de kaynaklanabilir.

b. Belirli bir süre için kaymada frenler. İyi olan, periyodun tam olarak ayarlanmış olmasıdır, kötü olan şey ise, bu yöntemle sadece zamanlayıcı değil, tüm uzmanın "X" saatine kadar hareketsiz kalmasıdır.

Her ne kadar tüm pozisyonlar ve siparişler test cihazında işlenecek olsa da.

içinde. Zamanlayıcı süresini artırarak bir duraklama uygulayabilirsiniz. Zamanlayıcının "uyanması" gereken saat önceden bilindiği ve Expert Advisor'ın işi durmadığı için uygundur. Zamanlayıcıyı çalışır durumda veya bekleme modunda izlemeniz elverişsizdir.

içinde. Zamanlayıcının doldurulmasını iki gruba ayırın, ilki sürekli olarak gerçekleştirilir (örneğin, bağlantının durumunun belirlenmesi) ve ikincisi koşullara göre (çalışma günleri, bağlantı var, ticarete izin verilir, vb.) .

 
Interesting :


Gerekirse, hafta sonu için yoğun hesaplamalar planlayabilir (örneğin, Expert Advisor'ın otomatik optimizasyonu ) ve bu işlemi bir zamanlayıcıdan başlatabilirsiniz. Hesaplamaların yürütülmesinin sonunda (veya yürütmenin başlangıcında), zamanlayıcı doğru bir şekilde kesilebilir.

Merhaba! Çooook ilginç.Dün bende de benzer bir fikir vardı hafta sonu otomatik optimizasyon ama soru içeren bir yazı yazacak vaktim olmadı.Şunu yazmak istedim:

1. Bunu yapmak mümkün mü?Kodda nasıl görünebilir? .Bunun için artık çevrim içi tiklere gerek yoktur ve fonksiyon basitçe bir döngüde dönecektir..

2. Bunun hakkında okumak için aklınızda bir yer var mı, şube hangi iş parçacığında?

3. Şampiyonluk için geçerliyse araca yüklenmez mi? Bu muhtemelen organizatörler için bir sorudur.

 
MetaDriver :
Her şeyi normal bir Uzman Danışmanda, uygun bir zaman diliminde hesaplayın ve sonucu OnTester()'da görüntüleyin. Ticarete hiç gerek yok. Herhangi bir problem?

teşekkürler anladım

Başka bir soru ortaya çıktı, eğer fiyat ya al ya da durdur zararına ulaşmadıysa, bir pozisyonun zamanında nasıl kapatılacağı .

Siparişlerle çalışmak için kütüphaneler olduğunu okudum ... Aldım ... yemin ederim böyle bir prosedür yok ...

Bu nedenle soru, belirli bir süre geçtikten sonra (örneğin 1 gün) siparişi kapatmak için ne tür bir kod olması gerektiğidir.

 

AccountInfoDouble (ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

bir ticaretin açık olup olmadığını bu şekilde kontrol etmeliyim ...

OrdersTotal ()!=0 çalışmıyor))) çok ilginç bir hata)

 
papaklass :
Konumlar için PosirionTotal() vardır. OrdersTotal() yalnızca bekleyen siparişler için.

if ( PositionsTotal() == 1 )

aynı...yanıt yok

// Normal aç

if ( TimeActivation ( 1 ) )

{

if ( _1_operasyon == 1 && Satın Al ( 0.10) == 1 ) { Uyku(600000); }

if ( _1_operasyon == -1 && Sat ( 0.10) == 1 ) { Uyku (600000); }

}

// Alma veya durdurmadan önce kapatamıyorum

if ( TimeActivation ( 2 ) )

{

if ( PositionsTotal() == 1 ) /// ÇALIŞMAZ)))

{

if ( _1_operasyon == 1 && Sat ( 0.10) == 1 ) { Uyku (600000); }

if ( _1_operasyon == -1 && Satın Al ( 0.10) == 1 ) { Uyku(600000); }

}

}

 
BaTTLeBLooM :

teşekkürler anladım

Bu nedenle soru, belirli bir süre geçtikten sonra (örneğin 1 gün) siparişi kapatmak için ne tür bir kod olması gerektiğidir.

Rica ederim.

Yaklaşık olarak: Bir değişkendeki keşif anını hatırlarsınız. Hemen istediğiniz süreyi ekleyin (örneğin, 1 gün = 60*60*24) .

Ardından, her tikte (veya zamanda) mevcut saatin kontrol zamanından fazla olup olmadığını takip edersiniz. Olursa kapatırsın. // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM :

if ( PositionsTotal() == 1 )

aynı...yanıt yok

// Normal aç

if ( TimeActivation ( 1 ) )

{

if ( _1_operasyon == 1 && Satın Al ( 0.10) == 1 ) { Uyku(600000); }

if ( _1_operasyon == -1 && Sat ( 0.10) == 1 ) { Uyku (600000); }

}

// Alma veya durdurmadan önce kapatamıyorum

if ( TimeActivation ( 2 ) )

{

if ( PositionsTotal() == 1 ) /// ÇALIŞMAZ)))

{

if ( _1_operasyon == 1 && Sat ( 0.10) == 1 ) { Uyku (600000); }

if ( _1_operasyon == -1 && Satın Al ( 0.10) == 1 ) { Uyku(600000); }

}

}

Aslında burada ne yazdığın belli değil ama PositionTotal()'ın açıkça bununla hiçbir ilgisi yok.

Print() öğesini kontrolden önce koyun, =1 ?:

 Print ( "PositionsTotal=" , PositionsTotal ());
if ( PositionsTotal () == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64 :

Konstantin Gruzdev makalesinde "casuslar" ve "ajanlar" ile ilginç bir yöntem önerdi. )) Ama onun "aracı" exSpy Kontrol paneli MCM'nin çalışmak istemediği bir şeyim var.

Şimdi makalede yayınlanan versiyona bir göz atacağım. Şu anda, casusluk konusunda birkaç uzman yapıldı, harika çalışıyorlar.

MetaSürücü :

Bu teknolojinin test cihazında çalışmayacağını düşünüyorum.

İşler.

 
MetaDriver :

Rica ederim.

Yaklaşık olarak: Bir değişkendeki keşif anını hatırlarsınız. Hemen istediğiniz süreyi ekleyin (örneğin, 1 gün = 60*60*24) .

Ardından, her tikte (veya zamanda) mevcut saatin kontrol zamanından fazla olup olmadığını takip edersiniz. Olursa kapatırsın. // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Bir değişken için bir seçenektir, ancak daha güvenilir bir kapatma gerekiyorsa, terminali/danışmanı yeniden başlattıktan sonra bile, siparişi tanımlamak ve açılış zamanını kontrol etmek için sihir kullanabilirsiniz.

 //закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime( int magic, int period) {
         MqlTradeRequest request;
         MqlTradeResult tradeResult;
         MqlTradeCheckResult checkResult;
         ulong ticket = - 1 ;
         int cnt = OrdersTotal ();
         for ( int i=cnt- 1 ; i>= 0 ; i--) {  
                ticket = OrderGetTicket (i);
                 if ( OrderGetInteger ( ORDER_MAGIC ) == magic && ticket> 0 && TimeCurrent () > OrderGetInteger ( ORDER_TIME_SETUP )+period) {
                        request.action = TRADE_ACTION_REMOVE ;
                        request.order = ticket;
                         if ( OrderCheck (request,checkResult) ) {
                                 OrderSend (request, tradeResult);
                        } else {
                                 MessageBox ( "Ошибка" );
                        }
                }
        }
}
Neden: