Ubzenシステム開発プロセス - ページ 4

 
sakis:


私は両方のシステムに興味があり、それは市場が方向を変えたときに売らなければならない。

3WLMAと100SMAの間の単純なクロスオーバーを30分チャートEUR/USDで150pipsにし、SLではなくクロスオーバーが起こったときに終了すると、極端な結果になる。

儲かるシステムで、私はそれをしばらく使って、結果を見て、13%の引き出しで私に戻って書き込む。

このシステム(3LWMA 100SMA cross)はEURUSD H1,H4と日足チャートでは動作しません。
 
zzuegg:
このシステム(3LWMA 100SMA cross)はEURUSD H1,H4 and Daily chartで動作しません

30分チャートで動作することは知っていますし、ユーロ分チャートでだけ動作します。
 

sakis:

hi zzuegg i know that,

30分チャートでユーロのみ動作します。

macdのないシステムにしてみました。
 
sakis:


人間の目のために自動売買よりもライブ取引でシステムsがうまく機能することもある。あなたは決してfxは6番目のtuchの前に統合を入力してください。

シャネルの、そしてスラストが起こる前でもあります。

あなたは、チャネルのオーバーシュートスパイクに続く重複波happent前にカウンタートレンドの動きを取ることはありませんように

また、1日か2日の短い期間で3回目か4回目の動きがあり、価格が強い手にあることを意味するので、高いティック値で発生したときに、すべての方法はブレイクアウトを取ります。

だから、この人間の目をごまかすためのフィルターが必要なんだ。

 

さて、ここで、私が言っていた悪い時期があります。さて、これを1年ずつ逆算してみます。2009年、2008年...といった具合です。

これが1年ごとの結果です。

2010--Max-DD= 6.47____Rel-DD= 6.47____Net_Profit=4588____Factor=2.48
2009--Max-DD=26.76____Rel-DD=26.76____Net_Profit=-380____Factor=0.94
2008--Max-DD=19.79____Rel-DD=19.79____Net_Profit=1096____Factor=1.20
2007--Max-DD= 7.10____Rel-DD= 7.10____Net_Profit=1506____Factor=1.62
2006--Max-DD=20.46____Rel-DD=20.46____Net_Profit=-1612____Factor=0.63
2005年--Max-DD= 8.79____Rel-DD= 8.79____Net_Profit= -23____Factor=0.99

2005----------------

2006-----------------

2007-----------------

2008--------------

2009 ------------------

2010----------------

いくつかの観察。

1) システムは、ほとんどの場合、ランダムではなく、Rowで負ける傾向があります。記事のZ-Scoreはこれに役立つかもしれません。

これは、なぜプロのトレーダーが年間20-30%のリターンを求めるかという事実を強調するのに役立つ。

 

今のところ、私はここに あるFxddのデータを使っているので、2005年までしかできません。なぜこのデータを使っているかというと、Fxddは私のブローカーと同じように週末にクローズし、デフォルトで週末のギャップを持っているからです。また、時間設定も私のブローカーに近いです。もし時間があれば、2000年から2005年のデータで テストしてみるかもしれません。彼らの週明けは水曜日で、週6日稼動している。

このシステムは、Tight or Very Volatile Rangesにあるため、順当に負けているのだと思う。しかし、それは2008年までがベストで、チャートを見つめた経験が少なくても、世界金融危機が関係しているのではないかと推測でき、その時はもっとFearで相場が動いていたかもしれません。

では、今何をすればいいのか?

-このような場合、「Fear」(恐怖)ではなく「Fear」(恐れ)で動くことになります。

-Z-Scoreの ような統計的な分析で前進し続ける。しかし、仮に負けが込んでいるときの相関関係が確認できたとして、その後どうするのか?しかし、仮に損失間の相関が確認できたとしても、その後どうするのでしょうか?

-悪い時期にはこれをビジュアルモードで見て、何がそれを殺しているのかを避けようとする?この場合、バックテストがうまくいくように、過去の知識を避けすぎると、カーブフィッティングになる可能性があります。

-レンジ、ボラティリティ、時間、ボリュームなどのブラインド・フィルターを適用する。この場合の欠点は、フィルターが取引回数を制限することである。例:一度に1つの方向にトレードする、長いトレンドにしがみつく、などは、ほとんどの人がフィルターとして機能していることに気づいていない。このシステムで唯一不満な点は、多くの人が満足できるような合理的な時間で$1,000を幸福に変えるほどアクティブでないことです。しかし、それは他の安定したシステムをアカウントに追加することで克服できるかもしれません。

-最後に、私が一番好きな方法です。最後の、しかし、私が最も好まない選択肢は、システムをもっとたくさん変えることです。例えば

a) Scalp on Direction - 欠点は、ティックデータが必要なことです。このようなアドオンでソリッドMMの原則が機能するか?

