2017年2月20日月曜日

[ハーモニック]予告 V9から旧探査モードを削除します。

ただいま、ハーモニックパターン検出インジケータV9の改造をこつこつと行っています。

メモリを食べすぎる件と消えてしまう件が何とかならないか対策中です。

そのあたりの処理を変更する際、どうしても旧処理と共存が出来なくなってしまいました。

いま、ご利用のインジケータの探索方法はV8までとなります。
V9からは新探索方法のみとなります。

購入された方で、V8までの方がよかったという方は、V8インジケータを消してしまわないようにご注意ください。

よろしくお願いいたします。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

[書評]WORLD END ECONOMICA

久しぶりの書評です。
それも、超ライトなやつ。ライトノベル(笑)
WORLD END ECONOMICA(1~3完結)
異色のライトノベル作家、支倉凍砂著のライトノベルです。

狼と香辛料という小説が、中世ヨーロッパ風のファンタジー世界を舞台とした、商人がバリバリの先物や為替証書を使った駆け引きを行うライトノベルとしては異色内容で人気になりました。(ヒロインのホロがかわいかったという話もありますがw)

その方が書いた、月面都市を舞台としたSFです。

えぇ、月面都市なのは世界を小さくするめの舞台装置で、株式を中心とした投資用語満載の相変わらず(?)の内容です。
ヒロインは天才クオンツ。自分で市場を開設した電力会社(この段階で内容にピンとくる人いるかも?)とか、アナリストの利益相反とか、仕組債とか、絶対通常のラノベには出てこない単語満載の世界を生き抜く主人公たちのお話です。

紙の本があまりに分厚いため手を出していませんでいたが、電子書籍で目についたため読み進めています。ファンドの世界にラノベ風味を付け加えた、その世界に興味がある人向けの楽しい小説です。あぁあと、テクニカル分析を主に考える私としては、やっぱり「予言の自己実現」というキーワードはとても身に染みる言葉でした。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。 インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年2月18日土曜日

[MT4プログラム]小ネタ、どうしようもなく遅いCObjectArrayを少しでも高速化

ハーモニックパターン検出インジケータの中で、CObjectArrayを使用しているのですが、
この子があちこちどうしようもなく遅いです。

少しでも早くということで、コードを改造しています。

MQLについているCArrayシリーズのSearchメソッドですが、内部でQuickSearchという配列がソート済みであることを前提とした検索を行っていて、未ソート状態だと、必ず未発見を返してくるというふざけた仕様です。
(ソート済み→QuickSearch、未ソート→全量探査じゃね??)

まぁ試してみた所、試行回数が多い場合、
通常のAdd+全量探査
InsertSort+QuickSearch
だと、後者の方が多少早いようです。

InsertSortは、ソート状態を維持するデータ追加メソッドですが、この子も遅いです。

中ではInsertメソッドを呼び出しています。
MQLでは配列のブロック移動を行うメソッドがなく、ループで回して要素ごとにコピーしているわけですが、その際移動先のポインタが生きている場合Deleteするといったチェック処理が含まれています。
Insert処理ですので、配列を一個拡張してデータが入っていない所へのコピーですから、絶対データがない前提でOKのはずです。

ということで、少しだけ改造してみた結果です。

元コード
//+------------------------------------------------------------------+
//| Inserting an element in the specified position                   |
//+------------------------------------------------------------------+
bool CArrayObj::Insert(CObject *element,const int pos)
  {
//--- check
   if(pos<0 || !CheckPointer(element))
      return(false);
//--- check/reserve elements of array
   if(!Reserve(1))
      return(false);
//--- insert
   m_data_total++;
   if(pos<m_data_total-1)
     {
      MemMove(pos+1,pos,m_data_total-pos-1);
      m_data[pos]=element;
     }
   else
      m_data[m_data_total-1]=element;
   m_sort_mode=-1;
//--- successful
   return(true);
  }


修正後コード
//+------------------------------------------------------------------+
//| Inserting an element in the specified position                   |
//+------------------------------------------------------------------+
bool CCustomArrayObj::Insert(CObject *element,const int pos)
  {
//--- check
   if(pos<0 || !CheckPointer(element))
      return(false);
//--- check/reserve elements of array
   if(!Reserve(1))
      return(false);
//--- insert
   m_data_total++;
   if(pos < m_data_total - 1)
   {
      //--- copy from left to right
      //修正箇所
      int total = m_data_total - pos - 1;
      for(int i = total - 1; i >= 0; i--)
      {
         m_data[pos + i + 1] = m_data[pos + i];
      }
//      MemMove(pos+1,pos,m_data_total - pos - 1);
      m_data[pos]=element;
   }
   else
      m_data[m_data_total-1]=element;
   m_sort_mode=-1;
//--- successful
   return(true);
  }

修正前のメタエディタプロファイリング結果

修正後のメタエディタプロファイリング結果

大体60%ぐらいに処理時間が減りました。
・・メソッド名から想像がつくかと思いますがV9です。苦闘中です。なるべく消えないように探査を増やしたいのですが、ものすごく重くなってしまったため、メタエディタのプロファイリングとにらめっこしながら、遅いところを虱潰ししてます・・・。

CListを使えっていう話もあるのですが、こちらにはInsertSortメソッド無いのですよねぇ。多分Listだとソート処理が遅いんだろうな。インデックス位置を追いかけるのにカレントポインタを移動しなくちゃいかんから・・・。

自分だけで使うなら、もうC#で組んでそうです(笑)

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。