2016年1月22日金曜日

MQL5.comの気になる記事など紹介。R言語を使った探査的トレード手法の構築

MQL5.comを泳いで気になった記事の紹介です。

■ランダムフォレストの予測トレンド
https://www.mql5.com/ja/articles/1165

一部業界ではトレンドになっているR言語によるデータマイニングを使ったMT4トレード

R言語という統計専用言語を利用して、各種インジケータの値を読み込ませて解析を行い相関の高い組み合わせを得るという手法です。
多分、世界中の人がすでにやっていると思われます。MT4との連携も少し記載されていますね。

R言語そのものは、GNUと呼ばれる自由に利用できるけど、作ったコードはすべて公開しなさいというライセンスに基づいて作成されているため、自分で使う分には大丈夫ですが売るとなるといろいろ問題がありそうなので、自分の時間でやらんといかん系統です・・・。

■マニュアル . トレード自動化の3つの側面パート1:トレード
https://www.mql5.com/ja/articles/1363

エキスパートアドバイザとしてポジションの管理だけ行う部分と、実際のシグナル部分を実行ファイルごと分けてしまうという記事です。

EAはグローバル変数から現在の動作のみを受け取り発注とトレイリングのみを行います。
グローバル変数を経由しての処理になりますので、発注は別の制御が可能です。例えばオブジェクトのクリックで制御させたり、スクリプトを実行したり、インジケータを少し改造して発注コードを入れるといった組み合わせです。一種のサービス指向プログラミングになっています。

後、チックの更新を待たずにWindowsMessageにて即時に発注処理をさせる手法など、開発者として興味深い内容が含まれていました。

少し翻訳がわかりにくいところもありますが、日本語になっているだけましということで、翻訳してくださるMetaQuote社に感謝

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

2016年1月21日木曜日

Alpariのヒストリーサーバーから取得すると、2016/1/18~19が正しくとれない・・・・・?

Alpariからのヒストリカルデータの取得で1/18~1/19のデータが正しく構築されません。私だけですか???

Gewinn6でのポジションが昨日ストップにかかったのですが、想定していたストップ位置とちょっと違うなーと思いデバッグしてみたところ、OANDAとAlpariで全然結果が違う・・・?あれ?????と思い、チャートを見比べると・・

・ヒストリーセンターからダウンロードしたAlpariデータ

・OANDAのチャート


なんか、全然違う・・・・?????と思ったらAlpariのほうが18、19日のデータがない・・・・????
全部消して、チャートぐりぐりすると拾ってこれますが、ヒストリカルからダウンロードするとなんだか消えてしまう・・・・。あれ?あれ???

うーん。自前でなんとかするスクリプト書く必要があるのかなぁ・・・。面倒(ーー
Alpariでバックテストするときの注意点ということで、メモがわりに残しておきます。

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

MT4の無料インジケータを公開しています。Tick更新回数、TickEMA、漸進計算平均足追加

FX-ONにて公開しているMT4向け無料インジケーターを追加しました。
MQL超入門で作成したTick更新回数のインジケータと、それを応用したEMA、漸進計算平均足の3本建てです。

・Tick更新回数(MQL超入門で作成)
実行ファイル:TickVolume.ex4
ソースコード:TickVolume.mq4
http://mt4program.blogspot.jp/2016/01/mql-012.html

・[MT4インジケータ]TickEMA EMAの反応を取引の活発さによって変動する。
実行ファイル:TickEMA.ex4
ソースコード:TickEMA.mq4
http://mt4program.blogspot.jp/2016/01/tickema-ema.html

・[MT4インジケータ]漸進計算 上位時間 平均足インジケータを改良する。
実行ファイル:VMTHeikinAshiOnChart.ex4
ソースコード:VMTHeikinAshiOnChart.mq4
http://mt4program.blogspot.jp/2016/01/mt4_20.html

そのほかにも下記の記事内容のインジケータが含まれています。
[雑記]思えばたくさん作ったものです。無料公開中のインジケータ追加

ダウンロードはこちらから
MT4開発日記で公開中の無料インジケータです
MT4開発日記で公開中の無料インジケータ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

2016年1月20日水曜日

[MT4インジケータ]漸進計算 上位時間 平均足インジケータを改良する。

相変わらず平均足を研究しています。
[MT4インジケータ]平均足を漸進計算で上位足を表示する。チャート版

で作成したインジケータですが、上位の時間足を表示する際、過去の高値安値の影響が常に最大の影響を及ぼしてしまうことが、問題であるという風に書きました。平均足の特徴である現在価格による素早い反応という特徴が消えてしまっています。

そこで、影響を時間とともに減衰させるようにしてみました。

図 1/6公開の平均足(上)、1/20改良版平均足(下) (M15にH4ベースの漸進計算平均足を表示)



まず見た目的にとても平均足っぽくなりました(笑)
高値安値の影響が減衰していくため、反応が早くなります。漸進計算している意味が出てくるようになりました。

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

ソースコードはこちらから。変更点を赤字にしています。

2016年1月19日火曜日

[MT4インジケータ]TickTemaローソク足

この1週間はSMAP祭りでしたね。最後はTwitter陥落というシステム業界でちょっとした話題になるぐらいの影響でした。生放送が始まった後Twitterが接続できなくなって、おお??とそちらの方に気をとられてしまってました^^;;;;;

さてさて、需要があるかどうかわかりませんが、ちょっとお遊びで作ってみたインジケータを紹介します。

ローソク足はプライスアクションなどを見るときにとても優秀な表現です。Temaで4本値をすべて平滑化効果を入れたときに何か見えないかな?と思って作ってみました。
ついでにTick更新回数によるα値変動も入れています。

・図 通常のローソク足(上)とTickTemaローソク足(下)


うーん。まだ詳しく研究してませんが、価格が動く前に十字星が、通常のローソク足よりはっきり発生する…ような予感がします^^;;;

まぁお遊びで作ったのですが、その他のインジケータの基礎値として使用しています。

プロぐランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

ソースコードはこちらから

2016年1月18日月曜日

[MQL超入門] その013 OnCalculate解説

前回までで、流れに沿ってインジケータを作成できました。

今後自作のインジケータを作成するためには、もう少し内容を理解する必要があります。
まず、インジケータの本体である、OnCalculateについて解説したいと思います。

ウィザードを使ってインジケータを作成すると、次のコードが作成されます。
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }

