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

 
lütfen bana bu sitedeki en iyi sinyal göstergesini söyleyin... tabii ki hala ücretsiz!
 
barabashkakvn :
Ve "tarihe dayalı oldukça fazla hesaplama" dinamik bir diziye mi sahip oluyor?

Öyle bir şey var evet :) Daha doğrusu birkaç dinamik dizi kullanılıyor ama teoride çok büyük boyutlara çıkmamaları gerekiyor.

Ve onu ikiye bölmekle ilgili olarak - hangi segmentin alınacağı ve kaç girdi içerdiği önemli bir fark yaratmıyor gibi görünüyor. Ortalama olarak, bir gün 2500-3500 ms'de işlenir, ancak bir haftanın birkaç dakika beklemesi gerekir. Şimdi elimde uygun bir kütük yok, tam olarak ne kadar bilmiyorum. Ancak günde 5 kattan fazla bir büyüklük sırası ve çoğu zaman son bir veya iki günde harcanacaktır. Ay bir gecede bırakılabilir ve sabaha büyük olasılıkla hala askıda kalacaktır>.>

 
Lone_Irbis :


Ve onu ikiye bölmekle ilgili olarak - hangi segmentin alınacağı ve kaç girdi içerdiği önemli bir fark yaratmıyor gibi görünüyor.

1 / 2 oranında ileri testi açın. Geçmişi otomatik olarak periyotlara böler. Ayrıca, oyunun muma değip değmediğini de öğreneceksiniz.
 
Lone_Irbis :
Merak ediyorum, "yavaş uzmanların en yaygın nedenleri" gibi bir makale var mı? Ara sıra, test cihazındaki EA'nın neden sadece başlangıçta uçtuğunu anlamaya çalışıyorum, ancak ne kadar ileri giderse o kadar yavaşlıyor. Bu kadar kritik olması için henüz geliştirmenin o aşamasında değil (ana mekanizmaları ve araçları geliştirmek için yeterli hız var). Ancak segmentleri bir haftadan daha uzun süre almanın bir anlamı olmaması yine de elverişsiz çünkü. bundan sonra hız sıfır olma eğilimindedir.

Tekerleklere bir varil boya koymaya çalışın ve gerektiği gibi hareket ettirin.

https://www.mql5.com/ru/forum/14041/page3#comment_605412

Линейное торможение - ошибка программиста или особенность работы MT4?
Линейное торможение - ошибка программиста или особенность работы MT4?
  • www.mql5.com
Такая работа просто убивает возможность оперативной настройки советника.
 
MetaDriver :

Tekerleklere bir varil boya koymaya çalışın ve gerektiği gibi hareket ettirin.

https://www.mql5.com/ru/forum/14041/page3#comment_605412

Mesel eğlenceli :) Tavsiye için teşekkürler. Sadece o namluyu bulmak için kalır ... ya da daha doğrusu fıçıları. Ancak haber yapanlar ve direnç seviyeleri hakkında şimdiden belirsiz şüpheler var...
 
Lone_Irbis :
Mesel eğlenceli :) Tavsiye için teşekkürler. Sadece o namluyu bulmak için kalır ... ya da daha doğrusu fıçıları. Ancak, haber yapanlar ve direnç seviyeleri hakkında zaten belirsiz şüpheler var...
Çoğu zaman, böyle bir varil "zamanın başlangıcıdır" - EA, her çubukta (kene) kendi ticaret geçmişini (veya diğer bazı birikmiş bilgileri) tam olarak analiz etmeye çalışır.
 
Son zamanlarda paneller oluşturmaya yeniden odaklanıldı, bu nedenle soru. OBJ_RECTANGLE_LABEL ve OBJ_LABEL olarak iki etiket oluşturuyorum ve bunu nasıl yapacağımı bilmiyorum ki OBJ_RECTANGLE_LABEL'i grafik üzerinde sürükleyerek OBJ_LABEL aynı şekilde tek bir bütün olarak sürüklensin. Belki onları birbirine bağlayan bir mekanizma vardır ve eylem birer birer (diğerleri) için aynısına neden olur?
 
