Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 16

 
fxsaber :

İlginç. Ve böyle bir soru. Mevcut uygulamayı beğenmedim ve ince ayar yaptım. Tabii ki eğri. Orijinal İncil nasıl elde edilir?

İşte 1702'den

Dosyalar:
Generic.zip  44 kb
 
Artyom Trishkin :

İşte 1702'den

Teşekkür ederim! Soruyu geliştiricilere götüreceğim. Çünkü Ben hala o düzleştiriciyim...

 

Örnek 2: Bir net hesapta birden fazla Uzman Danışmanla işlem yapma

Net gönderim, aynı sembol üzerinde aynı anda birden fazla Uzman Danışman ticareti yapanlar için bir baş ağrısıdır. Her iki Uzman Danışmanın da bir riskten korunma durumunda olduğu, ancak net bir pozisyonun olmamasının gerçekten piyasada olmadıkları anlamına gelmediğini anlamaları gereken durumları çözmek için karmaşık bir kod oluşturur. Çözümlerden biri, her uzmanın toplam pozisyona katkısını hesaplamaktır. Bunu yapmak için, tüm geçmişi analiz etmeniz ve her benzersiz sihirbazın kaç sözleşmeye ait olduğunu hesaplamanız gerekir. Sayı 0.0'a eşitse - Expert Advisor piyasada değil, negatifse - Expert Advisor kısa pozisyonda, pozitif ise - uzun. Aslında, CHashMap kullanıyorsanız bunu yapmak çok kolaydır, bunun için tüm anlaşmaları hacimlerini toplayarak sihirli siparişlere ayırmanız yeterlidir. Aşağıda çok basitleştirilmiş bir kod (prototip) yayınladım:

 //+------------------------------------------------------------------+
//|                                                 NettoByMagic.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#include <Generic\HashMapGen.mqh>

CHashMap< ulong , double > PositionsByMagic;
int prev_deals = 0 ;
//+------------------------------------------------------------------+
//| Добавляет новый объем и его меджик                               |
//+------------------------------------------------------------------+
void AddVolume( ulong magic, double volume)
{
   double cur_volume = 0.0 ;
   if (PositionsByMagic.TryGetValue(magic, cur_volume))
      PositionsByMagic.TrySetValue(magic, cur_volume+volume);
   else
      PositionsByMagic.Add(magic, volume);
}
//+------------------------------------------------------------------+
//| Добавляет новые сделки в словарь                                 |
//+------------------------------------------------------------------+
void ParseDeals()
{
   HistorySelect ( 0 , TimeCurrent ());
   for ( int i = prev_deals; i < HistoryDealsTotal (); i++)
   {
       ulong ticket = HistoryDealGetTicket (i);
       if ( HistoryDealGetString (ticket, DEAL_SYMBOL )!= Symbol ())
         continue ;
       ENUM_DEAL_TYPE deal_type = ( ENUM_DEAL_TYPE ) HistoryDealGetInteger (ticket, DEAL_TYPE );
       double volume = 0.0 ;
       if (deal_type == DEAL_TYPE_BUY )
         volume = HistoryDealGetDouble (ticket, DEAL_VOLUME );
       else if (deal_type == DEAL_TYPE_SELL )
         volume = HistoryDealGetDouble (ticket, DEAL_VOLUME )*(- 1 );
       else
         continue ;
       ulong magic = HistoryDealGetInteger (ticket, DEAL_MAGIC );
      AddVolume(magic, volume);
   }
   prev_deals = HistoryDealsTotal();
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnTick ()
{
   ParseDeals();
   for ( int i = 0 , k = 0 ; i < PositionsByMagic.Count(); i++)
   {
       ulong magic = PositionsByMagic.GetKeyAt(i);
       double valume = PositionsByMagic.GetValueAt(i);
       if (k == 10 )
         break ;
   }
}
//+------------------------------------------------------------------+

Dikkat! Basit olması için, kod yalnızca mevcut sembolün net hacmini hesaplar. Ayrıca, mevcut uygulamada CHashMap yineleyici içermiyor, bu yüzden aceleyle böyle yineleyiciler yaptım. Değiştirilen CHashMap ekte sunulmaktadır.

Dosyalar:
HashMapGen.mqh  25 kb
 
fxsaber :

Test cihazı hızı ticaret için önemli mi? Evetse, HashMap ticareti de etkiler çünkü. TS'nin geliştirme ve uygulama hızını artırır.

Test cihazı, optimizasyon ve ticaret farklı şeylerdir.

Aynı fikir takas ediliyor ve optimize ediliyor, ancak uygulama kökten farklı olabilir, bu da inkar edilemez.

 
Alexey Oreshkin :

Yalnızca optimizer için bile olsa , verileri depolamak ve almak için bu verimli algoritmaları kullanmanın gerekli olduğu belirli bir görev örneği, ticaret olmadığı için biri getirebilir mi?

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

Genel sınıf kitaplığı - hatalar, açıklama, sorular, kullanım ve öneriler

fxsaber , 2017.12.08 22:46

Daha gerçekçi bir test durumu için (2000 işlem ve 1.000.000 tek geçmiş erişimi), sonuç şöyle görünür

 2017.12 . 05 00 : 00 : 00    Time [ Print (SumProfit(Deals,GetDealProfitFull))] = 122969
2017.12 . 05 00 : 00 : 00    Time [SetHashMap()] = 816
2017.12 . 05 00 : 00 : 00    4829800340.792288
2017.12 . 05 00 : 00 : 00    Time [ Print (SumProfit(Deals,GetDealProfitHashClear))] = 23852
2017.12 . 05 00 : 00 : 00    Time [ HistorySelect ( 0 , INT_MAX )] = 1
2017.12 . 05 00 : 00 : 00    4829800340.792288
2017.12 . 05 00 : 00 : 00    Time [ Print (SumProfit(Deals,GetDealProfitClear))] = 114427

Geçiş başına yaklaşık 100 ms tasarruf! Örneğin, 10.000 tam geçiş için Optimizasyon yaparsak, Hash sürümü 15 dakika daha hızlı biter .

 
Vasili Sokolov :

Örnek 2: Bir net hesapta birden fazla Uzman Danışmanla işlem yapma

Unutmuş olmak
prev_deals = HistoryDealsTotal ();


İyi örnek! Gerçekten, uygun.

 
fxsaber :
Unutmuş olmak

İyi örnek! Gerçekten, uygun.

Düzeltildi.

 

Başkasınınkini kullanmanın nüanslarını anlamaktan ve onlara bağımlı olmaktan daha kolay olan kendi başınıza monte edilmesi kolay bisikletler vardır.

Jenerik o tür bir bisiklet değil. Hızlı ve doğru yazamıyorsunuz. Sadece eklerlerdi.

 
fxsaber :

Harika bir teorik örnek! Uygulamada, kim-ne zaman-iş parçacığı binlerce işlemle çalıştı?

ps Bunun saçmalık olduğunu ve kimsenin bir şeye ihtiyacı olmadığını kanıtlamaya çalışmıyorum. Gerçek ticaretin değerini anlamaya çalışıyorum. Ben kesinlikle bir teorisyen değilim, saf bir uygulayıcıyım.

 
Alexey Oreshkin :

Uygulamada, kim-ne zaman-iş parçacığı binlerce işlemle çalıştı?

Kalelerde, her ilk.

Neden: