[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 323

 
Vinin писал(а) >>

Bu yüzden bilerek hata yapıyorsun.

Ve bilerek, harika ... Bu hatayı görmekten memnun olurum ama bulamıyorum.

 
Daiver2 >> :

Bazı fonksiyonları çalıştırıyorum, bunları script olarak çalıştırıyorum, derleme sırasında hata olup olmadığını ve hangilerini terminalde çalışıp çalışmadığını kontrol etmek için. Bugün penceredeki çubukların ön hesaplamasının İşlevini aldım:

Doğal olarak *Yeterli çubuk yok* mesajı görünüyor, ancak yeni bir onay işareti ile bu mesajın süresiz olarak tekrar görüneceğini anlıyorum.

Şimdi bir değişken ekliyorum ve bir if ifadesi ekliyorum ve ayrıca gelecekte Bloc_Error hata işleme bloğunda bir switch ifadesi koydum , sonuç şu:

Soru şu ki, switch deyimini yanlış çevirdim, neden *Uzman çalışmıyor* mesajı gelmiyor ve böylece danışman gerçekten çalışmayı durduruyor?????
 //+------------------------------------------------------------------+      
     switch ( ) //?????????????? почему в switch не передаёте параметр 
       {
       case 3 :            // Неверные параметры:
      Work = false ;
       return ( 0 ) ;
       }
 

Merhaba!

Danışmanın çalışması sırasında bir hatanın ortaya çıkmasının nedenini anlayamıyorum. Bir danışmanı aynı anda bir terminalde 11 çift üzerinde test ediyorum (demo hesabı). Giriş koşulları her saat başında kontrol edilir, yani. 11 danışman aynı anda çalışmaya başlar. Birbirlerine karışmamaları için IsTradeBusy() işlevi kullanılır (buradan https://www.mql5.com/ru/articles/1412 ). Son zamanlarda, bir pozisyon açmak yerine EA, TradeIsBusy global değişkeninin değerini değiştirmeye çalışırken bir hata bildiriyor. İşte kodun bir parçası:

     // пытаемся менять значение TradeIsBusy с 0 на 1
     // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
     if ( GlobalVariableSetOnCondition ( "TradeIsBusy" , 1.0 , 0.0 ) ) 
         return ( 1 ) ;
     else
     // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
     // возникла ошибка (это мы и проверим)
     {
        _GetLastError = GetLastError ( ) ;
        // если это всё таки ошибка, выводим информацию и пробуем ещё раз
        if ( _GetLastError ! = 0 )
        {
           Print ( "TradeIsBusy()-GlobalVariableSetOnCondition( \" TradeIsBusy \" ,1.0,0.0 )-Error #" ,
           _GetLastError ) ;
           continue ;
        }
     }

Hata kodları:

#4002 - "dizi dizini aralık dışında"

#4105 - "Hiç sipariş seçilmedi"

GlobalVariableSetOnCondition komutu tarafından bu hataların hangi koşullar altında oluşturulabileceğini anlamıyorum?

Terminal Broco Trader 4.0 yapı 225.

Terminal bu kadar hatalı olabilir mi?

 
Urain писал(а) >>

Teşekkürler, çözeceğim.

 
OAndrey писал(а) >>

Merhaba!

Danışmanın çalışması sırasında bir hatanın ortaya çıkmasının nedenini anlayamıyorum. Bir danışmanı aynı anda bir terminalde 11 çift üzerinde test ediyorum (demo hesabı). Giriş koşulları her saat başında kontrol edilir, yani. 11 danışman aynı anda çalışmaya başlar. Birbirlerine karışmamaları için IsTradeBusy() işlevi kullanılır (buradan https://www.mql5.com/ru/articles/1412 ). Son zamanlarda, bir pozisyon açmak yerine EA, TradeIsBusy global değişkeninin değerini değiştirmeye çalışırken bir hata bildiriyor. İşte kodun bir parçası:

Hata kodları:

#4002 - "dizi dizini aralık dışında"

#4105 - "Sipariş seçilmedi"

GlobalVariableSetOnCondition komutu tarafından bu hataların hangi koşullar altında oluşturulabileceğini anlamıyorum?

Terminal Broco Trader 4.0 yapı 225.

Terminal bu kadar hatalı olabilir mi?

Bu kod parçası hakkında hiçbir şey söylenemez. Ve tavsiye olarak. Fonksiyonun başlangıcında, son hatanın durumunu sıfırlayın. Başka yerlerde de ortaya çıkabilir.

   GetLastError ( ) ;    //Сбрасываем состояние 

   // пытаемся менять значение TradeIsBusy с 0 на 1
   // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
   if ( GlobalVariableSetOnCondition ( "TradeIsBusy" , 1.0 , 0.0 ) ) 
       return ( 1 ) ;
   else
   // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
   // возникла ошибка (это мы и проверим)
   {
      _GetLastError = GetLastError ( ) ;
       // если это всё таки ошибка, выводим информацию и пробуем ещё раз
       if ( _GetLastError ! = 0 )
       {
         Print ( "TradeIsBusy()-GlobalVariableSetOnCondition( \" TradeIsBusy \" ,1.0,0.0 )-Error #" ,
         _GetLastError ) ;
         continue ;
       }
   }
 

Metinde satır sonu nasıl yapılır? Örneğin, OBJ_LABEL içinde bir şey çiziyorum ve metnin birkaç satırda yazılmasını istiyorum.

 
Mathers >> :

Metinde satır sonu nasıl yapılır? Örneğin, OBJ_LABEL'de grafikte bir şey gösteriyorum ve metnin birkaç satırda yazılmasını istiyorum.

Birden çok etikete çıktı.

 

Satır sayısı dinamik olarak değişirse ne olur? Ve oldukça büyük olabilir. Belki etiket yerine başka bir şey kullanılabilir?


Ve işte başka bir soru: Diyelim ki, diyelim ki bir saniye gecikmeyle sonsuz bir döngüde bir şeyler yapan bir komut dosyam var. Kaldırmaya çalıştığımda "script'i sil" seçiyorum, grafikten kaldırılmıyor ama genel olarak tıkırdamaya başlıyor, gecikmemiş gibi geliyor. Tekrar "sil"e basıyorum - ve o zaman siliniyor. Sorun ne? Belki de doğru bitmesi için koda bir şey eklenmesi gerekiyor?

 
Mathers >> :

Satır sayısı dinamik olarak değişirse ne olur? Ve oldukça büyük olabilir. Belki etiket yerine başka bir şey kullanılabilir?

Bir seçenek olarak uyarı. Yorum - belki uygun.

Ve işte başka bir soru: Diyelim ki, diyelim ki bir saniye gecikmeyle sonsuz bir döngüde bir şeyler yapan bir komut dosyam var. Kaldırmaya çalıştığımda "script'i sil" seçiyorum, grafikten kaldırılmıyor ama genel olarak tıkırdamaya başlıyor, gecikmemiş gibi geliyor. Tekrar "sil"e basıyorum - ve o zaman siliniyor. Sorun ne? Belki de doğru bitmesi için koda bir şey eklenmesi gerekiyor?

while(true) öğesini while(!IsStopped()) ile değiştirin

 
Mathers >> :

Satır sayısı dinamik olarak değişirse ne olur? Ve oldukça büyük olabilir. Belki etiket yerine başka bir şey kullanılabilir?

Numara. Tabii ki, yorum uymuyorsa. Çıktının yapılacağı yere bir f-th yazın ve bunun üzerinden ihtiyacınız olanı yazın.

Ve işte başka bir soru: Diyelim ki, diyelim ki bir saniye gecikmeyle sonsuz bir döngüde bir şeyler yapan bir komut dosyam var. Kaldırmaya çalıştığımda "script'i sil" seçiyorum, grafikten kaldırılmıyor ama genel olarak tıkırdamaya başlıyor, gecikmemiş gibi geliyor. Tekrar "sil"e basıyorum - ve o zaman kaldırılıyor. Sorun ne? Belki de doğru bitmesi için koda bir şey eklenmesi gerekiyor?

Olması gereken yol bu.