Hatalar, hatalar, sorular - sayfa 479

 
sonra servis masasına yazın, kodu ekleyin.
 
sergeev :

sonra servis masasına yazın, kodu ekleyin.

Evet, ekte uzman koduyla birlikte servis masasına gitmek daha iyidir.

Kod için endişelenmeyin - testlerden sonra her şeyi sileriz. Ana ve tek görevimiz hataları bulmaktır .

 

Başka bir soru. CopyTime işlevini kullanıyorum. Telefon etmek:

 CopyTime ( "EURUSD" , PERIOD_MN1 , D'2011.06.30' , D'2011.08.01' , Array)

nedense D'2011.08.01' değerine sahip yalnızca bir öğe döndürür. Ve D'2011.07.01' nerede? Amaç ne?

PS Dizi[] dizisi dinamiktir.

 
marketeer :

Başka bir soru. CopyTime işlevini kullanıyorum. Telefon etmek:

nedense D'2011.08.01' değerine sahip yalnızca bir öğe döndürür. Ve D'2011.07.01' nerede? Amaç ne?

PS Dizi[] dizisi dinamiktir.

Evet, nedense ilk unsur atlandı, servis masasına yazın.

 datetime Array[];
   CopyTime ( "EURUSD" , PERIOD_MN1 , D'2011.06.01' , D'2011.08.01' , Array); 
   for ( int i= 0 ;i< ArraySize (Array);i++)
     {
       Print (i, " " ,Array[i]);
     }

1 2011.08.01 00:00:00

0 2011.07.01 00:00:00

 
marketeer :

Başka bir soru. CopyTime işlevini kullanıyorum.

Zaten benzer bir istek var.

Anlıyoruz.

 

İşte başka bir gizem. Hatayı hiçbir şekilde yakalayamıyorum - benim mi yoksa terminal mi olduğunu bilmiyorum.

Bir uzman tarafından verilen siparişlerin sayısını sayan önemsiz bir kod vardır. Sayaç global değişkenlerde saklanır. Buna benzer:

 int Count;

int OnInit ()
{
  Count = ( int ) GlobalVariableGet ( "Count" );
   return ( 0 );
}

void OnTick ()
{
   // bla-bla-bla
   if (успешно отправлен ордер)
  {
    Count++;
     if (! MQL5InfoInteger ( MQL5_TESTING ))
    {
       if ( GlobalVariableSet ( "Count" , Count) == 0 )
      {
         Print ( "GlobalVariableSet error " , GetLastError ());
      }
    }
  }
}

Bu Sayım sipariş yorumları için kullanılır. Sonuç olarak, bir sonraki siparişin sayısının halihazırda piyasada bulunan pozisyonlardan (birkaç birim ile) daha az olduğunu periyodik olarak gözlemliyorum. Günlükte herhangi bir hata yok.

Herhangi bir fikir? Belki birisi , küresel değişkenlerin son değerlerinin benzer bir "kaybolması" ile karşı karşıya kaldı, örneğin, belirli koşullar altında çıkarken terminal tarafından kaydedilmemeleri nedeniyle (örneğin, belki de bağlantı olduğunda kayıp - sadece bir versiyon)?

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
 
marketeer :

İşte başka bir gizem. Hatayı hiçbir şekilde yakalayamıyorum - benim mi yoksa terminal mi olduğunu bilmiyorum.

Bunun gibi bir şey deneyin. Ben küresel gerçeği çıkarmadım. Ancak her şey doğru kabul edilir.

     int Amount_Orders = 0 ;

     for (count = 0 ; count < OrdersTotal (); count++)
       {  
         if ( OrderSelect ( OrderGetTicket (count))) 
          {
           int tp_ord = ( ENUM_ORDER_TYPE ) OrderGetInteger ( ORDER_TYPE );  
           if (tp_ord == ORDER_TYPE_BUY_STOP   || tp_ord == ORDER_TYPE_SELL_STOP ||
              tp_ord == ORDER_TYPE_BUY_LIMIT || tp_ord == ORDER_TYPE_SELL_LIMIT )
           Amount_Orders++;  
          }
       }
 
tol64 :

Bunun gibi bir şey deneyin. Ben küresel gerçeği çıkarmadım. Ancak her şey doğru kabul edilir.

