プロフェッショナルの検討のために。

 

最大ドローダウンの話もある。テスターで正しく測定できていないのでは、という指摘がありました。確認することにしました。コードを書いてExpert Advisorに追加し、テストモードで動かしてみました。結果はテスターと一致した。そのコードを以下に示します。

アルゴリズムの正しさを再確認し、最大・最小値を計算せずに最大ドローダウンを計算できるのか知りたいです。

double MaxDrawDown;
int deinit() {
 Print("MaxDrawDown=",MaxDrawDown);
   return (0);
} 

start(){ 
  static double MaxEquity;
  static double MinEquity;
         double DrawDown;
  static bool flag;
 
  if(!flag)
    {
     MaxEquity=AccountEquity();
     MinEquity=AccountEquity();
     flag = true;
    } 
  if(AccountEquity()>MaxEquity) 
    {MaxEquity=AccountEquity();MinEquity=AccountEquity();}
  
  if(AccountEquity()<MinEquity) 
    {MinEquity=AccountEquity();}
  
  DrawDown=MaxEquity-MinEquity;
  
  if(DrawDown>MaxDrawDown ) 
    {MaxDrawDown=DrawDown;}
// ............остальной код советника
 

計算しないとはどういうことですか? 実行中に最大と最小の両方があった...

問題は、このようにドローダウンをオンラインで知ることができないことで、計算する必要があります。

 
FAQ:

計算しないとはどういうことですか? 実行中に最大と最小の両方があった...

問題は、オンラインではドローダウンがわからないことで、計算する必要があります。

高値と安値については、OnGoingという投稿に関連して、「何のための高値と安値なのか」という疑問が生まれました。そこで、高値と安値を使わずに最大ドローダウンを計算する他の方法があるのではと思ったのですが、いかがでしょうか?つまり、この計算は原理的に正しいのでしょうか?また、オンラインではどのような問題が発生するのでしょうか。なぜこの方法ではうまくいかないのか、説明してもらえますか?もしかしたら、Expert Advisorが複数あって、それぞれにこのコードを指定できない場合に問題が発生するということでしょうか。ということであれば、意味はわかります。それとも他の何か?

 
なぜなら、履歴(注文)からはバランスカーブしか再構築できませんが、エクイティカーブは各時点のオープンオーダー数、各注文のマージン(通貨)、価格の高値/安値から合成する必要があるからです。
 
FAQ:
なぜなら、履歴(注文)によるバランスカーブの再構築はできても、各瞬間の未決済注文数、各注文の証拠金額(通貨)、価格の高値・安値からエクイティカーブを合成する必要があるからです。

Expert Advisor を起動したばかりで履歴がない場合、グローバル変数 に格納されている自己資本の最大値と最小値を計算し、現時点での最大ドローダウンを計算できないのでしょうか。それとも何か誤解があったのでしょうか?あるいは、すでに何らかの履歴がある状況を考えているのかもしれません。そして、スクリプトを実行することで、注文履歴を考慮した最大ドローダウンを計算したいのですか?それなら、はっきりしている。しかし、作業を始めたばかりで履歴がない場合、あるいは履歴はあるが、このコードでExpert Advisorを起動した時点からのドローダウンを計算したい場合、それを妨げるものはないのでしょうか?

 
khorosh:

Expert Advisor を起動したばかりで履歴がない場合、グローバル変数に格納されている自己資本の最大値と最小値を計算し、現時点での最大ドローダウンを計算できないのでしょうか。それとも何か誤解があったのでしょうか?あるいは、すでに何らかの履歴がある状況を考えているのかもしれません。そして、スクリプトを実行することで、注文履歴を考慮した最大ドローダウンを計算したいのですか?それなら、はっきりしている。しかし、作業を始めたばかりで履歴がない場合、あるいは履歴はあるが、このコードでExpert Advisorを起動した時点からのドローダウンを計算したい場合、それを妨げるものはないのでしょうか?


何か変数に保存するよりも、SURGEONからEquity Indicatorの測定値を読み取る方が簡単でしょう。
 
Reshetov:
ある変数に何かを格納するよりも、Surgeon's Equity Indicatorを読む方が簡単です。
そうですね、テスターで動かすことを想定したコードでしたので、OnGoingで疑われたので、原理的に正しくカウントできているのかなと思っただけです。
 
Integer:

汗をかかないでください、ここでオントピックどころか完全にオフトピックな嘲笑を浴びせられましたよ。
誤解しているのではと疑い始めていたので、励ましの言葉をありがとうございました。
 
khorosh:

最大ドローダウンの話もある。ある方から、テスターで正しく測定できていないのではという指摘を受けました。

このテスターでは、株式の最大ドローダウンを正しく測定していますが、この瞬間の残高状態を考慮していないため、この測定はナンセンスです。

つまり、オープンオーダーが100pips上昇し、その後下落した場合、テスターはストラテジーリスクを論理的に決定する実際のドローダウンがゼロに等しいのに、100pipsのエクイティのドローダウンを表示するのです。このような計算が戦略リスクの評価には 無意味であることは明らかである。

 
khorosh:
誤解しているのではと疑い始めていたので、励ましの言葉をありがとうございました。


一般に、最大ドローダウンは、最大資本と最小資本の差ではない。当初は、Max Equity=Equity、Min Equity=Equity、Drawdown=0です。Equity>MaxEquityであれば、MaxEquity-MinEquityでドローダウンを考え、得られた値が先に計算したドローダウンより大きい場合は、大きい方の値を記憶し、MinEquity=MaxEquityと、新しい最大のMaxEquity=Equityを記憶して一度に最小値をリセットします。
 

赤い線はドローダウンを示しており、最大 値を見つける必要があります。

理由: