ライブラリ: CTradeStatistics

 

CTradeStatistics:

ENUM_STATISTICS列挙パラメータ計算のためのクラス

作者: Andrey Voytenko

 
Automated-Trading:

CTradeStatistics

著者:Andrey Voytenko

こんにちは!

この基準でエキスパートアドバイザーを最適化するために、OnTester()関数にLR相関を入れることが可能かどうか、 Custom maxを通じて興味があります

 
forexman77:

OnTester()関数にLR相関を入れることが可能かどうかに興味があります。

説明ではOnTrade()を使った例を示しています。OnTester()に計算を移すことを妨げるものは何もありません。

 
avoitenko:

説明では、OnTrade() を使用した例を示しています。OnTester()に計算を移すことを妨げるものは何もありません。

私はmql5にはあまり詳しくないので、明らかな間違いがあればご容赦ください。

私はこれをOnDeinitの前にEAのコードで実行しようとしています:

double OnTester()
{
double lrk=TesterStatistics(STAT_LR_CORRELATION);
  return(lrk);
}

エラー"'STAT_LR_CORRELATION' - can't convert enum "が出ます。

もしそうなら

double OnTester()
  {
//--- 同じ秒数で繰り返されるリクエストはブロックする。
   static datetime time_on_trade;
   if(time_on_trade==TimeTradeServer())return;
   time_on_trade=TimeTradeServer();

//--- 統計を更新する
   if(!m_stat.Calculate())Print(m_stat.GetLastErrorString());

  }

エラー: "'return' -関数は 値を返す必要があります。}- すべてのコントロール・パスが値を返すわけではありません。

EAの1行目と2行目:

#include <CTradeStatistics.mqh>
CTradeStatistics m_stat;

何が間違っているのか教えてください。

 

試行錯誤してやったんだ:

double OnTester()
{
CTradeStatistics m_stat;  
if(m_stat.Calculate()) PrintFormat("LR Correlation: %.2f",m_stat.LRCorrelation());
else Print(m_stat.GetLastErrorString());
double LRC=(double)m_stat.LRCorrelation();
return(LRC);
}
うまくいったかな?
 

Andrei, いくつかコメントがあります。

1. 500行目

if(m_balance_data.At(i)!=0.0) if(m_balance_data.At(i-1)!=0.0) に修正。


2.511 行目
分母 m_initial_deposit を 0 にチェックしない。

3. m_sharpe_ratioの計算をRiskFreeRateオプションで年間シャープレシオオプションに使用することを必ず 指定してください。

これはオプションの1つであり、標準的なものとは特に異なるため。

 

このコードでは、株式ドローダウンに関する統計を計算できないことがわかりました。どなたか、独自のコードでエクイティ・ドローダウンの計算に成功された方はいらっしゃいますか?

 

この単純な答えは、あなたが探しているものではありません。---> MT5 のトレードクラスでは、口座オブジェクトCAccountInfo acc を作成できます。acc は作成された口座情報 オブジェクトで、すべての口座詳細機能に すばやくアクセスできます。そして、acc.Equity()-acc.Balance()を実行します。 正直なところ、もっと簡単なコードacc.Profit() を使用することができます プラスなら利益、マイナスならドローダウンですよね? マイナスのエクイティ利益はドローダウンと同じです。 Profit()はエクイティと残高の差です。

あなたの質問がもっと複雑なら、詳細を追加してください;)

 
アンドレイ、ありがとう!素晴らしい仕事だ。
 
平均保有時間は?
 

完璧だ!

コンパイル警告が出ないようにするには

enum deal_result に null 要素を追加する必要があります:

//+------------------------------------------------------------------+
//|取引結果|
//+------------------------------------------------------------------+
enum deal_result
{
NOVALUE=0, //<<---- 追加
WIN=1,
LOSS
};