Benim sorunum tam olarak global değişkene yazılan değerin kaybolması, yani. tamamen değil (aylık bir zaman aşımıyla silerken olduğu gibi), ancak eskisi kalır. Elbette siparişleri yeniden hesaplayabilirsiniz, ancak benim yöntemim de işe yaramalı.
 
papaklass :

Geliştiriciler:

Yani amaçlanan, gecikme sona erme süresiyle kapanırsa, bu hiçbir şekilde OnTrade işlevi tarafından izlenmez mi?

Not: Genel olarak, OnTrade ticaret olayı işleyicisinin amacı, stoploss ve take'leri yakalayamıyorsa, piyonların kapanışını emir sona erme süresine kadar yakalayamıyorsa net değildir. Algoritmanın yürütülmesi sırasında hepimiz iki kez kontrol etmeliyiz. Bu yaklaşım kafa karıştırıcıdır, çünkü ticaret olaylarının işleyicisine güveniyorsunuz, ancak iki kez kontrol etmeniz gerekiyor. Ayrıca, yeniden kontrollerden sonra OnTrade() tarafından işlenmeyen olayları yakalarsınız. Peki, ne için? Ama şimdi Tetris oynayabilir ve her türlü saçmalığı çizelgelere çizebiliriz. Geliştiriciler, size yalvarıyorum, platformun ticaret bölümünü mantıklı sonucuna getirin.

İşten çıkarmalar hakkında bir şey söyleyemem, onlarla çalışmadım, henüz gerek yoktu, ancak duraklamalar ve alımlar OnTrade'de hem test cihazında hem de gerçek zamanlı olarak mükemmel bir şekilde işleniyor.

Örneğin, günlükteki bu satırlar OnTrade işleyicisi tarafından görüntülenir:

2011.08.08 09:03:05 ChTestExp (EURUSD,H1) EURAUD tarafından uzun pozisyon stop-loss nedeniyle kapatılacak
2011.08.08 09:03:05 ChTestExp (EURUSD,H1) -----------------Anlaşma #5263582 [sl 1.37819]
2011.08.08 09:03:05 ChTestExp (EURUSD,H1) eskiAnlaşmalarToplam=558 yeniAnlaşmalarToplam=559
 
papaklass :

Print( __FUNCTION__ ) işlevini OnTrade() işlevine koyarsınız. Ve günlüğünüzde ne zaman olacak

