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);
  }
//+------------------------------------------------------------------+