Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 714

 
dimnik :

OnTradeTransaction kullanımıyla optimizasyon süresi garip bir şekilde değişti. 15M sistemi, çok basit, bir yıllık geçmiş, bir çalıştırma 0,3 - 0,4 saniye sürer.

Optimizasyonu başlattıktan sonra, ilk 200-300 çalıştırma bir saniyeden daha kısa bir hızda çalışır, sonrakiler 15-20 saniyeye kadar yavaşlar (50 kez!);

İşlemcinin aşırı ısınması ve daralması yok, belleğin yarısından fazlası boş (16 GB dışında).

OnTradeTransaction işleyicisini kullanmadan önce böyle bir şey yoktu - küçük zaman dilimlerinde daha karmaşık Uzman Danışmanlar yaklaşık olarak aynı hızda optimize edildi.

HistoryDealSelect hızı çok mu etkiliyor? Frenleri nasıl ortadan kaldırabilirsiniz?

void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
   if ( trans.type != TRADE_TRANSACTION_DEAL_ADD ) return ;
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
   long      deal_type         = 0 ;
   double    deal_volume       = 0 ;
   long      deal_magic        = 0 ;
   if ( HistoryDealSelect (trans.deal))
     {
      deal_type         = HistoryDealGetInteger (trans.deal, DEAL_TYPE );
      deal_volume       = HistoryDealGetDouble (trans.deal, DEAL_VOLUME );
      deal_magic        = HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
     }
   else
       return ;
   if (deal_type == DEAL_TYPE_BUY && deal_magic == MagicNumber) current_position += deal_volume;
   if (deal_type == DEAL_TYPE_SELL && deal_magic == MagicNumber) current_position -= deal_volume;
      
  }


Tüm kodu göster.
 

Hey!

Kim bilir - sıfır çubuğunun sağında yer alacak olan göstergedeki çubukların nasıl görüntüleneceği ve bunların kaç tanesi maksimumdur? (yapılacak fiyat tahmini)

 
dimnik :

HistoryDealSelect hızı çok mu etkiliyor? Frenleri nasıl ortadan kaldırabilirsiniz?

Geliştiriciler, geçmiş önbelleğe alma yoluyla Tarih işlevlerinin (pahalı) çağrısını en aza indirmeyi önerir.

Kod tabanında (MT4Orders) böyle bir çalışma çözümü yayınladım, ancak muhtemelen sizin için çalışmayacaktır.

Önbelleğe almayı kullandıktan sonra herhangi bir fren gözlemlemedim.

Tehdit Her ne kadar OnTradeTransaction'ınızda optimal olarak yazılmamış olsa da yavaşlamamalıdır.

 
Renat Akhtyamov :

Hey!

Kim bilir - sıfır çubuğunun sağında yer alacak olan göstergedeki çubukların nasıl görüntüleneceği ve bunların kaç tanesi maksimumdur? (yapılacak fiyat tahmini)

Son çubuğun açılış saatine PeriodSeconds() ekleyin ve orada grafik nesnelerle bir mum çizin. Sağda gördüğünüz kadar. Ancak çıktı düşerse nasıl görüntüleneceğini kontrol etmedim. Muhtemelen dikkate alınmalıdır.
 
Alexey Viktorov :
Son çubuğun açılış saatine PeriodSeconds() ekleyin ve orada grafik nesnelerle bir mum çizin. Sağda gördüğünüz kadar. Ama çıktı düşerse nasıl görüneceğini kontrol etmedim. Muhtemelen dikkate alınmalıdır.
Senks yaptı!
 
Alexey Viktorov :
Son çubuğun açılış saatine PeriodSeconds() ekleyin ve orada grafik nesnelerle bir mum çizin. Sağda gördüğünüz kadar. Ancak çıktı düşerse nasıl görüntüleneceğini kontrol etmedim. Muhtemelen dikkate alınmalıdır.

Grafikte devamını çiziyor ama maalesef indikatör penceresinde değil.

Belki yanılıyorum tabii...

Ne düşünüyorsunuz - sağdaki sıfır çubuğunun ötesinde gösterge çizgisine devam etmek mümkün mü?

 
Kim bilir - sağdaki sıfır çubuğunun ötesinde gösterge çizgisine devam etmek mümkün mü?
 
Renat Akhtyamov :
Kim bilir - sağdaki sıfır çubuğunun ötesinde gösterge çizgisine devam etmek mümkün mü?
Yapabilir. Bir vardiya ayarlayabilirsiniz, ancak mevcut olmayan değerleri kullanarak bir hesaplama yapmak muhtemelen işe yaramaz ve göstergenin ekranında saat kullanılmaz. Bu yüzden çubukları grafik öğelerle göstermekten bahsettim. ObjectCreate() hem pencere (alt pencere) numarasını hem de saati içerir. Bu nedenle, grafik öğelerin oluşturulmasında herhangi bir sorun olmamalıdır.
 
Alexey Viktorov :
Yapabilir. Bir vardiya ayarlayabilirsiniz, ancak mevcut olmayan değerleri kullanarak bir hesaplama yapmak muhtemelen işe yaramaz ve göstergenin ekranında saat kullanılmaz. Bu yüzden çubukları grafik öğelerle göstermekten bahsettim. ObjectCreate() hem pencere (alt pencere) numarasını hem de saati içerir. Bu nedenle, grafik öğelerin oluşturulmasında herhangi bir sorun olmamalıdır.

Grafik penceresinde, zaman damgalarını kullanarak gelecekteki ima edilen çubuklara başvurabilirsiniz. Olmuş.

Ancak aynı işlemi gösterge penceresinde yapmak mümkün değildir. Yani, gösterge arabelleğine -1, -2 vb.

Soru şu.

Temelde anlaşılabilir. Çıkış yolu, grafik nesneleri kullanarak bir gösterge oluşturmaktır.

 
Renat Akhtyamov :

Grafik penceresinde, zaman damgalarını kullanarak gelecekteki ima edilen çubuklara başvurabilirsiniz. Olmuş.

Ancak aynı işlemi gösterge penceresinde yapmak mümkün değildir. Yani, gösterge arabelleğine -1, -2 vb.

Soru şu.

Temelde anlaşılabilir. Çıkış yolu, grafik nesneleri kullanarak bir gösterge oluşturmaktır.

İkinci tamponu normal değerleri üzerinde hesaplayın, örneğin ("geleceği" görüntülemek için 10 bar hesaplamanız gerekiyorsa), ardından bu tamponu Buff[9] -- Buff[8] -- Buff[ değerleri üzerinde hesaplayın. n] -- Buff[0] , ve ardından bu tamponu sıfır olmayan bir ofset ile çıktılayın. Tampon ofsetini gerekli sayıda çubukla geleceğe ayarlayın - bu durumda 10 ile