Kütüphaneler: SingleTesterCache - sayfa 7

fxsaber #:

Ben olsam maksimum değeri kaydederdim. Bir sonraki TesterTradeState kaydının oluşturulma zamanı muhtemelen geliştiriciler tarafından seçilen sıklığa ve diğer bazı koşullara bağlıdır.

Orijinaline çok benzer bir tst dosyası oluşturmak için bir görevim olsaydı, aynı TesterTradeState[] elde edemezdim.

Anladım.

SingleTesterCache_Example.ex5 komut dosyası çalıştırıldıktan sonra, strateji test aracında “Önceki Sonuçlar” düğmesi aracılığıyla Test.tst dosyasının sonuçları açılmıyor.

Komut dosyasının çalışma sonucunu ve komut dosyasını çalıştırdığım hesabın geçmişini ekte sunuyorum.

Kütüphaneyi bugün güncelledim.

MT5 sürümü 6230.

Dosyalar:
Files.zip  315 kb
Ivan Titov strateji test aracında "Önceki Sonuçlar" düğmesine tıklandığında Test.tst dosyasının sonucu açılmıyor.

Kütüphaneyi oluşturduğumdan beri (yakında yedi yıl olacak) Save yöntemini kullanmıyorum. Bu süre zarfında, büyük olasılıkla MQ tarafında değişiklikler yapılmıştır.


Orijinal tst dosyasını alıp incelemeli, ardından kaydetmeliyim. Ardından farkın ne olduğunu kontrol etmeliyim.

Şu anda ben bu işle ilgilenmeye hazır değilim. Bu işlevi kullanmıyorum.

Yani, "tst dosyalarını yazma" konusundabu kütüphaneyi kullanmamak daha iyi. Sadece "okuma" konusunda kullanılabilir. Doğru mu anladım?
Ivan Titov #:
Yani, "tst dosyalarını yazma" konusundabu kütüphaneyi kullanmamak daha iyi olur. Sadece "okuma" konusunda kullanılabilir. Doğru mu anladım?
Tester ile okuma amacıyla yazmak gerekiyorsa, açıkça bir düzenleme yapılması gerekiyor. Ne tür bir düzenleme olacağı ise incelenmelidir.
fxsaber #:
Eğer Testçi tarafından okunmak üzere yazılıyorsa, açıkça bir düzeltme yapılması gerekiyor. Ne tür bir düzeltme olacağı ise incelenmelidir.
Bu sayıyı değiştirin
      this.Header.version = ::MathMax(this.Header.version, 502);

505 ile değiştirin.


Eğer reklam içermeyen bir backtest sonucunu tartışmak gerekirse (örneğin, Market'ten bir danışman), tst dosyasını anonim hale getirip forumda rahatlıkla paylaşabilirsiniz.

İşlem şu şekilde yapılır.

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/tr/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/tr/code/26132

template <typename T>
void ChangeComments( T &Array[], const string NewComment = NULL )
{
  for (uint i = ArraySize(Array); (bool)i--;)
    Array[i].comment = NewComment;
    
  return;
}

void ChangeName( SINGLETESTERCACHE &SingleTesterCache, const string Name = "Deleted", const bool Comments = false )
{
  SingleTesterCache.Header.expert_name = Name;            // uzmanın adı
  SingleTesterCache.Header.expert_path = Name;            // MQL5'ten gelen yoluyla birlikte uzmanın adı

  if (!Comments)
  {  
    ChangeComments(SingleTesterCache.Deals);
    
    ChangeComments(SingleTesterCache.Orders);
  }
  
  return;
}

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Tek bir çalıştırma ile ilgili son önbellek kaydını okumayı başardıysa
  {
    SINGLETESTERCACHE SingleTesterCache(Bytes2); // Onu ilgili nesneye atıyoruz.

    ChangeName(SingleTesterCache);
    
    SingleTesterCache.Save("ForumBacktest.tst");
  }
}


Önce backtest'i yapın, ardından Terminal'de bu komut dosyasını çalıştırın. Sonuç olarak, kimlik bilgileri içermeyen backtest'inizi elde edeceksiniz. Böylece, forumda endişe duymadan paylaşabileceğiniz tüm backtest istatistikleri korunmuş olacaktır.

Buradaki kaynak kodda, herhangi bir sayıda tek geçişli önbellekle eşzamanlı çalışmanın nasıl organize edileceğini görebilirsiniz.


Özellikle, işlemler bu şekilde ayrıştırılır.

struct DEAL_SIGN2 : public DEAL_SIGN
{
  bool operator =( const TradeDeal &Deal )
  {
    const bool Res = (Deal.action <= DEAL_TYPE_SELL);

    if (Res)
    {
      const double ContactSize = Deal.contract_size ? Deal.contract_size * 1000 : 1e8;

      this.Volume = (1.0 - (Deal.action << 1)) * Deal.volume / ContactSize;
      this.Time = Deal.time_create;
    }

    return(Res);
  }
};

int GetDeals( const string FileName, DEAL_SIGN &Deals[] )
{
  const SINGLETESTERCACHE SingleTesterCache(FileName);

  int Amount = 0;
  DEAL_SIGN2 Deal;

  for (int i = 0, const Size = ArrayResize(Deals, ArraySize(SingleTesterCache.Deals)); i < Size; i++)
    if (Deal = SingleTesterCache.Deals[i])
      Deals[Amount++] = Deal;

  return(ArrayResize(Deals, Amount));
}
Коэффициент НЕкорреляции.
Коэффициент НЕкорреляции.
  • www.mql5.com
При составлении портфеля ТС стараются опираться на статистику. Например, пробуют составлять таблицу корреляции на основе вычислений соответствующих коэффициента (КК). Основная причина такого подхода -