Hatalar, hatalar, sorular - sayfa 2859

 
fxsaber :

Genel olarak, olası bir uygulama hakkındaki düşünceleriniz nelerdir?

birçok uygulama olabilir

ama yine de EA arasındaki veri alışverişi sorununa iniyor

en basit şey, her Uzman Danışmanın başlangıcında OnTick()'te başlatma izni kontrolünü ayarlamak ve başlatmayı aynı OnTick()'te gerçekleştirmektir - bu, çizelgeleri geri yüklemenize ve ardından EA'yı üzerlerinde çalıştırmanıza izin vermez ve EA'yı kapatmadan önce kaydetme OnDeinit( ) içinde yapılabilir

peki , bu hayvanat bahçesini kim yönetecek, önemli değil - ya ana EA ya da hizmet

 

Test kullanıcısı günlüğünde

 2020.09 . 28 00 : 41 : 09.491 wrong tester bar time
2020.09 . 28 00 : 41 : 09.491 history error 9 in undefined function

Bu ne anlama geliyor?

 
Aleksey Vyazmikin :

Test kullanıcısı günlüğünde

Bu ne anlama geliyor?

Bu, bir sonraki m1 ohlc değeri alındığında (veya açık fiyatlarda test edilirken çubuğun durumu) zaman alanının 0 olduğu anlamına gelir.

tanımsız işlev, sorunun önceden tanımlanmış işlevlerin (OnTick, OnTimer vb.) dışında, yani ana test cihazı döngüsünde meydana geldiği anlamına gelir.

 
Slava :

Bu, m1 ohlc'nin bir sonraki değeri (veya açık fiyatlarla test edilirken çubuğun durumu) alındığında, zaman alanının 0 olduğu anlamına gelir.

tanımsız işlev, sorunun önceden tanımlanmış işlevlerin (OnTick, OnTimer vb.) dışında, yani ana test cihazı döngüsünde meydana geldiği anlamına gelir.

Bütün gün her şey yolunda gitti ve sonra başladı. Bir kullanıcı olarak ne yapabilirim?

 
Slava :

Bu, bir sonraki m1 ohlc değeri alındığında (veya açık fiyatlarda test edilirken çubuğun durumu) zaman alanının 0 olduğu anlamına gelir.

tanımsız işlev, sorunun önceden tanımlanmış işlevlerin (OnTick, OnTimer vb.) dışında, yani ana test cihazı döngüsünde meydana geldiği anlamına gelir.

Anlamıyorum, kodumda bir hata mı var yoksa terminalde bir hata mı? Tüm geçmişi sil - yardımcı olmadı.

Katma:

Hatalardan kaçınmanızı sağlayan bir devre dışı bırakma işlevi buldum, ancak başka bir danışmanda bu işlev doğru çalışıyor! Nasıl yani? Kişisel olarak bırakabilirim.

Bu buggy işlevi etkinleştirildiğinde bile, OnTick() ilk çubuğu ve ardından bu hatayı tamamen geçer.

Farklı terminallerde hata onaylanır.

Keneler üzerinde başlatıldı - hata yok ...

Ancak, günlükteki tuhaflık:

 2020.09 . 28 17 : 22 : 22.327 2020.09 . 18 09 : 45 : 02    Test_01

Tiklerle, enstrümana bakarsanız, ilk tik tam olarak 10:00'daydı ve işlem seansı o sırada hala kapalıydı. Bu görsel modda, karga olmadan, ilk baskı saat 10 pozisyonunda geliyor.

 
Igor Makanu :

en basiti - OnTick() içindeki her Uzman Danışmanın başlangıcında, başlatma için bir izin kontrolü kaydedin

Bu, görevin ana engelidir.
 
fxsaber :
Bu, görevin ana engelidir.

Çizelgelerin kimliğine dikkat etmeye çalışın ve kıdem ile başlayın. Ancak bu, danışmanların etkileşimini iptal etmez. Veya çalıştırma sırasındaki çizelgelerin kimlikleriyle bir dosya veya belki bir SQLite tabanı oluşturun.

