Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 97

 
Artyom Trishkin :

KB'de zaten bir çözüm varmış gibi görünüyor:

Ama senaryo için değil. Evet ve bir danışman için oldukça zor çünkü. belirsiz bir durumda OnTick'ten uçulması önerilir. Ve bu durum, bir danışmanın iç organlarının derinliklerinde bir yerde olabilir. Sonuç olarak OnTick'ten çıkmak için sadece oradan çıkmanız gerekmeyecek, aynı zamanda örneğin aynı anda iki pozisyon açmanız da gerekebilir (bir sepet). Ancak aynı zamanda, ikincisini yalnızca birincisi başarıyla açıldıysa açın. Bu durumda, ilk OrderSend'den sonra OnTick'ten uçmak, hafifçe söylemek gerekirse, kötüdür.

 
fxsaber :

Ama senaryo için değil. Evet ve bir danışman için oldukça zor çünkü. belirsiz bir durumda OnTick'ten uçmanız önerilir. Ve bu durum, bir danışmanın iç organlarının derinliklerinde bir yerde olabilir. Sonuç olarak OnTick'ten çıkmak için sadece oradan çıkmanız gerekmeyecek, aynı zamanda örneğin aynı anda iki pozisyon açmanız da gerekebilir (bir sepet). Ancak aynı zamanda, ikincisini yalnızca birincisi başarıyla tamamlandıysa açın. Bu durumda, OnTick'i ilk OrderSend'den sonra bırakmak, hafifçe söylemek gerekirse, kötüdür.

Komut dosyası, konum sayısı açıkça alınana kadar yavaşlatılabilir.

Expert Advisor... Expert Advisor'da, pozisyon açma fonksiyonu mantığında bunu dikkate almanız gerekecektir - çalışmalarının sonucunun geri dönüşü ile Expert Advisor'dan çağrılırlar. Bir piyasa emrinin varlığında sonuç false döndürür. Ve sonra danışman, içine yerleştirilmiş mantığa göre çalışır. Evet, katılıyorum, bazı hazır olanlara uygulamak, böyle bir olasılığı hemen hesaba katmaktan daha zor. Ama dal burada bunun için var - başkalarının bilmesi ve bilgiyi kullanması için.

 
Artyom Trishkin :

Komut dosyası, konum sayısı açıkça alınana kadar yavaşlatılabilir.

Yavaşlayabilir ve danışmanlık yapabilirsiniz.

Expert Advisor... Expert Advisor'da, pozisyon açma fonksiyonu mantığında bunu dikkate almanız gerekecektir - çalışmalarının sonucunun geri dönüşü ile Expert Advisor'dan çağrılırlar. Bir piyasa emrinin varlığında sonuç false döndürür. Ve sonra danışman, içine yerleştirilmiş mantığa göre çalışır. Evet, katılıyorum, bazı hazır olanlara uygulamak, böyle bir olasılığı hemen hesaba katmaktan daha zor. Ama dal burada bunun için var - başkalarının bilmesi ve bilgiyi kullanması için.

İşlemin gerçekleştiği ana kadar biraz beklemeniz gerekiyor. Bir sonraki tıklamadan önce TC'den ayrılmak korkunç bir karardır.

 
fxsaber :

Yavaşlayabilir ve danışmanlık yapabilirsiniz.

İşlemin gerçekleştiği ana kadar biraz beklemeniz gerekiyor. Bir sonraki tıklamadan önce TC'den ayrılmak korkunç bir karardır.

Eh, bu kodda, belirtilen süre için beklenti yerine getirildi. Ancak saatlerce bekleyemezsiniz - geçerli bir ortam elde etmek için belirli sayıda deneme bir süre bekler, ardından sonuçla birlikte çıkar. Aksi takdirde, uzun süre beklerseniz, ticaret ortamı çok değişebilir ve Borjomi içmek için çok geç olacak :)

 //+------------------------------------------------------------------+
