Hatalar, hatalar, sorular - sayfa 214

 
Ashes :

Sonucun, pratik olarak herhangi bir analiz için zaman harcamayan ve göstergeleri kullanmayan en basit Expert Advisor'da, yani çalışan bir Expert Advisor'da elde edildiğini hatırlatmama izin verin, sonuçlar daha da üzücü olurdu.

Lütfen danışman kodunu yayınlayın.
 
Ashes :

Sonucun, pratik olarak herhangi bir analiz için zaman harcamayan ve göstergeleri kullanmayan en basit Expert Advisor'da, yani çalışan bir Expert Advisor'da elde edildiğini hatırlatmama izin verin, sonuçlar daha da üzücü olurdu.

Karşılaştırma için:

Bu testi bir Windows 7 makinesinde 10.000 işlemle çalıştıran Intel Pentium Çift Çekirdekli E5400 @ 2.70 GHz, 2038 MB (PR111) 472866 ms sürdü.

Yukarıdakilerin ışığında , 2010 şampiyonası adaylarından bazılarının, 15 dakikalık engel ve testçinin özellikleri (yeterli anlaşma olsaydı) nedeniyle haksız yere elenmiş olma olasılığı vardır.

** - test tamamlandıktan sonra birkaç kez testler yapılırken, işlemlerin görüntülendiği sembolün grafiği görüntülenmedi.

Bu tür sonuçları gösterecek bir "basit Uzman Danışman" yazamadım. İşte kodum:

 //+------------------------------------------------------------------+
//|                                                  TimeOnDeals.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input int       deals= 1000 ;
input double    lot= 0.01 ;
uint start;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   start= GetTickCount ();
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   PrintFormat ( "deals=%d  time=%d" ,deals,( GetTickCount ()-start));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
   return ( GetTickCount ()-start);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   static int done_deals= 0 ;
//---
   if (done_deals<deals)
     {
       if (Buy(lot)) done_deals++;
       else Print ( "Не удалось выполнить Buy, ошибка " , GetLastError ());
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Buy( double v)
  {
   double price= SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   MqlTradeRequest    m_request;         // request data
   MqlTradeResult     m_result;           // result data   
   m_request.action= TRADE_ACTION_DEAL ;
   m_request.symbol      = _Symbol ;
   m_request.magic       = 555 ;
   m_request.volume      =v;
   m_request.type        = ORDER_TYPE_BUY ;
   m_request.price       =price;
   m_request.sl          = 0 ;
   m_request.tp          = 0 ;
   m_request.deviation   = 10 ;
   return ( OrderSend (m_request,m_result));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
bool Sell( double v)
  {
   double price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
   MqlTradeRequest    m_request;         // request data
   MqlTradeResult     m_result;           // result data   
   m_request.action= TRADE_ACTION_DEAL ;
   m_request.symbol      = _Symbol ;
   m_request.magic       = 555 ;
   m_request.volume      =v;
   m_request.type        = ORDER_TYPE_SELL ;
   m_request.price       =price;
   m_request.sl          = 0 ;
   m_request.tp          = 0 ;
   m_request.deviation   = 10 ;
   return ( OrderSend (m_request,m_result));
  }
//+------------------------------------------------------------------+


İşte optimizasyon sonuçları, Sonuç sütunu çalışma süresini milisaniye cinsinden gösterir.


 
Rosh :

Bu tür sonuçları gösterecek bir "basit Uzman Danışman" yazamadım. İşte kodum:

İşte optimizasyon sonuçları, Sonuç sütunu çalışma süresini milisaniye cinsinden gösterir.

İlginç...

İskender :
Lütfen danışman kodunu yayınlayın.

Uzman Danışman , 2010 Otomatik Ticaret Şampiyonası için Hızlı bir şekilde Uzman Danışman nasıl yazılır makalesindeki şablona dayalıdır.

CExpertAdvisor sınıfı herhangi bir değişiklik yapılmadan kullanılır. Belki de sınıfları kullanmanın bir yan etkisidir? Test sonuçlarına göre belirli bir eşiği geçtikten sonra yavaşlamanın başladığı görülüyor. Belki bu, tükenmesinden sonra bellek / çöp toplamanın yeniden tahsisini etkilemeye başlayan sınırlı boyuttaki işlemler için bir tablodur?

not. EA'nın Alpari-Demo hesabı (sıfır marj) özelliğini kullandığını bir kez daha hatırlatmama izin verin, aksi takdirde işlem sayısı değişebilir.

Dosyalar:
 
Rosh :

Bu tür sonuçları gösterecek bir "basit Uzman Danışman" yazamadım. İşte kodum:

İşte optimizasyon sonuçları, Sonuç sütunu çalışma süresini milisaniye cinsinden gösterir.

XLSX'te de çıktıyla ilgili herhangi bir sorun var mı?

 
Rosh :

Bu tür sonuçları gösterecek bir "basit Uzman Danışman" yazamadım. İşte kodum:

İşte optimizasyon sonuçları, Sonuç sütunu çalışma süresini milisaniye cinsinden gösterir.

Tablo - optimize edicinin sonucu: Oturum kapatılsın mı? Günlüğe kaydetmenin yan etkisi?

 
Ashes :


Uzman Danışman , 2010 Otomatik Ticaret Şampiyonası için Hızlı bir şekilde Uzman Danışman nasıl yazılır makalesindeki şablona dayalıdır.

CExpertAdvisor sınıfı herhangi bir değişiklik yapılmadan kullanılır. Belki de sınıfları kullanmanın bir yan etkisidir? Test sonuçlarına göre belirli bir eşiği geçtikten sonra yavaşlamanın başladığı görülüyor. Belki bu, tükenmesinden sonra bellek / çöp toplamanın yeniden tahsisini etkilemeye başlayan sınırlı boyuttaki işlemler için bir tablodur?

not. EA'nın Alpari-Demo hesabı (sıfır marj) özelliğini kullandığını bir kez daha hatırlatmama izin verin, aksi takdirde işlem sayısı değişebilir.

Bu sınıf GetDealByOrder(ulong order) yöntemini içerir

 ulong CExpertAdvisor::GetDealByOrder( ulong order) // получение тикета сделки по тикету ордера
  {
   PositionSelect (m_smb);
   HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));
   uint total= HistoryDealsTotal ();
   for ( uint i= 0 ; i<total; i++)
     {
       ulong deal= HistoryDealGetTicket (i);
       if (order== HistoryDealGetInteger (deal, DEAL_ORDER ))
         return (deal);                             // запомнили тикет сделки 
     }
   return ( 0 );
  }