b) ピラミッド・オン・ディレクション - 価格が上昇したら、ロットを追加する。

c) ドルコスト平均法 - 時間差で追加するが、利食い前に追加する。欠点は、状況判断ができないこと。

d) グリッド - ポジションが一定の距離を進むと、同じサイズを追加する - 欠点、RRRがアップサイドダウンし、MMがついていけなくなる。

e) マーティンゲール/プログレッション(ha.ha.ha) 上記の方法のいずれかを使用する。小さな口座を大きな口座にしたい人にとって、これは魅力的に聞こえるかもしれません。欠点は、間違いなく適切なMMに従うことができないことです。

私は個人的には、これをそのまま呼んで、MMに進む方に傾いています。

他の人は「ノーウェイ、もっといいものを要求する」と思うかもしれないので、私は他の人の考えを知りたいです。

 
ubzen:

今のところ、私はここに あるFxddのデータを使っているので、2005年までしかできません。なぜこのデータを使っているかというと、Fxddは私のブローカーと同じように週末にクローズし、デフォルトで週末のギャップを持っているからです。また、時間設定も私のブローカーに近いです。もし時間があれば、2000年から2005年のデータで テストしてみるかもしれません。彼らの週明けは水曜日で、週6日稼動している。

このシステムは、Tight or Very Volatile Rangesにあるため、順当に負けているのだと思う。しかし、それは2008年までがベストで、チャートを見つめた経験が少なくても、世界金融危機が関係しているのではないかと推測でき、その時はもっとFearで相場が動いていたかもしれません。

では、今何をすればいいのか?

-このような場合、「Fear」(恐怖)ではなく「Fear」(恐れ)で動くことになります。

-Z-Scoreの ような統計的な分析で前進し続ける。しかし、仮に負けが込んでいるときの相関関係が確認できたとして、その後どうするのか?しかし、仮に損失間の相関が確認できたとしても、その後どうするのでしょうか?

-悪い時期にはこれをビジュアルモードで見て、何がそれを殺しているのかを避けようとする?この場合、バックテストがうまくいくように、過去の知識を避けすぎると、カーブフィッティングになる可能性があります。

-レンジ、ボラティリティ、時間、ボリュームなどのブラインド・フィルターを適用する。この場合の欠点は、フィルターが取引回数を制限することである。例:一度に1つの方向にトレードする、長いトレンドにしがみつく、などは、ほとんどの人がフィルターとして機能していることに気づいていない。このシステムで唯一不満な点は、多くの人が満足できるような合理的な時間で$1,000を幸福に変えるほどアクティブでないことです。しかし、それは他の安定したシステムをアカウントに追加することで克服できるかもしれません。

-最後に、私が一番好きな方法です。最後の、しかし、私が最も好まない選択肢は、システムをもっとたくさん変えることです。例えば

a) Scalp on Direction - 欠点は、ティックデータが必要なことです。このようなアドオンでソリッドMMの原則が機能するか?

b) ピラミッド・オン・ディレクション - 価格が上昇したら、ロットを追加する。

c) ドルコスト平均法 - 時間差で追加するが、利食い前に追加する。欠点は、状況判断ができないこと。

d) グリッド - ポジションが一定の距離を進むと、同じサイズを追加する - 欠点、RRRがアップサイドダウンし、MMがついていけなくなる。

e) マーティンゲール/プログレッション(ha.ha.ha) 上記の方法のいずれかを使用する。小さな口座を大きな口座にしたい人にとって、これは魅力的に聞こえるかもしれません。欠点は、間違いなく適切なMMに従うことができないことです。

私は個人的には、これをそのまま呼んで、MMに進む方に傾いています。

他の人は「ノーウェイ、もっといいものを要求する」と思うかもしれないので、他の人の考えを知りたいです。


こんにちは。

方向にピラミッドすることは強力なようだ、これは私のバージョンはまさにそうです。私はセカンダリトレードでピラミッドしています。

残念ながら、MAEは、平均化がこの戦略で機能しない可能性があることを示しています、私はそれが好きなので、私は残念ながらと言う;)


しかし、もう一つの質問は、フィリップにあります。

あなたのスクリプトでは、OrderOpenとOrderCloseの間の時間を調査していますが、図にあるように、概要と正しいMAE/MFE計算を得るために、オープン/クローズの前と後のいくつかの時間も調査する必要があるのでしょうか?私は間違った道を進んでいるのでしょうか?

 
zzuegg:

しかし、もう一つフィリップに質問があります。

あなたのスクリプトでは、OrderOpenとOrderCloseの間の時間を調査していますが、図にあるように、概要と正しいMAE/MFE計算を得るために、オープン/クローズの前と後の時間も調査する必要があるのでしょうか?私は間違った道を進んでいるのでしょうか?


