2010/11/12

ATCTradeを修正しました。

ATCTradeを修正しましたので、ご使用されている方はどうぞ!
また、DWTHarrのMQL5仕様の作成を依頼されましたが、途中で心が折れてしまったのでインジケーター指標として表示することができませんでした。サンプルとしてコメント表示のコードを掲示しておきますので試してみてください。(オブジェクト表示なら可能だと思います。)
//+------------------------------------------------------------------+
//|                                                      DWTHarr.mq5 |
//|                                          Copyright 2010, bighope |
//|                       http://expertadviser-bighope.blogspot.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, bighope"
#property link      "http://expertadviser-bighope.blogspot.com/"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers    1
#property indicator_plots      1
#property indicator_color1    Red
input int N     =  7;//対象データ数(2のN乗)
input int HBs   =  3;//高周波カット位置
input int LBs   =  4;//低周波カット位置
input int Shift =  0;//データのシフト数
int DWTPeriod;
//---------buffers
double IDWT[];
double g[];
double gs[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,IDWT,INDICATOR_DATA);
   //ArraySetAsSeries(IDWT,false);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   DWTPeriod = MathPow(2,N);
   ArrayResize(g,DWTPeriod);
   ArrayResize(gs,DWTPeriod);
   ZeroMemory(g);
   ZeroMemory(gs);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,//Priceバッファ数
                const int prev_calculated,//処理バー数
                const int begin,//重要なデータが始まる所
                const double &price[])
  {
//---
//PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,rates_total-DWTPeriod-1);
   string text;
   int     k;
   int     DWTf,z;
   double  sum,difference;
   for(k=0;k<DWTPeriod;k++)g[k] = price[rates_total-k-Shift-1];
   DWTf = DWTPeriod/2;
   //変換
   for(z=1;z<=N;z++)
   {
      for(k=0;k<DWTf;k++)
      {
         sum        =(g[k*2]+g[k*2+1])/2;
         difference =(g[k*2]-g[k*2+1])/2;
         gs[k]      =sum;
          if((LBs>=z)&&(z>=HBs)){gs[DWTf+k] = difference;}else{gs[DWTf+k] = 0;}//フィルタリング作業
       }
      ArrayCopy(g,gs);
      if(N>z) DWTf =DWTf/2; 
    }
      
    //逆変換
    for(z=1; z<=N ;z++)
    {
     
      for(k = 0; k < DWTf; k++) 
      {
         sum         =  g[k]+g[k+DWTf];
         difference  =  g[k]-g[k+DWTf];
         gs[2*k]       = sum;
         gs[2*k+1]     = difference;
      }
      ArrayCopy(g,gs);
      if(N>z)DWTf =2*DWTf;
     }
      for(k=0;k<DWTPeriod;k++){ IDWT[rates_total- Shift-k-1] = g[k];text += DoubleToString(g[k])+"\n";} 
     //  for(k=DWTPeriod;k>0;k--){ IDWT[rates_total- Shift-k] = g[k-1]; }
//--- return value of prev_calculated for next call
Comment(text);
   return(rates_total);
  }
//+------------------------------------------------------------------+

2010/11/10

EAの評価基準がほしい!

昨日、ATC2010に提出したEAが、全ポジションを決済しました。
初期のトラブルと『リカバリーコードの未記入』がここまで影響するとは・・・
順位は別として、作成したEAが本来の動きを見せるか?監視していきたいと思います。

さて、話は変わりますが、『やりたい事・やってみたい事』がいくつかあるのですが、その中の一つに、『EAの評価基準作成』があります。誰が見てもわかりやすEAの評価基準ができれば、EAの評価自体が上がるのではないか?と考えたからです。
例えば、バックテストのグラフできれいな右肩上がりを見せるEAが有能なEAなのか?とか、PFが高いEAが有能なEAなのか?など、一律に評価できる評価基準を作成しようと試みました。
と!いいますか、私にはそれだけの力量がなく、ある方に『EAを一律に評価する基準を作成できませんか?』とお伺いしてみました。ある方とは、『 Meta Trader (メタトレーダー)』サイトオーナーのKIKKAWAさんです。KIKKAWAさんは、『進化ゲーム理論の数理とその応用』などを研究されている研究員の方で、研究の検証用にMeta Traderを活用されています。
私は、当初、『このEAは、◎〇点です!』のような、絶対評価が良い評価(誰もがわかりやすい評価)であると考えていました。しかし、KIKKAWAさんとメールのやりとをするうちに、以下に示すような多角形グラフのほうが、わかりやすい評価ができると教えて頂きました。
image
2週間にわたり、19回のメールのやり取りと、作成して頂いたレポートが、19ページにもなりました。パラメーターをどうすか?という課題はありますが評価基準を示す方法としてはベストな方法であるという結論になりました。
【謝辞】
課題の定義もできない私の話を親身になって検討して頂いたKIKKAWAさんに感謝します。