İlk başlatmada, listede Chart_ID() yoksa, listeye eklenir. Terminalin kapanması nedeniyle kapanmıyorsa listeden kaldırılır. Böylece danışmanların etkileşimini yapılandırmak mümkün olacaktır.

 
fxsaber :
Bu, görevin ana engelidir.

gördüğüm gibi çizildi ... aşağıdaki kodla 2 EA oluşturdu:

 #define PREFIX_NAME "QWERTY_"
enum ENUM_EA_STATE {WORK, READY_TO_INIT, ENABLE_INIT, ERROR_GLOBAL_VARIABLE};
const string this_ea_name = PREFIX_NAME + MQLInfoString ( MQL_PROGRAM_NAME );
void OnTick ()
{
   static ENUM_EA_STATE state = GlobalVariableSet (this_ea_name, ENUM_EA_STATE::READY_TO_INIT) > 0 ? READY_TO_INIT : ERROR_GLOBAL_VARIABLE;
   Comment ( EnumToString (state));
   if (state != WORK)
   {
       if (state == ERROR_GLOBAL_VARIABLE) return ;
       if (!My_Init(this_ea_name)) return ;
       GlobalVariableSet (this_ea_name, ENUM_EA_STATE::WORK);
      state = WORK;
   }
   Print (this_ea_name, " " , __FUNCTION__ );
}
//+------------------------------------------------------------------+
bool My_Init( const string chek_ea_name)
{
   if ( GlobalVariableGet (chek_ea_name) == (ENUM_EA_STATE)ENABLE_INIT)
   {
       Print ( "EA is init" );
       return ( true );
   }
   return ( false );
}
//+------------------------------------------------------------------+

ve bir zamanlayıcıda çalışan bir kontrol EA (5 saniye)

 #define PREFIX_NAME "QWERTY_"
enum ENUM_EA_STATE {WORK, READY_TO_INIT, ENABLE_INIT, ERROR_GLOBAL_VARIABLE};
//+------------------------------------------------------------------+
int OnInit ()
{
   EventSetTimer ( 5 );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   EventKillTimer ();
}
//+------------------------------------------------------------------+
void OnTimer ()
{
   for ( int i = GlobalVariablesTotal () - 1 ; i >= 0 ; i--)
   {
       string curr_gname = GlobalVariableName (i);
       if ( StringFind (curr_gname, PREFIX_NAME) !=- 1 )
      {
         if ( GlobalVariableGet (curr_gname) == (ENUM_EA_STATE)READY_TO_INIT)
         {
             if ( GlobalVariableSet (curr_gname, ENUM_EA_STATE::ENABLE_INIT) > 0 )
            {
               Print ( "Enable Init : " , curr_gname, ".....exit" );
               return ;
            }
         }
      }
   }
}
//+------------------------------------------------------------------+


kontrol edildi, her şey çalışıyor, tek şey ya çözemedi ya da global değişkenlere yazmak GlobalVariableSetOnCondition () aracılığıyla işe yaramadı

 
fxsaber :
Bu, görevin ana engelidir.

GlobalVariableSetOnCondition - sorunu çözmek için ihtiyacınız olan her şey.

İşleme yalnızca GlobalVariableSetOnCondition true döndürdüğünde izin verilir.
Kaynakların başarılı bir şekilde başlatılması ve serbest bırakılmasından sonra, ch'yi döndürürüz. değişken ilk durumuna geçer ve başka bir EA başlar.

DeInit'te - danışmanlar olmadan bir terminal başlangıcına girmemek için bir değişkenin koşulsuz olarak silinmesi (önceki yükleme doğru şekilde tamamlanmadıysa).

 
Alexey Viktorov :
Igor Makanu :
Andrey Khatimliansky :

Tavsiye için teşekkürler. GlobalVariableSetOnCondition yönüne bakacağım.