MetaDriver :
Çoğu zaman, böyle bir varil "zamanın başlangıcıdır" - EA, her çubukta (kene) kendi ticaret geçmişini (veya diğer bazı birikmiş bilgileri) tam olarak analiz etmeye çalışır.

Ö! Şaşırtıcı bir şekilde, sorun bulundu ve kelimenin tam anlamıyla birkaç dakika içinde ortadan kaldırıldı. Gerçekten de, ticaret tarihinde her tık üzerinde hareket ediyordu. En başta temel alınan "mql5 için en basit Expert Advisor" kodundan "miras alınan" bir fonksiyonda. O zamandan beri bir şekilde tamamen kafamdan düştü. Eh, işe yarıyor gibi görünüyor, tamam, sanırım - neden dokunalım ... Görünüşe göre, hala bu kodun parçalarını ayırmaya değer :) Her ihtimale karşı, birileri aniden burada benzer frenlerle googles, sorunlu olanı göndereceğim parça ve bu sorunu çözmek için konuyla ilgili yaratıcılığım. Versiyonumun kaynağa göre ne kadar “daha doğru” olduğunu bilmiyorum. Büyük olasılıkla, bu yazdığım her şeyle tamamen aynı bok kodudur. [Benim için elbette önemli değil. Demek istediğim, aniden birisi alt parçayı kullanmayı düşünürse: yazarın kendi kendini yetiştirmiş bir pislik çözücü olduğunu unutmayın. ^^] Ama en azından benim için hiçbir şey bozulmamış gibi görünüyor ve robot şimdi bir jet gibi uçuyor :) En azından eskisiyle karşılaştırıldığında. İki aylık deneme süresi yaklaşık bir dakika sürdü; bu, orijinal %6+ saat ile hala iyi bir tezat oluşturuyor)

Öyleydi:

 // Эта функция вызывалась дважды за каждый тик. С ее помощью записывались две глобальные переменные: 
// с ценой последнего ордера и числом открытых ордеров (да, взятый за исходник код был примером самого простейшего мартина). 
double History( bool LastPrice = false ){
   long Ticket, OldTicket = 0 , PosID, Magic, Dir;
   double PriceOpen = 0 , Count = 0 ;
   ENUM_DEAL_TYPE CheckDir;
   if (Sell) CheckDir = DEAL_TYPE_SELL ; 
   else if (Buy) CheckDir = DEAL_TYPE_BUY ;
   
   HistorySelect ( 0 , Now);
   int HistoryTotal = HistoryDealsTotal ();
   // Проблемное место было тут: в цикле перебиралась вся история торговли, что в начале немного. 
   // Но даже за сутки счетчик доходил до сотни (не рискну предположить, сколько там набиралось за месяц). 
   // И этот бессмысленный и беспощадный процесс повторялся на каждом тике вообще без всякой на то причины.
   for ( int i= 0 ; i < HistoryTotal; i++){ 
      Ticket = ( int ) HistoryDealGetTicket (i);
      PosID  = HistoryDealGetInteger (Ticket, DEAL_POSITION_ID );
      Magic  = HistoryDealGetInteger (Ticket, DEAL_MAGIC );
      Dir    = HistoryDealGetInteger (Ticket, DEAL_TYPE );
      
       if (LastPrice) { // Этой частью добывалась цена
         if (PosID == PositionID && Magic == MagicNumber && Dir == CheckDir) {
             if (Ticket > OldTicket) {
               PriceOpen = HistoryDealGetDouble (Ticket, DEAL_PRICE );
               OldTicket = Ticket;
            }
         }
      }
      
       else { // А тут оно считало ордера
         if (PosID == PositionID && Magic == MagicNumber) Count++;
      }                              
   }
   
   if (LastPrice) return (PriceOpen);
   else return (Count);
}

Dönüştü:

 // Вызывается она теперь только в конце функций создания/изменения/закрытия позиций. Если открытых нет - глобальные переменные просто обнуляются.
