Hatalar, hatalar, sorular - sayfa 564

 
Hata kullanarak bulut çalışması.
Bu sorunun nedeni nedir? Bulut kaynakları kullanılamıyor.
 
Urain :

Açıklamak.


Planlanan değişikliklerin bir ön duyurusu yapıldı. Bir sonraki derlemedeki değişikliklerin nihai listesi, derlemenin kendisinin yayınlanmasından sonra yayınlanacaktır.
 
Rosh :
Planlanan değişikliklerin bir ön duyurusu yapıldı. Bir sonraki derlemedeki değişikliklerin nihai listesi, derlemenin kendisinin yayınlanmasından sonra yayınlanacaktır.
Teşekkür ederim.
 

Gösterge kodunu uzun süre ve inatla, ortaya çıkan hataları yakalamaktan tamamen ümidimi kesene kadar kazdım. "Aptallar" a yazmadım, çünkü hatalarımdan değil, terminalin işleyişindeki hatalardan şüpheleniyorum.

Göstergenin görevi, fraktalları başka bir zaman diliminden mevcut zaman dilimine yerleştirmek ve yeni fraktal çubuklar ortaya çıktıkça yenilerini eklemektir. Lütfen fraktal okları yerleştirmenin başka yollarını önermeyin, bahsettiğimiz şey bu değil; buradaki sorular, bu özel kodla ilgili ve muhtemelen terminalin yanlış çalışmasıyla ilgili temel sorulardır. Algıyı basitleştirmek için mantıksal olarak yarıya indirilen (yalnızca üst fraktallara) iFractals yardımından alınan örnek temel alındı ve standart Fractals.mq5'ten de bazı kodlar ödünç alındı. Nefretten kaçınmak için son derece titiz olmam gerekiyordu: Neredeyse tüm olası olanları bağladım ve harcanan dizileri temizledim, çalışma sonuçlarında gözle görülür bir fark yaratmayan göstergenin tutamağını serbest bıraktım. Çalışmada aşağıdaki sorunlar ve özellikler fark edildi:

  1. İlköğretimde!! terminali başlatmak, yeni bir grafik penceresi açmak, yeni derlenmiş bir göstergeyi atmak, geçmişin sonunda sıfır çubuğunda biriken tüm fraktallar (sadece bir tanesi ayarlanmış gibi görünüyor) ve fikre göre düzenlenmemiş ve kodun mantığı. Doğru yerleştirme ancak diğer zaman dilimlerine atlandığında başlatılabilir (bazen ilk seferde bile çalışmaz). Ayrıca, göstergeyi çizelgeden silerken, çizelge penceresini kapatırken, yeniden derlerken, yeni bir pencere açarken ve gösterge eklerken, gerekli fraktal düzenini hemen elde etmek neredeyse her zaman mümkündür. Hatalı etkiyi görmek için, terminali tamamen boşaltmak ve 1. adımdaki tüm adımları tekrarlamak gerekir. Belki de sorun, çağrılan göstergenin tutamacının kullanım ömründe ve özel göstergenin ilk başlatılması sırasındaki belirli davranışında yatmaktadır? Fraktalların yanlış düzenlenmesi durumunda (hepsi sıfır çubuğunda "sıkıldığında"), tüm kesin_extremum öğelerinin döngüsündeki çıktı sıfır sonuç verir, ancak TimeUpBuffer'ın bitişik değerlerinin çıktısı, hesaplandığı ve doldurulduğu temel, her zaman sıralı olarak farklı tarihler verir. Bu hemen şu soruyu gündeme getiriyor: sonraki zamanlarda düzenli olarak doğru değerlerle doldurulursa, göstergenin ilk yerleştirilmesi sırasında dolmasını engelleyen nedir?
  2. Aynı kod, aynı sorunu miras alıyor, ancak şimdi vurgu tamamen farklı bir özellik üzerinde. Bu göstergede, bazı ara hesaplama dizilerini gösterge arabellekleriyle INDICATOR_CALCULATIONS olarak bağlamaktan kaçınabilirsiniz. Bu, gösterge kodunun orijinal versiyonudur. Ve öyle görünüyor ki, 1. paragraf hariç her şey uyuyor.
  3. Ancak son derece okuryazar olmak için, en iyi önerileri takip etmeye ve ara hesaplamalar için gösterge arabellekleriyle dizileri bağlamaya çalışalım:
     #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    
    [...]
    
    int OnInit ()
      {
       [...]
       SetIndexBuffer ( 1 ,PreliminaryUpBuffer, INDICATOR_CALCULATIONS );
       SetIndexBuffer ( 2 ,exact_extremum, INDICATOR_CALCULATIONS );
       [...]
      }
    derleyin ve çalıştırın. Sonuç olarak, Terminal Expert loglarında bir hata mesajı alacağız: 2011.11.11 07:42:03 (AUDUSD,H1) Dizi aralık dışı , satır:
                 CopyHigh ( _Symbol , PERIOD_M1 ,TimeUpBuffer[shift+ 1 ]- 1 ,
                                           TimeUpBuffer[shift],
                                           exact_extremum);
    
    Fraktalların bazı zaman dilimlerinde düzenlenmesi ya yoktur ya da düzensizdir.
  4. Bir seans başlatıyoruz, otomatik yazmaya uyarak ellerimizle sihirli geçişler yapıyoruz ve değiştiriyoruz:
     #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    üzerinde:
     #define NUMBER 1
    
    #property indicator_chart_window
    #property indicator_buffers NUMBER+ 2
    #property indicator_plots   NUMBER
    Bunu yapmak doğru olsun ya da olmasın, ama anlaşılmaz bir şekilde çalışıyor!

