MT5 ve iş başında hız - sayfa 23

 
Renat Fatkhullin :

Biri anlamıyorsa bu fxsaber kitaplığıdır, başkasının kodunda kullanıldığında fren yapar.

Açıkça belirtmek yerine, platform frenleri ve kayma intihar örnekleri oyunu oynamaya başladı. Ve asıl nedene ulaşmak ve meseleyi yumuşatmak için bir fırsat varken, bundan faydalanmadı.

Yerel optimizasyon uğruna, ana uygulamanın geçmiş önbelleğini zehirledi.

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

MT5 ve iş başında hız

fxsaber , 2020.09.02 00:02

Birçokları için yeniden üretilebilir saf bir MQL5 kodu vardı. Önce şubenin kronolojisini inceleyin ve birisinin size çamur dökmek için size zaman ayırmaya hazır olacak kadar size ihtiyacı olduğu gibi komplo teorileri oynamayın.

Hindi rolüyle harika bir iş çıkarıyorsun. Burada, özellikle şubede, herhangi bir kütüphaneden bahsedilmiyordu, tk. yapıcı değil.

Mesele şu ki, birisi from-input parametresinin eşleşmediği kitaplıkları paylaşmaya karar verirse, o zaman fren yapacaktır. Belgelerin hiçbir yerinde bununla ilgili bir kelime yok. En azından bu konuda sizden kenelerle bir şeyler alındı. Ve çıkardıklarında, hile suçlamaları vardı.


MQL'nin bu özelliği Dokümantasyon ve özellik dizisine yazılmalıdır. Bu daldan saf MQL5 komut dosyalarını, yazıldıkları tarihlere karşılık gelen yapılarda çalıştırın. Görünüşe göre, her ihtimale karşı, pek çok düzeltme körü körüne yapıldı.

 
fxsaber :

Hindi rolüyle harika bir iş çıkarıyorsun. Burada, özellikle şubede, herhangi bir kütüphaneden bahsedilmiyordu, tk. yapıcı değil.

Çünkü kütüphanelerinizin elinizden kayıp gitmesine izin vermemek için her şeyi yaptınız . Bu kütüphanelerle. "Daha hızlıyım"ın sürekli muhalefetiyle. Bu nedenle, tatar yayları kurnazca gizlendi ve "nasıl yavaşladığını görün."


Mesele şu ki, birisi from-input parametresinin eşleşmediği kitaplıkları paylaşmaya karar verirse, o zaman fren yapacaktır. Belgelerin hiçbir yerinde bununla ilgili bir kelime yok. En azından bu konuda sizden kenelerle bir şeyler alındı. Ve çıkardıklarında, hile suçlamaları vardı.


MQL'nin bu özelliği Dokümantasyon ve özellik dizisine yazılmalıdır. Bu daldan saf MQL5 komut dosyalarını, yazıldıkları tarihlere karşılık gelen yapılarda çalıştırın. Görünüşe göre, her ihtimale karşı, pek çok düzeltme körü körüne yapıldı.

HistorySelect belgeleri açıkça şunları belirtir:

HistorySelect() işlevi, ilgili işlevleri kullanarak liste öğelerine daha fazla erişim için mql5 programında bir sipariş listesi ve bir anlaşma listesi oluşturur. Anlaşma listesinin boyutu, HistoryDealsTotal() işlevi kullanılarak bulunabilir, geçmişteki sipariş listesinin boyutu, HistoryOrdersTotal() kullanılarak elde edilebilir. HistoryOrderGetTicket() işlevini kullanarak sipariş listesinin öğelerini sıralamak en iyisidir; fırsatlar listesinin öğeleri için buna göre HistoryDealGetTicket() işlevi uygundur.

HistoryOrderSelect() işlevini uyguladıktan sonra, mql5 programı için mevcut olan geçmişteki siparişlerin listesi sıfırlanır ve biletle sipariş araması başarılı olursa, bulunan siparişle yeniden doldurulur. Aynısı mql5 programında mevcut olan anlaşmalar listesi için de geçerlidir - bu, HistoryDealSelect () işlevi tarafından sıfırlanır ve bilet numarasına göre bir anlaşmanın başarılı bir şekilde alınması durumunda yeniden doldurulur.


Atomik/anlık görüntü erişimi gerektiren büyük hacimlerle çalıştığınızda (ve bir nedenle tarihte binlerce ve on binlerce anlaşma gösterdiniz) bunların maliyetini anlamanız gerekir.

Ayrıca bu önbelleklerin çalışmasının teknik detaylarını bu başlıkta detaylı olarak anlattım.


Her bir örneği rastgele seçmeyi ve mümkün olduğunca önbelleği zehirlemeyi boşuna denediniz mi? Konumunuzun hatırına, konuyla ilgili herhangi bir tatar yayı var mı?

 
Renat Fatkhullin :

Çünkü kütüphanelerinizin elinizden kayıp gitmesine izin vermemek için her şeyi yaptınız . Bu nedenle, tatar yayları kurnazca gizlendi ve "nasıl yavaşladığını görün."