その通りです。 取引ごとに、MFEまでの時間に対して、MAEが最初に発生したか、最後に発生したかを計算する必要があります。 MAEがMFEより先に発生したトレードを「タイプ1」と呼びます。 MAEの前にMFEが発生した取引は「タイプ2」と呼ばれます。

ストラテジーの相場予測能力を表す簡単な指標は、タイプ1のトレードの発生回数をトレードの総数で割って、100%をかけることです。 例えば、1年間に100回のトレードがあったとして、そのうち90回がタイプ1のトレードで、10回がタイプ2のトレードだったとします。 つまり、あなたの「予測成功率」は、90/100×100%=90%です。

目先の相場の方向性を正しく予測できないストラテジーよりも、目先の相場の予測率が高いストラテジーの方が望ましいのです。 (当然といえば当然なのですが)
 

しかし、TimeToMAEのrealtive to the opentimeは、ネガティブでポジティブでなければならないのでしょうか?取引開始が早ければ正のtToMAE、遅ければ負のtToMAEです。もちろん、平均化すれば完璧な戦略になるかもしれませんので、tToMAEのStdDevも見ておく必要があります。

私が見たところ、あなたは負のtToMAEを許可していないようです。

WatchBarsBeforeOpenとWatchBarsAfterCloseという変数を導入することで、この問題を克服できたと思っています。tToMAEとtToMFEは、使用するタイムフレームが許す限り正確な分単位であることに注意してください。

まだ、分析結果はなく、生データのみです。

//+------------------------------------------------------------------+
//|                                      AdvancedReport_03_04_11.mq4 |
//|                                                           zzuegg |
//|                                       when-money-makes-money.com |
//+------------------------------------------------------------------+
#property copyright "zzuegg"
#property link      "when-money-makes-money.com"

extern int WatchBarsBeforeOpen=10;
extern int WatchBarsAfterClose=10;
extern int WatchPeriod=0;

int ticket[];
int mae[];
int mae.time[];
int mfe[];
int mfe.time[];
int mfee[];
int profit[];
int missed[];

void reportTrade(int trade){
   OrderSelect(trade,SELECT_BY_TICKET,MODE_HISTORY);
   int start   =(iBarShift(OrderSymbol(),WatchPeriod,OrderOpenTime(),false) +WatchBarsBeforeOpen)+1;
   int end     =iBarShift(OrderSymbol(),WatchPeriod,OrderCloseTime(),false) -WatchBarsAfterClose;
   int highest =iHighest (OrderSymbol(),WatchPeriod,MODE_HIGH,(start-end)+1,end);
   int lowest  =iLowest  (OrderSymbol(),WatchPeriod,MODE_LOW,(start-end)+1,end);
  // Print(OrderTicket()+"  "+start+"  "+end+"  "+highest+"  "+lowest);
   ArrayResize(ticket,ArraySize(ticket)+1);   
   ArrayResize(mae,ArraySize(mae)+1);
   ArrayResize(mae.time,ArraySize(mae.time)+1);
   ArrayResize(mfe,ArraySize(mfe)+1);
   ArrayResize(mfe.time,ArraySize(mfe.time)+1);
   ArrayResize(mfee,ArraySize(mfee)+1);
   ArrayResize(profit,ArraySize(profit)+1);
   ArrayResize(missed,ArraySize(missed)+1);
   
   //Print(TimeMinute(OrderOpenTime())+"  "+TimeMinute(OrderCloseTime())+"  "+TimeMinute(iTime(OrderSymbol(),WatchPeriod,lowest))+"  "+TimeMinute(iTime(OrderSymbol(),WatchPeriod,highest)));
   ticket[ArraySize(ticket)-1]            =OrderTicket();
   switch(OrderType()){
      case OP_BUY:{
         mae[ArraySize(mae)-1]            =(OrderOpenPrice()-iLow(OrderSymbol(),WatchPeriod,lowest))/MarketInfo(OrderSymbol(),MODE_POINT);
         mae.time[ArraySize(mae.time)-1]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,lowest))/60;
         mfe[ArraySize(mae)-1]            =(iHigh(OrderSymbol(),WatchPeriod,highest)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         mfe.time[ArraySize(mae.time)-1]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,highest))/60;
         profit[ArraySize(profit)-1]      =(OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         missed[ArraySize(missed)-1]      =(mae[ArraySize(mae)-1]+mfe[ArraySize(mfe)-1])-profit[ArraySize(profit)-1];
         mfee[ArraySize(mfee)-1]          =(mfe[ArraySize(mfe)-1])-profit[ArraySize(profit)-1];
      break;
      }
      case OP_SELL:{
         mae[ArraySize(mae)-1]            =(iHigh(OrderSymbol(),WatchPeriod,highest)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         mae.time[ArraySize(mae.time)-1]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,highest))/60;
         mfe[ArraySize(mae)-1]            =(OrderOpenPrice()-iLow(OrderSymbol(),WatchPeriod,lowest))/MarketInfo(OrderSymbol(),MODE_POINT);
         mfe.time[ArraySize(mae.time)-1]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,lowest))/60;
         profit[ArraySize(profit)-1]      =(OrderOpenPrice()-OrderClosePrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         missed[ArraySize(missed)-1]      =(mae[ArraySize(mae)-1]+mfe[ArraySize(mfe)-1])-profit[ArraySize(profit)-1]; 
         mfee[ArraySize(mfee)-1]          =(mfe[ArraySize(mfe)-1])-profit[ArraySize(profit)-1];      
      break;
      }
   }  
}