// Хотя в принципе, если вызывать ее не каждый тик, а только на изменениях, вероятно и старая версия не тормозила бы так уж сильно
void History(){
   long Ticket, PosID, Magic, Dir;
   bool GotPrice = false ;
   Total = 0 ;
   HistorySelect ( 0 , Now);
   int HistoryTotal = HistoryDealsTotal ();
   
   // Похоже, что быстрее будет считать с обратного конца
   for ( int i=HistoryTotal;i>= 0 ;i--){
      Ticket = ( int ) HistoryDealGetTicket (i);
      PosID  = HistoryDealGetInteger (Ticket, DEAL_POSITION_ID );
      Magic  = HistoryDealGetInteger (Ticket, DEAL_MAGIC );
      Dir    = HistoryDealGetInteger (Ticket, DEAL_TYPE );
      
       if (PosID == PositionID && Magic == MagicNumber) {
         // Корявую конструкцию заменяем на... другую корявую конструкцию... но она хотя бы компактнее :)
         Total++; 
         if (!GotPrice){
            LastOrderPrice = HistoryDealGetDouble (Ticket, DEAL_PRICE );
            GotPrice = true ; // Раз уж нужная цена всегда в начале списка, на ней и остановимся
         }
      }
       // Чтобы не перепахивать всю торговую историю, если номер позиции уже меньше нашего (но больше ноля) - прерываем цикл
       else if (PosID > 0 && PosID < PositionID) break ; 
   }
}

Genel olarak, yardımın için teşekkürler :) Bahşiş olmasaydı, kodun bu uzak tozlu köşelerine uzun süre bakmak muhtemelen aklıma gelmezdi ...

 
Lone_Irbis :

Ö! Şaşırtıcı bir şekilde, sorun bulundu ve kelimenin tam anlamıyla birkaç dakika içinde ortadan kaldırıldı. Gerçekten de, ticaret tarihinde her tik üzerinde hareket ediyordu. En başta temel alınan "mql5 için en basit Expert Advisor" kodundan "miras alınan" bir fonksiyonda. O zamandan beri bir şekilde tamamen kafamdan düştü. Eh, işe yarıyor gibi görünüyor, tamam, sanırım - neden dokunalım ... Görünüşe göre, hala bu kodun parçalarını ayırmaya değer :) Her ihtimale karşı, birileri aniden burada benzer frenlerle googles, sorunlu olanı göndereceğim parça ve bu sorunu çözmek için konuyla ilgili yaratıcılığım. Versiyonumun kaynağa göre ne kadar “daha doğru” olduğunu bilmiyorum. Büyük olasılıkla, bu yazdığım her şeyle tamamen aynı bok kodudur. [Benim için elbette önemli değil. Demek istediğim, aniden birisi alt parçayı kullanmayı düşünürse: yazarın kendi kendini yetiştirmiş bir pislik çözücü olduğunu unutmayın. ^^] Ama en azından benim için hiçbir şey bozulmamış gibi görünüyor ve robot şimdi bir jet gibi uçuyor :) En azından eskisiyle karşılaştırıldığında. İki aylık deneme süresi yaklaşık bir dakika sürdü; bu, orijinal %6+ saat ile hala iyi bir tezat oluşturuyor)

Öyleydi:

Dönüştü:

Genel olarak, yardımın için teşekkürler :) Bahşiş olmasaydı, kodun bu uzak tozlu köşelerine uzun süre bakmak muhtemelen aklıma gelmezdi ...

TAMAM.
 
paladin800 :
Son zamanlarda paneller oluşturmaya yeniden odaklanıldı, bu nedenle soru. OBJ_RECTANGLE_LABEL ve OBJ_LABEL olarak iki etiket oluşturuyorum ve bunu nasıl yapacağımı bilmiyorum ki OBJ_RECTANGLE_LABEL'i grafik üzerinde sürükleyerek OBJ_LABEL aynı şekilde tek bir bütün olarak sürüklensin. Belki onları birbirine bağlayan bir mekanizma vardır ve eylem birer birer (diğerleri) için aynısına neden olur?

Hazır bir mekanizma yok. Kendin yazmak zorunda kalacaksın. Neyse ki, bu çok zor değil. Ama biraz çalışması gerekecek.

İyi şanlar.