Hataların %99'u bu şekilde bulunur. İlk olarak, büyük kodda garip davranışlar vardır. Daha sonra neden lokalizasyon ile bulunur. Bu frenler için daha çok endişelendim.

ticaret özelliği olmadan. Sorunlar neredeyse her yerde.

KD       0        16 : 00 : 33.382     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 34 : HistoryOrderSelect ( 0 )] = 25 ms.
PE       0        16 : 00 : 44.913     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 17 : CopyTicks (Symb,Ticks, COPY_TICKS_ALL , 0 , 1 )] = 24 ms.
DP       0        16 : 00 : 44.888     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 46 ms.
FI       0        16 : 00 : 49.579     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 28 : HistoryDealSelect ( 0 )] = 22 ms.
EE       0        16 : 01 : 03.287     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 33 : HistoryOrderGetDouble ( 0 , ORDER_PRICE_CURRENT )] = 1 ms.
KE       0        16 : 01 : 07.013     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 50 : OrderGetDouble ( ORDER_PRICE_CURRENT )] = 1 ms.
JM       0        16 : 01 : 12.189     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 44 : TimeCurrent ()] = 39 ms.
MD       0        16 : 01 : 13.067     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 81 : ResourceFree ( NULL )] = 1 ms.
RS       0        16 : 01 : 13.572     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 41 : SymbolInfoDouble (Symb, SYMBOL_POINT )] = 7 ms.
GL       0        16 : 01 : 27.816     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 79 : GlobalVariableGet ( NULL )] = 22 ms.
PD       0        16 : 01 : 33.892     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 58 : PositionGetInteger ( POSITION_MAGIC )] = 1 ms.
KP       0        16 : 01 : 39.864     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 67 : OrderCheck (Request,CheckResult)] = 3 ms.
ML       0        16 : 01 : 39.970     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 62 : AccountInfoInteger ( ACCOUNT_MARGIN_MODE )] = 1 ms.
KM       0        16 : 01 : 41.045     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 55 : PositionSelect (Symb)] = 2 ms.
NS       0        16 : 01 : 46.832     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 78 : GlobalVariableCheck ( NULL )] = 1 ms.
JP       0        16 : 01 : 49.211     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 75 : SymbolName ( 0 , true )] = 1 ms.
EL       0        16 : 01 : 59.101     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 19 : CopyTicksRange (Symb,Ticks, COPY_TICKS_ALL ,Tick.time_msc)] = 32 ms.
IM       0        16 : 02 : 07.462     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 70 : AccountInfoInteger ( ACCOUNT_TRADE_EXPERT )] = 7 ms.
PJ       0        16 : 02 : 11.735     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 37 : IsStopped ()] = 4 ms.
OG       0        16 : 03 : 08.178     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 32 : HistoryOrderGetInteger ( 0 , ORDER_MAGIC )] = 14 ms.
JH       0        16 : 03 : 16.385     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 40 : SymbolInfoDouble (Symb, SYMBOL_TRADE_TICK_VALUE )] = 5 ms.
FM       0        16 : 03 : 16.601     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 59 : PositionGetString ( POSITION_SYMBOL )] = 1 ms.
GH       0        16 : 03 : 21.841     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 72 : TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED )] = 1 ms.
FJ       0        16 : 03 : 25.782     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 46 : TimeTradeServer ()] = 1 ms.
EO       0        16 : 03 : 26.772     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 45 : TimeLocal ()] = 10 ms.
HD       0        16 : 03 : 36.595     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 13 : SymbolInfoTick (Symb,Tick)] = 13 ms.
...
Kişi yardım etmeye karar verdi ve makinesinde saf MQL5 kodu çalıştırdı. Yukarıdaki küçük örnek. Yukarıdaki fonksiyon adlarını okuyun.


HistorySelect belgeleri açıkça şunları belirtir:

HistorySelect() işlevi, ilgili işlevleri kullanarak liste öğelerine daha fazla erişim için mql5 programında bir sipariş listesi ve bir anlaşma listesi oluşturur. Anlaşma listesinin boyutu, HistoryDealsTotal() işlevi kullanılarak bulunabilir, geçmişteki sipariş listesinin boyutu, HistoryOrdersTotal() kullanılarak elde edilebilir. HistoryOrderGetTicket() işlevini kullanarak sipariş listesinin öğelerini sıralamak en iyisidir; fırsatlar listesinin öğeleri için buna göre HistoryDealGetTicket() işlevi uygundur.

HistoryOrderSelect() işlevini uyguladıktan sonra, mql5 programı için mevcut olan geçmişteki siparişlerin listesi sıfırlanır ve biletle sipariş araması başarılı olursa, bulunan siparişle yeniden doldurulur. Aynısı mql5 programında mevcut olan anlaşmalar listesi için de geçerlidir - bu, HistoryDealSelect () işlevi tarafından sıfırlanır ve bilet numarasına göre bir anlaşmanın başarılı bir şekilde alınması durumunda yeniden doldurulur.

