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

 
Ivan Titov #:
Sharpe.mqhは年間シャープレシオのみを計算するという理解で合っていましたか?月次ソルティーノは機能しないのですか?

この記事に質問の答えがあります。

 
Andrey Khatimlianskii #:

繰り返しになるが、"低い数字 "とは何か?私には70-80は低いと思えるが、そのようなパスにはペナルティはない。

他のパスと比較した数字なのか?

テスト間隔の長さで正規化されているのか?

そうでなければ、結果の表全体を何度も再計算しなければならないでしょう。

上記の議論に同意する。

 
Andrey Khatimlianskii #:
一致するが、常に一致するわけではない

テスターで週足タイムフレームを設定した場合、両者はほとんど常に一致しない:

月足では、スプレッドはさらに大きくなる:


 
Rashid Umarov #:

その記事には、あなたの質問に対する答えが書かれている。

私の質問に対する答えは記事にはありませんでしたが、Sharpe.mqhというコードから判断すると、ソルティーノは含まれていません。そのため、ソルティーノ計算オプションを追加した修正コードを以下に添付します。同時に、不要な関数呼び出しの点でコードを最適化しました。

私見では、ソルティーノ係数の欠点は、リスク・フリー(この場合はゼロ)を下回る利回りしか計算に用いられないことだ。しかし、テストしたストラテジーの計算平均を下回る期間の1つでプラスのリターンを得ることもリスクである。そのため、平均を下回るリターンだけを考慮する係数計算を追加した。類似のものが見つからなかったので、控えめにティトフの係数と名付けました))。見つかったら名前を変えるつもりだ。

原文では、計算期間が現在の時間枠に依存するのが不便である。そのため、計算期間を設定できるようにしました(明示的に設定されていない場合は、現在のタイムフレームが使われます):

Returns.SetTF(PERIOD_MN1);

シャープレシオを計算する際に利回りの対数を使用し、それを年率の値にする必要性をどの情報源からも見つけられませんでした。したがって、これらのオプションを無効にする可能性を追加しました。

なぜか、記事の例ではリターンがゼロの期間を無視している。これは結果を歪める。そこで、そのような期間を計算に含めるオプションを追加した。

元記事と同じシャープレシオの計算例:

#include <Sortino.mqh>
CReturns Returns;

..

void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_SHARPE));
}

他のすべての条件が同じ場合のソルティーノ係数の計算例:

#include <Sortino.mqh>
CReturns Returns;

..

void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_SORTINO));
}

私自身は、平均を下回るリターンのリスクを月次で評価することにした:

#include <Sortino.mqh>
CReturns Returns;

..

int OnInit()
{
        Returns.SetTF(PERIOD_MN1);
        ..
}


void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_TITOV, false, false, false));
}
ファイル:
Sortino.mqh  10 kb
 
Ivan Titov #:
シャープレシオを計算する際にリターンの対数を使用する必要性は、どの情報源にも見当たりません。

引用して回答すると

シャープレシオの計算においてリターンの対数を使用することは、厳密には必要ではありませんが、特に長い期間やボラティリティの高い資産を扱う場合、計算を簡素化し、データの統計的特性を向上させるために有用です。対数リターンがよく使われるのは、リターンの正規分布をよりよく近似し、ポートフォリオを作成する際の計算を単純化するためである。

対数なしで試してみて、珍しい副作用について教えてください。その副作用に遭遇するはずだ。

 
Ivan Titov #:
シャープレシオを計算し、それを年率換算する必要性については、どの情報源にも見当たらない。

別の引用

シャープレシオを年率換算することについては、投資の当初の時間スケールにかかわらず、異なる投資戦略やポートフォリオ間の比較を可能にするために、比率を標準化するために行われる。これは、投資家が共通の基準に対して投資パフォーマンスを測定するのに役立つ一般的な慣行であり、特に異なる資産タイプや取引頻度の異なる戦略間で比較を行う場合に有効です。

 
Rashid Umarov #:
引用して返答しよう。

情報源というのは、この記事以外のシャープレシオとソルティーノレシオに関する情報のことです。

Rashid Umarov#:
シャープレシオを年率換算することについては、これはレシオを標準化するために行われるものであり、投資の当初の時間スケールに関係なく、異なる投資戦略やポートフォリオ間で比較できるようにするためである。
シャープレシオは、一定期間のセグメントの平均リターンの、同じセグメントの標準偏差に対する比率である。つまり、戦略同士を比較する可能性にとって、セグメントの長さはあまり重要ではない。私の意見では、不必要なノイズを取り除くために、平均的な取引期間の数倍の長さを選択することが望ましい。
Rashid Umarov#:
対数なしで試してみて、珍しい副作用について教えてください。あなたはそれに遭遇するはずです。

試してみました。しかし、1つ間違いを見つけたので、修正版を添付する。

ファイル:
Sortino.mqh  10 kb
 
Rashid Umarov #:

引用して返答しよう。

対数なしで試してみて、珍しい副作用について後で教えてください。あなたはそれに遭遇するはずです。

不思議なことに、このような株式の場合、このスクリプトは2.08のシャープを与える:

そしてこのスクリプト(再投資も同じ)は3.66である:

2番目の株式の質が悪いことは明らかだが(再投資は常に株式の質を悪化させる)。

また、株式増分の対数の代わりに増分そのものを使用する場合、最初の株式は3.85となる:

         log_return = (m_equities[i] - prev_equity); // インクリメント 
         //log_return = MathLog(m_equities[i] / prev_equity); // 対数のインクリメント

最初の株式は3.85、2番目の株式は2.1となる。はるかに適切である。

 
さらに、対数のシャープは初期預金の大きさに大きく依存する。上記の例(エクイティ1)では、初期預金額が4000の場合、2.08となり、400000の場合、3.83となります。しかし、エクイティの形は何も変わっていない(固定ロットでの取引)。
 

対数のシャープ値は、再投資を伴う取引の場合に限り、預金額に依存しない。

しかし、この場合、単純増分のシャープは預金額に依存しない。

従って、なぜ対数のシャープを使わなければならないのか理解できない。