エラー、バグ、質問 - ページ 2319

 
こんにちは!価格が正しく表示されないエラーの修正方法を教えてください。インジケータを全部捨てている。ユーラスド
 
Slava:

グラフィックではなく、シンボルの設定。

マーケット概観で、シンボルコンテキストメニューから「シンボル指定」を選択する

 
Igor Semyonov:

ありがとうございます。

問題が発生した時の端末ログを最初から表示してください

 
Slava:

ありがとうございます。

問題が発生した時の端末ログを最初から表示してください

ログファイルをプライベートメッセージで 送りました。

 
Igor Semyonov:

ログファイルをプライベートメッセージで 送りました。

はい、ありがとうございます。

ログはすべてクリアしています。

教えてください、あなたが言った状況は続いているのでしょうか?

 

VolumeをDoubleToString(Volume, 2)無しで表示します。スクリーンショットはEURUSDです。

 
Slava:

はい、ありがとうございます。

ログを見ればすべてがわかる。

教えてください、あなたが言ったような状況は続いているのですか?

端末を再起動したところ、今のところ問題ありません。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

パントゥラル さん 2018.11.01 16:03

親愛なるMT開発者の皆様、こんにちは。シャープレシオの計算アルゴリズムにバグがあることを報告させていただきます。アレクセイVyazmikin 氏による付録レポートではSR=0.29ですが、私の計算によると、それは約3.7〜3.8(ゼロPnLかどうかに応じて)平均リターンがシリーズの長さに依存しないため、標準偏差(sqrt(長さ))のスケーリング係数の不在でエラーがあることを示唆している、それが収束し、RMSはsqrt(長さ)として増加します。

C++

double SharpRatio(vector<double> pnl)

{

double avret = 0;

for (int i = 0; i < pnl.size(); ++i) avret += pnl[i];

avret /= pnl.size();


double var = 0;

for (int i = 0; i < pnl.size(); ++i) var += pow(pnl[i] - avret, 2);

var = sqrt(var / pnl.size()) / sqrt(pnl.size());


return  avret / var;

}

同じTCが2つあるとしよう。同時にスタートさせるのです。1日後、両者ともpnl配列が表示される。1枚目は止められたが、2枚目は止められなかった。さらに1日後、2人目もまったく同じpnlを見せてくれました。

つまり、1枚目はpnl[]、2枚目はpnl[]+pnl[]である。つまり、2日目の取引は1日目の取引と同じであった。


その後、提案された式によると、2番目のTSのシャープ比は、最初の1の1よりもsqrt(2)(2のルート)小さくなります。でも、同じような取引をしていたんですよ

 
fxsaber:

同じTCを2台用意する。同時に実行する。24時間後には、どちらもpnlの配列が確認できた。最初の1枚は止められたが、2枚目は止められなかった。さらに1日後、2台目もまったく同じpnlを示しました。

つまり、1枚目はpnl[]、2枚目はpnl[]+pnl[]である。つまり、2日目の取引は1日目の取引と同じであった。


その後、提案された式によると、2番目のTSのシャープ比は、最初のもののそれよりもsqrt(2)(2のルート)小さくなります。でも、同じような取引をしていたんですよ

ジョークはどうする?"小さいうちに殺しておくべきだ" .

では、 に添付されたファイルから例を見てみましょう。何事も理屈では怖くても、手で感じるまでは怖いものですからね。

そのファイルには 144の取引が あり、そのシャープ値は0.29です(サイトでは小数点以下2桁の精度で表示されていますが、それは大丈夫です - 誰も小数点以下5桁は必要ありません、この場合、2つの戦略を比較するための良い尺度として小数点以下2桁で十分です)。

シャープは K/STD レシオとして計算されます。

  • K- 取引履歴の平均成長率
  • STDは 取引履歴における利益の標準偏差

仮に、以前の取引のコピーである取引が2倍に増えたとします。これで288回の取引=144*2ということになります。同時にKは 変わりません。つまり、STDを変えることで、初めてSharpeを変えることができるのです。

初期STD=MathSqrt(X2/(n-1)), ここで:

  • X2 は平均値からの偏差の二乗和 X_aver
  • n - ティードの数 == 144

つまり、Sharpe=MathSqrt(X2/(144-1)) です。= MathSqrt(X2/143)

取引回数が2倍になったので、2倍の履歴の場合、新しいSharpeは次のように計算されます。

SharpeNew=MathSqrt(X2_new/(2*144-1))

ここで、X2_new=2*X2である。したがって、SharpeNew/Sharpe ratio = MathSqrt(X2/(144-1)) / MathSqrt(X2_new/(2*144-1)) = となる。

MathSqrt(X2/(144-1))  / MathSqrt(2* X2/(2*144-1)) =  MathSqrt(X2/(143))  / MathSqrt(2* X2/(283))= MathSqrt(X2*283/(2*143*X2))= MathSqrt(283/286)= 0.994741 

分母と分子を取り違えても、SharpeNewは0.2929190.296025の 範囲となる。 つまり、3桁目のどこかに差が出る。

でも、10倍から20倍は違う。どこが間違いなのか、ご自身で確認してください。

 
Rashid Umarov:

何の冗談だ?"小さいうちに殺すべき"

あなたは誤解している。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2018.11.06 13:23

そうすると、提案した式 によれば、2番目のTSのシャープ比 は、1番目のTSよりもsqrt(2)(2の根)小さくなることになります。でも、同じような取引をしていたんですよ


C++から引用した式のことです。


そして、MTで使われる計算式では、もちろん1が引かれることはない。そうすると、提案された例では、144の間隔をいくつ観測しても、Sharpeは常に同じになるのである。