[OnInit]は、インジケータの初期化時にMT4から呼び出されます。
インジケータをチャートに挿入したときや、表示時間足を変更した場合に呼び出されます。
[OnCalculate]は、チャート上でTick値が更新されるたびにMT4から呼び出されます。

インジケータを本格的に作成しようとすると、このOnCalculateを詳しく知る必要があります。そこで、今日はOnCalculateを解説したいと思います。
少しわかりやすくするため、日本語のコメントを入れたいと思います。[OnCalculate]が呼び出される際、MT4から10個のデータが渡されます。この10個のデータを使っていろんなインジケータを計算するのが基本です。
int OnCalculate(const int rates_total,          //各レート要素数
                const int prev_calculated,      //計算済み要素数
                const datetime &time[],         //要素ごとの時間配列
                const double &open[],           //オープン価格配列
                const double &high[],           //高値配列
                const double &low[],            //安値配列
                const double &close[],          //クローズ価格配列
                const long &tick_volume[],      //ティック数(要素の更新回数)
                const long &volume[],           //実ボリューム
                const int &spread[])            //スプレット

それぞれを解説したいと思います。

・rates_total
これは、インジケータが持っている配列要素数です。チャートに新しいバーが出るたびに、一つ増えます。最初はチャートのバー本数と一致します。
例えば、バー本数を1000本に指定している場合、最初は1000という数字が入ってきますが、バーが一つ更新されると1001になります。

・prev_calculated
[rates_total]にたいして、すでに計算済みの要素数を指定します。
ただし、これは実際には、前回[OnCalculate]を呼び出した際の[return]値が入ってきます。まだ一度も呼び出していない場合は0です。
たとえば、ウィザード初期状態でのプログラムでは[return(rates_total)]と指定されています。この場合、バーの追加がなければrates_totalと同じ値、バーの追加があれば、[rates_total]は一つ増えています。逆に考えるとバーの追加があった場合、[prev_calculated]は[rates_total]に対して一つ少ない値になります。
そのため、[rates_total]と[prev_calculated]の差を見ると、計算していないバーの本数を求めることができる事になります。

私は、[prev_calculated]の最新のバーは常に更新をしてもらうために、
return (rates_total - 1);
という書き方をします。こうすると、Tickの更新があるたびに最新のバーは計算しなさいよという指定になります。

・time open high low close
この5つは実際のチャート上のバーの値が配列として入ってきます。
それぞれ、時間、始値、高値、安値、終値です。
配列として入ってきますが下記の特徴があります。

・要素0が最新の値となる。
・要素数はrates_totalのため、rates_total以上の要素は参照しないようにする事

余談ですがプログラマ的感覚だと、要素があとに行くほど新しい値のイメージがあります。
MT4では逆なので少し戸惑う部分がありますが、0が最新と考えた方がしっくりくる場合も多いです。

ここで改めて、前回作成したTick更新回数インジケータの[OnCalculate]内の[for]部分を見てましょう。
for( int i = rates_total - prev_calculated - 1; i >= 0; i-- )
[i]が[rates_total - prev_calculated - 1]から始まって、0になるまで繰り返しています。

これは古いデータから値を作成していくため、このような書き方をしています。移動平均などは過去データをもとに記述する場合があります。テクニカル値は過去データが計算されていないと現在値が求まらない場合が多いため、このようなループ文にしています。

・tick_volume
Tick更新回数インジケータでも使用しましたTickの更新回数のデータです。

・volume
約定枚数のデータですが、FXでは使用されていません。株とかのデータを受け取った場合には入ってくるようです。

・spread
スプレッドですが、MT4では使用されていません。

OnCalculateにてMT4からどのようなデータがわたってくるかを確認しました。ぜひこれらのデータを使用して自作インジケータを作ってみてくださいね。

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