//| Заполняет массивы тикетов позиций                                |
//+------------------------------------------------------------------+
bool FillingListTickets( const uint number_of_attempts)
  {
//--- Проверка состояния окружения
   int n= 0 ,attempts= int (number_of_attempts< 1 ? 1 : number_of_attempts);
   while (IsUncertainStateEnv(symb,InpMagic) && n<attempts && ! IsStopped ())
     {
      n++;
       Sleep (sleep);
     }
   if (n>=attempts && IsUncertainStateEnv(symb,InpMagic))
     {
       Print ( __FUNCTION__ , ": Uncertain state of the environment. Please try again." );
       return false ;
     }
//---
 
Artyom Trishkin :

Eh, bu kodda, belirtilen süre için beklenti yerine getirildi. Ancak saatlerce bekleyemezsiniz - geçerli bir ortam elde etmek için belirli sayıda deneme bir süre bekler, ardından sonuçla birlikte çıkar. Aksi takdirde, uzun süre beklerseniz, ticaret ortamı çok değişebilir ve Borjomi içmek için çok geç olacak :)

Evet, beklemeyi fark etmedim. İyi. O zaman daha dikkatliydim...

 

IMHO, PositionsTotal() 'a odaklanmak zaten yanlış bir karardır. Talebinizin işlenmesi sürecinde, örneğin birkaç Uzman Danışman çalışıyorsa, hesaptaki başka bir pozisyon açılabilir/kapatılabilir. Geliştiriciler tarafından amaçlandığı gibi, sunucudan gelen yanıtı kontrol etmeyi engelleyen nedir?

Aslında, PositionsTotal'da genel kontrol dışında pek bir nokta görmüyorum. EA, pozisyonlarının biletlerini açıkça kontrol etmeli ve yalnızca bunlar üzerinde çalışmalıdır.

 

ChartIndicatorGet() kullanıldıktan sonra, IndicatorRelease(handle) işlevi çağrılmalıdır. Bu, ChartIndicatorGet() işlevi örneğinde yazılmıştır, ancak işlev notunda değildir! Geliştiriciler belgeleri düzeltmek istediler, ancak bunu yapmadılar. SD'nin kapatılması nedeniyle, bunun asla yapılmaması mümkündür.

Şahsen "asılı" bir gösterge sorunuyla karşılaştım. SD ile bir görüşmeden:

Ve bunlar. grafikte X göstergesini başlattığımda, tüm göstergeleri gözden geçirdi ve ChartIndicatorGet() işlevini kullanarak bir kopya buldu - sayacı artırdı. Ayrıca, ilk X göstergesini kaldırdım - sayacın azalması, ama aslında ikincisini unuttum - "asılı" bir gösterge aldım, çünkü kolu temizlenmemiş miydi?

Evet. Aynen öyle oluyor. Bu nedenle OnDeinit yerine getirmez.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

CustomRatesUpdate kullanılarak özel simgeye geçmiş verileri csv'ye nasıl içe aktarabilirim?

fxsaber , 2018.08.19 12:01

 // Sets the maximum size of an array.
template < typename T>
int ArrayResize ( T &Array[] )
{
   int MinSize = ArraySize (Array);
   int MaxSize = INT_MAX ;
   int AvgSize;
  
   while ((MinSize < MaxSize - 1 ) && ! IsStopped ())
  {
    AvgSize = ( int )((MinSize + ( long )MaxSize) >> 1 );        
    
//    ArrayFree(Array);
    
     if ( ArrayResize (Array, ( int )AvgSize) == AvgSize)
      MinSize = AvgSize;
     else
      MaxSize = AvgSize;
  }
  
   return ( ArrayResize (Array, MinSize));
}
 
Forumun İngilizce kısmında gösterdi
 // Обмен значениями между двумя числовыми переменными
#define SWAP(A, B) { A += B; B = A - B; A -= B; }
 
fxsaber :
Forumun İngilizce kısmında gösterdi

peki anlamı? birkaç bayt hafızadan tasarruf etmek mi? özellikle double ile diğer sayılar elde edilecektir (== yanlış olacaktır) ve tam sayılarda taşma olabilir