Noosphere sakinlerine ve özellikle geliştiricilere ikna edici bir istek: lütfen, her noktayı açıklayın ve bana gösterge kodunda nasıl hata ayıklayacağımı söyleyin (tamamen farklı bir uygulamaya gitmezseniz).

Teşekkürler ve dosyalar ektedir.

Not: Dosya adlarında parantez vardı ama yükledikten sonra karıştı.

 

Ve sihirli bir anlaşmadaki mevcut kâr nasıl belirlenir?

bu kod kapalı anlaşmalarda kar döndürür, ancak açık anlaşmaya ihtiyacım var

 #include <Trade\Trade.mqh>
CTrade trade;
void OnTick ()
  {
   double profit= 0 ;
   if ( PositionSelect ( Symbol ()))profit= PositionGetDouble ( POSITION_PROFIT );
   if (profit== 0 ) trade.PositionOpen( Symbol (), ORDER_TYPE_SELL , 0.1 , SymbolInfoDouble ( Symbol (), SYMBOL_ASK ), 0 , 0 , "" );
   if (profit> 1 ) trade.PositionOpen( Symbol (), ORDER_TYPE_BUY , 0.1 , SymbolInfoDouble ( Symbol (), SYMBOL_ASK ), 0 , 0 , "" );
   
   double ld_return= 0 ;  
   HistorySelect ( 0 , TimeTradeServer ());
   for ( int i= HistoryDealsTotal ()- 1 ;i>= 0 ;i--) // По всем сделкам от конца к началу
     {
       ulong ticket= HistoryDealGetTicket (i); // Определение тикета сделки и ее выделение
       if (ticket!= 0 ) 
      {
       if ( HistoryDealGetInteger (ticket, DEAL_TYPE )< 2 )
      ld_return+= HistoryDealGetDouble (ticket, DEAL_PROFIT );
      }
     }     
   Comment (ld_return);   
  }
 

Başlatmanın neden başarısız olduğunu nasıl öğrenebilirim?

Başlatmaya başlamadan önce, fonksiyonla ilgili hataları sıfırlarım

ResetLastError();

Başlatma sonunda bir hata alıyorum

Print("Ошибка " + IntegerToString(GetLastError()));

Sonuç olarak, sekmede uzmanlar alıyorum

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Hatası 0

günlük sekmesinde

2011.11.11 08:47:51 SimpleExpert'i (EURUSD,H1) başlatan uzmanlar başarısız oldu

 
Konstantin83 :

Başlatmanın neden başarısız olduğunu nasıl öğrenebilirim?

Başlatmaya başlamadan önce, fonksiyonla ilgili hataları sıfırlarım

ResetLastError();

sonunda hata alıyorum

Print("Ошибка " + IntegerToString(GetLastError()));

Sonuç olarak, sekmede uzmanlar alıyorum

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Hatası 0

günlük sekmesinde

2011.11.11 08:47:51 SimpleExpert'i (EURUSD,H1) başlatan uzmanlar başarısız oldu

OnInit 0 döndürüyor mu 0 değil mi?
 
stringo :
OnInit 0 döndürüyor mu 0 değil mi?

OnInit true döner, bir şekilde kaçırdım.

Teşekkürler, her şey yolunda.

 
ddd06 :

Ve sihirli bir anlaşmadaki mevcut kâr nasıl belirlenir?

bu kod kapalı anlaşmalarda kar döndürür, ancak açık anlaşmaya ihtiyacım var

Dmitry'nin makalesine bakın ( Tamsayı ). Her şey mümkün olan en iyi şekilde yapılır. Makale: Verilen Sihirli Sayı ile Toplam Konumun Hacmini Hesaplamak için Optimal Yöntem .
 
İyi günler, çoklu para birimi yazmaya başladım, iMA diyorum , nedense gerçek ticarette her şey yolunda gidiyor, test cihazında başlattığım anda bir hata oluşuyor, uzman kaldırıldı çünkü 'Hareketli Ortalama' göstergesi yüklenemiyor [4804 ], göstergede nasıl bir gösterge var, çok net değil, internette net bir cevap bulamadım. Lütfen tavsiye verin, çok minnettar olurum.
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5