void writeCSV(string EA.name,string EA.parameter=""){
   int hnd=FileOpen(EA.name+"-"+EA.parameter+".csv",FILE_CSV | FILE_WRITE,";");
   FileWrite(hnd,"Ticket","MAE","TimeToMAE","MFE","TimeToMFE","MFEE","Profit","Missed");
   for(int i=0;i<ArraySize(mae);i++){
      FileWrite(hnd,ticket[i],mae[i],mae.time[i],mfe[i],mfe.time[i],mfee[i],profit[i],missed[i]);
   }
   FileClose(hnd);
}


void AdvancedReport.doStatistics(string EA.name,string EA.parameters="",int EA.limitMagicNumber=-1){
   for(int i=0;i<OrdersHistoryTotal();i++){
      OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderMagicNumber()==EA.limitMagicNumber || EA.limitMagicNumber==-1){
         reportTrade(OrderTicket());
      }
   }
   
   
   writeCSV(EA.name,EA.parameters);
}
 
ubzen:

さて、ここで、私が言っていた悪い時期があります。さて、これを1年ずつ逆算してみます。2009年、2008年...といった具合です。

これが1年ごとの結果です。

2010--Max-DD= 6.47____Rel-DD= 6.47____Net_Profit=4588____Factor=2.48
2009--Max-DD=26.76____Rel-DD=26.76____Net_Profit=-380____Factor=0.94
2008--Max-DD=19.79____Rel-DD=19.79____Net_Profit=1096____Factor=1.20
2007--Max-DD= 7.10____Rel-DD= 7.10____Net_Profit=1506____Factor=1.62
2006--Max-DD=20.46____Rel-DD=20.46____Net_Profit=-1612____Factor=0.63
2005年--Max-DD= 8.79____Rel-DD= 8.79____Net_Profit= -23____Factor=0.99

2005----------------

2006-----------------

2007-----------------

2008--------------

2009 ------------------

2010----------------

いくつかの観察。

1) システムは、ほとんどの場合、ランダムではなく、Rowで負ける傾向があります。記事のZ-Scoreはこれに役立つかもしれません。

これは、なぜプロのトレーダーが年間20-30%のリターンを求めるかという事実を強調するのに役立つ。



数ヶ月、数年にわたるROIデータがあれば、今後の破滅のリスクを評価するのに必要なデータを手に入れることができます。

http://www.futuresmag.com/Issues/2009/August2009/Pages/Minimizing-your-risk-of-ruin.aspx

このバックテストデータは、バックテスト結果から実際に何かを計算するために必要なデータであり、将来の結果を示すために活用することができます。

2009年のZスコアが2011年に関連する唯一の方法は、2011年の市場価格活動が本質的に2009年の繰り返しである場合です。

Zスコアは評価する上では興味深い統計ですが、将来的にあなたの戦略がどのように機能するかについて、何の価値も洞察も与えてくれません。 CTA、マネーマネージャー、モーニングスターなどが、プロが運用する口座のZスコアを追跡し報告しないのには理由がある。 それは、成功の指標としては無価値だからです。

しかし、破滅のリスクの計算やドローダウンの中央値などは、FX業界に限らず、プロが行っていることです。

また、ブローカーに関してですが、バックテストに異なるブローカーを使うのは、自分の戦略を基礎となる時系列の戦略から切り離そうとする貧乏人の努力のようなものです。 将来の時系列がどうなるかは分かりませんが、2つのブローカーの過去の時系列が同じとは限らないので、異なるソースからの広範囲の過去のデータセットでバックテストを行い、次にあなたの戦略がどれだけ堅牢かを分析することは、この堅牢性が将来の時系列であなたの戦略がどれだけうまく機能するかを示すものなので、良いアイデアです。

プロは過去の様々な市場レートに対してもバックテストを行っています。 場合によっては、バックテストを強化するために、モンテカルロ法を使用して、統計的に実際の市場データと同等である全く架空の市場データを作成することもあるようです。

皆さんはこのようなことをご存知で、別の分析方法を選択する正当な理由を持っているかもしれません。