hangi her işlemde çağrılır. Buna göre, her seferinde tüm işlem geçmişi sıralanır ve test süresinde işlem sayısının karesiyle orantılı olarak yavaşlama olur.

Optimize edilmesi veya test edilmesi gereken bir Expert Advisor'da bu tür şeyleri zaman kayıpları kaçınılmaz olduğu için kullanmamak daha iyidir. Bu durumlar için bu çağrıları algoritmik olarak değiştirmek daha iyidir.

 
Rosh :

Bu sınıf GetDealByOrder(ulong order) yöntemini içerir

hangi her işlemde çağrılır. Buna göre, her seferinde tüm işlem geçmişi sıralanır ve test süresinde işlem sayısının karesiyle orantılı olarak yavaşlama olur.

Optimize edilmesi veya test edilmesi gereken bir Expert Advisor'da bu tür şeyleri zaman kayıpları kaçınılmaz olduğu için kullanmamak daha iyidir. Bu durumlar için bu çağrıları algoritmik olarak değiştirmek daha iyidir.

Onlar. EA şablonunu kullanan herkes "acı çekti"...

XLSX'e ne dersiniz? Uzman kodunun bununla bir ilgisi yok mu?

 
Rosh :

Bu sınıf GetDealByOrder(ulong order) yöntemini içerir

  ulong CExpertAdvisor::GetDealByOrder( ulong order) // получение тикета сделки по тикету ордера
  {
   PositionSelect (m_smb);
   HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));
   uint total= HistoryDealsTotal ();
   for ( uint i= 0 ; i<total; i++)
     {
       ulong deal= HistoryDealGetTicket (i);
       if (order== HistoryDealGetInteger (deal, DEAL_ORDER ))
         return (deal);                             // запомнили тикет сделки
     }
   return ( 0 );
  } 

hangi her işlemde çağrılır. Buna göre, bu Uzman Danışmanda , bu gibi koşullar altında, tüm esnaf geçmişi her seferinde sıralanır ve işlem sayısının karesiyle orantılı olarak test süresinde bir yavaşlama vardır.

Optimize edilmesi veya test edilmesi gereken bir Expert Advisor'da bu tür şeyleri zaman kayıpları kaçınılmaz olduğu için kullanmamak daha iyidir. Bu durumlar için bu çağrıları algoritmik olarak değiştirmek daha iyidir.

HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));

Bu yöntem tüm tarih boyunca yineleniyor mu? ve hikayenin sadece açık pozisyonla ilgili kısmı değil mi? Açık bir pozisyonla ilişkili 5'ten fazla fırsatım yoksa, tüm geçmişi tekrarlamaktansa HistorySelectByPosition'ı kullanmanın daha iyi olduğunu düşünüyorum HistorySelect (0, TimeCurrent ());

PS CExpertAdvisor bakmadı

 
Konstantin83 :

HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));

Bu yöntem tüm tarih boyunca yineleniyor mu? ve sadece hikayenin açık bir pozisyonla ilişkili kısmı değil mi? Açık bir pozisyonla ilişkili 5'ten fazla fırsatım yoksa, tüm geçmişi tekrarlamaktansa HistorySelectByPosition'ı kullanmanın daha iyi olduğunu düşünüyorum HistorySelect (0, TimeCurrent ());

PS CExpertAdvisor bakmadı

Bu durumda , binlerce anlaşma bir pozisyona dökülür ve hepsi aynı pozisyon kimliğine sahiptir POSITION_IDENTIFIER . Bu nedenle, bu durumda HistorySelectByPosition'ı çağırmak , HistorySelect'i (0, TimeCurrent ()) çağırmaya eşdeğerdir, bu anlaşmaların numaralandırılması geçmişteki tüm anlaşmaların numaralandırılmasına yol açar.

Diyelim ki, makaleden şablon kullanmanın başarısız bir örneği yapıldı. Sibiryalı erkekler ve bir Japon elektrikli testere hakkında bir bisiklet gibi.

 
Ashes :

XLSX'e ne dersiniz? Uzman kodunun bununla bir ilgisi yok mu?

Burası düzeltilecek. Geliştiriciler farkında, teşekkürler.