tetiklenen stop loss
7 numaralı anlaşma 0,10 AUDUSD'yi 0,89544'ten sattı (15 numaralı siparişe göre)
işlem yapıldı [#7 0,10 AUDUSD'yi 0,89544'ten sattı]
gerçekleştirilen sipariş 0,10'u 0,89544'ten sat [#15 0,89544'ten 0,10 AUDUSD sat]

OnTrade()'in işe yarayıp yaramadığını gördünüz mü?

OnTrade tüm işlemleri, hacimlerini, kârını takip ettiğinden, eklemeniz olmadan bile her şey benim için çalışıyor, tüm bunlar özetleniyor ve her bir sembol için OnDeinite'ta ayrı ayrı gösteriliyor. Ve toplanan tüm göstergeler (işlem sayısı, kâr) testçinin raporuyla tam olarak eşleştiğinden, OnTrade() işlevinin çalışmasından şüphe etmek için hiçbir nedenim yok.

OnTrade'de işlenmeyen tek şey, testin sonunda pozisyonları kapatmak için yapılan işlemlerdir ('test sonu' yorumu ile) ve test cihazında stop-out ile kapanış (yorum 'so ...') , test modundalar, OnDeinit'te daha fazla işlem. Test kullanıcısı günlüğünden alıntı:

2011.08.09 00:06:43 Core 1 log dosyası "E:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110809.log" yazıldı
2011.08.09 00:06:43 Çekirdek 1 EURUSD,H1: 13962 ms içinde oluşturulan 888296 tik (275 bar) (tarihte toplam çubuk sayısı 6479, toplam süre 16177 ms)
2011.08.09 00:06:43 Test aralığının %8'inde Core 1 stop out meydana geldi
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 Deinit Sonu
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Tüm Kar = -9072.04
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Toplam işlem: 17
.....
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 -------------------------------- --------
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Toplam kâr EURGBP = -4738.97
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Haftanın karı EURGBP = 319.68
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Toplam kâr GBPUSD = -3775.86
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Haftanın karı GBPUSD = -1798.83
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Toplam kâr EURUSD = -557.21
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Haftanın karı EURUSD = 65.85
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Bakiye=927.96 Eşit=927.96 Kar=0,00 MarjDüzey=0,00
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 --------------- Rapor ---------------- ---
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Bakiye=10000,00 Equite=927.96 Kar=0,00 MarjSeviyesi=0,00
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Hataları açın: 1 Hataları kapatın: 0 Hataları değiştirin: 0 Öneriler: 1
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Çalışma Süresi: 0 dak. 14 saniye
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 ChTestExp Uzman Danışmanı, 2011.01.18 10:11 tarihinde EURUSD grafiği, H1 periyodunda çalışmayı tamamladı.
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 Deinit yürütme
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 OnDeinit_UninitReason = Başka bir neden
2011.08.09 00:06:43 Çekirdek 1 OnTester sonucu 0
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 emir gerçekleştirildi 1.65 1.59804'te [#69 1.59804'te 1.65 GBPUSD satın]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 anlaşması yapıldı [#68 1.59804'ten 1.65 GBPUSD satın al]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 anlaşma #68 1.59804'ten 1.65 GBPUSD satın alındı (69 numaralı siparişe göre)
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 pozisyon test bitişi 1.59804'te kapandı [sat 1.65 GBPUSD 1.57341182 tp: 1.57247]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 sipariş gerçekleştirildi 0,45 0.83931 [#68 0,45 EURGBP 0.83931]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 anlaşması yapıldı [#67 0.45 EURGBP'yi 0.83931'den satın al]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 anlaşma #67 0,45 EURGBP 0.83931'den satın alındı (68 numaralı siparişe göre)
2011.08.09 00:06:43 Çekirdek 1 2011.01.18 10:11:00 konum durdurma %29,09'da tetiklendi [sat 0,45 EURGBP 0.83930333 tp: 0.80463]
2011.08.09 00:06:43 Core 1 2011.01.17 14:39:39 EURUSD uzun pozisyonu stop-loss'tan kapatılacak
2011.08.09 00:06:43 Çekirdek 1 2011.01.17 14:39:39 -----------------Anlaşma #66 sl 1.32900

2011.08.09 00:06:43 Core 1 2011.01.17 14:39:39 eskiFırsatlarToplam=65 yeniFırsatlarToplam=66

Test kullanıcısının raporundan:

Sonuçlar
Geçmiş kalitesi: 100%
Barlar: 275 Tiki: 888296
Net kazanç: -9 072.04 Toplam kar: 1 652.29 Toplam kayıp: -10 724,33
karlılık: 0.15 Kazanma beklentisi: -533.65
Kurtarma faktörü: -0.92 Sharpe oranı: -0.35

Bakiye düşüşü:
Bakiyeye göre mutlak düşüş: 9 072.04 Bakiyeye göre maksimum düşüş: 10 392.34 (%91.80) Bakiyeye göre göreceli düşüş: %91.80 (10 392.34)
Fonların çekilmesi:
Şu yollarla mutlak düşüş: 9 072.04 Öz sermayeye göre maksimum düşüş: 9 852.02 (%91.39) Öz sermayeye göre göreceli düşüş: %91,39 (9 852.02)

Toplam işlemler: 17 Kısa işlemler (% kazanç): 10 (%70,00) Uzun işlemler (% kazanç): 7 (%85.71)
Toplam işlemler: 67 Karlı işlemler (tümünün yüzdesi): 13 (%76,47) İşlemleri kaybetme (tümünün yüzdesi): 4 (%23.53)

En büyük karlı ticaret: 263.25 En büyük kaybeden ticaret: -5 036.39

Ortalama karlı ticaret: 127.10 Ortalama kaybeden ticaret: -2 681.08

Maksimum sürekli kazanç sayısı (kar): 10 (1 320.30) Maksimum sürekli kayıp sayısı (kayıp): 2 (-4 084.59)

Maksimum sürekli kar (kazanç sayısı): 1 320.30 (10) Maksimum sürekli kayıp (kayıp sayısı): -5 036.39 (1)

Ortalama Sürekli Kazanç: 4 Ortalama Sürekli Kayıp: 1


Bildiğiniz gibi, bağımsız olarak hesaplanan son rakamlar aynıdır, bu nedenle her şey doğrudur. Özellikle stop-out ile bir örnek aldı.