記事「取引における数学:シャープレシオとソルティノレシオ」についてのディスカッション - ページ 3

 

価格の対数を 読む

他の参考文献を自分で見つける

 
Rashid Umarov #:

価格の対数を 読む

他の参考文献を自分で見つける

もう1つの非常に重要なニュアンスは、このスクリプトでは、シャープを計算する際に、エクイティの変化があったバーだけが考慮されるということです:

     
      //--- add only if equity has changed
      if(m_equities[i] != prev_equity)
        {  
         log_return = MathLog(m_equities[i] / prev_equity); // 対数のインクリメント
         aver += log_return;            // インクリメントの平均対数
         AddReturn(log_return);         // 対数インクリメントの配列を埋める
         counter++;                     // リターンのカウンタ
        }
      prev_equity = m_equities[i];

平均変化率は、そのような バーの数で割ることによって求められる:

//--- インクリメント対数の平均値
   aver /= counter;

ただし、年間シャープへの移行は、現在のtfのすべてのバーが 計算にカウントされるかのように、時間枠比率に基づいて行われる:

//--- それ以外のケースでは、シャープレシオを年間値に再計算する。
//--- 現在のタイムフレームがD1に収まる期間はいくつあるか。
   double factor = double(PeriodSeconds(PERIOD_D1)) / PeriodSeconds(timeframe);
   sharpe = sharpe * MathSqrt(factor);     // 1日の値に再計算する
   sharpe = sharpe * MathSqrt(252);        // 日次から年次を取得する

つまり、もう一度言う:スクリプトは、エクイティ・チェンジを伴う 1バーあたりの平均シャープ値を求め、次に、年間シャープ値を求めるために、1年間のそのようなバーの数ではなく、1年間のこのtfのバーの合計数(もちろん、そのルート)を乗算する。これは誤りであり、最終的な数値を過大評価している。

どうやらテスターでは同じ方法でシャープを計算しているのだろうか?

 
Kristian Kafarov #:
このスクリプトは、株式変動のある 1バーあたりの平均シャープを求め、次に年間シャープを求めるために、1年間のそのようなバーの数ではなく、1年間のこのtfのバーの合計数(もちろん、そのルート)でそれを乗算します。これは誤りであり、最終的な数字を過大評価している。

私もそのことに気づいた。そのため、私のバージョンでは、ゼロバーを考慮するオプションを追加しました。