Acaba bu metinde satırlar arasında kim bir şey gördü? Şahsen, (bu başlıktan önce) HistoryDealSelect ve HistoryOrderSelect'in böyle yazılması gerektiğini anladım.

   static bool HistorySelectOrder( const ulong Ticket )
  {
     return ( (:: HistoryOrderGetInteger (Ticket, ORDER_TICKET ) == Ticket) || :: HistoryOrderSelect (Ticket));
  }

   static bool HistorySelectDeal( const ulong &Ticket )
  {
     return ( (:: HistoryDealGetInteger (Ticket, DEAL_TICKET ) == Ticket) || :: HistoryDealSelect (Ticket));
  }

Aksi takdirde frene basmanız garantidir.

Atomik/anlık görüntü erişimi gerektiren büyük hacimlerle çalışırken, bunların maliyetlerini anlamanız gerekir.

Ayrıca bu önbelleklerin çalışmasının teknik detaylarını bu başlıkta detaylı olarak anlattım.

Bu konudaki gerekli bilgileri kene ile çıkardım.

 
Renat Fatkhullin :

Her bir örneği rastgele seçmeyi ve mümkün olduğunca önbelleği zehirlemeyi boşuna denediniz mi? Konumunuzun hatırına, konuyla ilgili herhangi bir tatar yayı var mı?

Bu konudaki her şeyi kronolojik olarak görebilirsiniz. Başlangıçta , sorun herhangi bir rastgelelik olmadan gösterildi .

Bu konu, rakibinizin sözlerini nasıl çarpıtabileceğinizin harika bir kanıtı. Tüm kaynaklar ve bunların yürütülmesinin sonuçları buraya kaydedilir.

 

Terminal neden tam geçmiş tekrar istendiğinde önbelleği artıramıyor, eksik aralığı alıp önbelleğe almıyor? Bu sorunu çözecek gibi görünüyor. Sonuçta, çubuklar/tikler istenirken, veri içeren cevapsız paketler döndürülür, dolayısıyla böyle bir mekanizma vardır.

 
Aleksey Vyazmikin :

Terminal neden tam geçmiş tekrar istendiğinde önbelleği artıramıyor, eksik aralığı alıp önbelleğe almıyor?

Zaten yapıldı.

Ancak HistorySelect( 0, INT_MAX ) çağrıları arasında HistorySelect ( other_time, ... ) çağrılırsa, önbellek other_time'dan başlayarak yeniden oluşturulur ve sonraki HistorySelect( 0, ... ) isteği önbelleğin yeniden oluşturulmasına neden olur ( Yavaş).

 
Andrey Khatimlianskii :

Zaten yapıldı.

Ancak HistorySelect( 0, INT_MAX ) çağrıları arasında HistorySelect ( other_time, ... ) çağrılırsa, önbellek other_time'dan başlayarak yeniden oluşturulur ve sonraki HistorySelect( 0, ... ) çağrısı önbelleğin yeniden oluşturulmasına neden olur ( Yavaş).

Yaptıysanız, o zaman iyidir, tek soru, önbelleğin büyümesine bağlı olarak alınan verilerle çalışmanın rahatlığıdır.

Alım satım işlemlerini bu kadar derinden anlamadım, ancak sorgu aralığı değişirse, tam bir numaralandırma olmadan geçmiş içinde hızlı veri arama imkanı olmadığı anlamına mı gelir?

 
Aleksey Vyazmikin :

Alım satım işlemlerini bu kadar derinden anlamadım, ancak istek aralığı değişirse, tam bir numaralandırma olmadan geçmiş içinde hızlı veri arama imkanı olmadığı anlamına mı gelir?

Bu bilgiyi kullanmıyorsanız neden kullanıyorsunuz?

Pratik görev yok = soru yok.

 
Renat Fatkhullin :

OrderExist ve PositionExist, sembol, işlem türü ve büyüye göre kayıt aramada tüm emirlerin veya pozisyonların döngüsünde aptalca yinelemelerden kaçınmanıza izin veren özel optimize edilmiş işlevlerdir.

Sonuç olarak, biletleri olan bir dizi elde edersiniz.


Programlar bu özellikleri kullanarak çok para kazandırabilir. Özellikle, numaralandırma döngülerinde açık pozisyonlara ve emirlere toplu, sürekli ve tekrar tekrar eriştiklerinde.

Gelecekte, devasa ticaret verilerine erişmek için daha verimli işlevler uygulayacağız.

Dil ayrıca daha güçlü işlevsellik ile önemli ölçüde artacak ve basitleşecektir.

" OrderExist ve PositionExist" - Belgelerde bulamadım, bunlar hakkında nereden okuyabilirim?
 
HimOrik :
" OrderExist ve PositionExist" - Belgelerde bulamadım, bunlar hakkında nereden okuyabilirim?

Büyük olasılıkla - bir sonraki sürüm sürümünün yayınlanmasından sonra (şimdi beta)