2015年6月12日金曜日

移動平均は難しい・・・。どの期間の移動平均を見るべきなのか?

答えのない雑談です・・・。

MAEnagy.PNG

張り付けた画像は、期間の違う移動平均が持つエネルギーを表示する自作インジケータです。
移動平均は期間という重要なパラメータが存在します。
どの期間の移動平均を見るべきか?エネルギー量を元に判別できないか試行錯誤していたのですが、結局いったん保留にしました。

まぁテクニカル系にありがちな過去はわかるけど現在の予測が難しい系のインジケータになってしまいました。
過去のチャートの特徴を見る際の参考レベルで置いときたいと思います。

さておき、エネルギー量ですが、期間ごとに波うっていることが分かります。見るべき移動平均の期間が異なる事が分かります。大きな流れになるときは、短い期間の移動平均→長い期間の移動平均へエネルギーが遷移していきます。そしてそのうちピークアウトしていることが読み取れます。

なんとなくですが、本来見るべき移動平均の期間を表していそうです。
あと、黄色が短い期間の移動平均を表しているのですが、かなり定期的に波打ちしています。このあたりにEURUSDの特徴が出ているかもしれません。短期のピークアウトをとれるかなぁ??プログラムで判定するのは難しいなぁ・・・・。

しかし、このインジケータ重たいのなんの・・・。昨日MT4が固まったーって件は、これを動かそうと思ってまったく帰ってこなくなってしまいました(汗

以上、雑談でした^^;


2015年6月11日木曜日

MT4が固まった!→ヒストリを消してみよう

MT4Trable1.PNG

カスタムインジケータをチャートに表示した際、チャートのバー数が多すぎて表示に時間がかかり固まってしまった事ありませんか?
私はよくあります^^;; カスタムのインジケータを作っているときに、バックテストと合わせて対応しているとつい・・・。

このように少ないバー数の場合は表示できるけど、バー数が多すぎて固まってしまった場合のヒストリデータを消してしまうと表示される場合があります。

まず、MT4は強制終了させます。
固まっている状態で表示されるウィンドウで「プログラムを終了する」を選択すると強制終了します。

そのあと、メタエディタを開き、ナビゲータウィンドウのMQL4を選択して「フォルダを開く」を選択します。
MT4Trable2.PNG

一つ上の階層にある「history\固まっている口座の名前」フォルダを選択して、中のファイルをすべて消します。
MT4Trable3.PNG

そのあとMT4を再起動すると、価格データを再取得して表示しますので、バー数が少なくなりインジケータも含めて表示されます。あとは重いインジケータを終了させてからMT4を再起動すると通常通り使えるようになります。ヒストリデータの再構築が面倒な場合は、historyフォルダの中身を退避させてから消しましょう。
退避したファイルをMT4終了後元に戻します。



2015年6月10日水曜日

MT4プログラムの小ネタ GetTickCount()とuintの引き算とOS再起動

小ネタです。

MQL4 GetTickCount()の戻り値はuintです。

GetTickCountはミリ秒(※注意)をカウントしています。
49.7日を経過すると、オーバーフローして0に戻る仕様です。
※注意
 GetTickCountで戻される値は、「OS起動からのミリ秒数」です。GetTickCountのカウント値をリセットしたい場合は、OSの再起動が必要です。

オーバーフローしてしまうと差分が正しく取れない?と思われがちですが、ここでuintである意味が生きてきます。
たとえば、前回実行時間を取得する場合、次のようなコードを書きます。
uint beforeTime = GetTickCount();
while( !IsStopped() )
{
//なんか処理
uint currentTime = GetTickCount();
if( currentTime - beforeTime > 60 ) break;
beforeTime = currentTime;
}


たとえば、上記の例で、beforeTimeがオーバーフロー寸前の4294967295として、currentTimeが60だったとします。
単純に考えると60 - 4294967295は-4294967235で、このif文は正しく動作しないように見えます。
ところがuint同士の差分の場合、この結果は61となり、if文が正しく動作します。

単純化するために。4ビット整数値の減算で説明したいと思います。
まず、単純な例として15-1の演算です。15は二進数表現で1111、1は0001です。
1111
-0001
=1110

1110は14となります。

さて、では1-15の場合はどうでしょうか?
0001
-1111
=1110
実は同じように14になります。

0-1の場合、桁借が発生しますが、借りる桁が無い場合、仮想の桁から借りることができると思ってください。

まぁあれこれ書きましたがuint同士の減算の場合
currentTime - beforeTimeもbeforeTime-currentTimeも結果は変わらないということです。そのため、オーバーフローを気にすることなく処理が可能です。

2015.12.28 訂正 すみません。上記は嘘です・・・。順番が違うと結果は異なります。マイナスの値が発生する場合4294967295から引かれた値+1の値となります。

ここで重要なのは「uint」同士の減算ということです。先ほどのプログラムは下記のようにintで受けてもコンパイルは通りますが、オーバーフロー対策は全く行えなくなるので、注意が必要です。
int beforeTime = GetTickCount();
while( !IsStopped() )
{
//なんか処理
int currentTime = GetTickCount();
//正しく動作しない。
if( currentTime - beforeTime > 60 ) break;
beforeTime = currentTime;
}



2015年6月9日火曜日

MT4のEA稼働するには仮想サーバー(VPS)が必須です。その3 MT4設定

VPSの最終回です。Gewinn2のフォワードテスト環境構築のためVPSを契約して、OSの設定をしましたが、最後MT4の設定です。

RAID、UPS、エアコン、予備電源と安定稼働の仕組みが一通りそろっている環境のデータセンタで稼働しているVPSですが、レンタルの為、難点もあります。使用できるメモリが足りない事です。
自宅PCで裁量トレードで稼働しているようにインジケータたくさん、チャートの足数たくさんだと、メモリ不足に陥ります。
EA稼働の為に、MT4の設定を最少にしておき、使用メモリを節約することが大切です。

そのため、VPSで稼働するMT4は次の設定を行いメモリを節約します。
・表示する通貨ペアをEA稼働の為の最小限にします。
MT4Settings6.PNG
 不要な気配値を選択して右クリックメニューで「選択通貨ペアの非表示」を選び消していきます。
 Gewinn2のみ起動する場合はEURUSDのみ表示して後はすべて消して問題ありません。

・ツール→オプションウィンドウを開き不要な設定を取り除きます。
MT4Settings1.PNG
 音声設定の無効化
MT4Settings3.PNG
 ニュース配信の無効化
MT4Settings4.PNG
 ヒストリー内最大バー数/チャートの最大バー数をEA稼働な必要最低限に設定
 Gewinn2は2000で稼働します。
MT4Settings2.PNG

 上記設定を行った後、MT4を再起動します。

 再起動後、ターミナルウィンドウ上で、口座履歴で右クリックメニューを開き「全履歴」を選択してください。Gewinn2は過去の取引履歴からポジション数を調整する機能があり、この機能を有効にするためには全履歴表示が必要です。複利運用を行わない場合は必要ありません。
 MT4Settings5.PNG

 あとは、EAを稼働させる形となりますが、チャートは必要最小限、インジケータは表示しないようにしましょう。
・稼働するEAに必要な最低限のチャートのみ表示します。
・インジケータは表示しない。

 と、VPSの契約~設定まででした。

 EA稼働には、やはりVPSの契約が重要です。Gewinn2は、ポジションをとった際、ストップロスを入れますが、シグナルでの手じまいを基本としています。そのため、安定したMT4の稼働が必要となります。
 Gewinn2にかかわらず、EAを稼働させて利益を上げていく為には、コスト・運用・メンテナンス面からVPSでの稼働が必須と思われますので、皆様もぜひご検討ください。


2015年6月8日月曜日

MT4インジケータ ヒストリカルボラティリティ比率と東京時間レンジブレーク雑談

#2016/2/4 HVとHV比率をFX-ONにアップしました。
http://mt4program.blogspot.com/2016/02/mt4_4.html

5/11に公開した「東京時間をぶっ壊せ!MT4で時間レンジブレイク向けインジケータを作ってみた。」が、ここにきてアクセス数が伸びてきました。公開当初はあまりアクセス数が無かったのですが、EGOISTさんやMorning_Limitedさんが、特定時間を狙った取引で利益をだしているので、同じような考え方でEURUSDのヨーロッパ時間開始直後で、もうけられないかを見分けるため注目を集めているようです。
ちょっとだけ見た目を変更した後続の記事もありますので、そちらもご確認ください。
東京時間がもっとわかりやすくしてほしい。MT4レンジインジケータを改造してみた。

私の調査結果では、ここ半年ほどはレンジブレークで有効そうに見えるけど、それ以上だと怪しいという感じです。いっそ14時と15時の値動きだけに着目して16時の1時間勝負したほうが勝率あるかも?調査した結果よければ、そのうちEAで出すかもしれません。

さておき、インジケータをまた作ってみました。
ヒストリカルボラティリティです。
ヒストリカルボラティリティとは、前回Close値/今回Close値比の標準偏差値です。
値動きがどのくらいあるのか?というのを判断するらしいです。

本来ならルート20とかルート250とか掛けて、ある期間のボラティリティを出すための指標ですが、今回は短い期間のボラティリティと長い期間のボラティリティの割合をチャートにしてみました。裁量トレードの方はチャートを見ればすぐわかる!と思いますが、システム的に判定するために作ってみました。

HV.PNG

EUR/USDの1時間足のボラティリティ比率です。お・・・見事に法則性がある感じで波打ってますね!って当たり前です。日本時間に対してヨーロッパ時間のボラティリティの方が高いっていう事を改めてグラフにしただけでした^^;;;;

短期の足に採用すると押し目や逆張りのタイミング測定に使えるかもしれません。また通常取引が多い時間帯でボラティリティが下がるということは、何か重要指標の発表があるかもしれないということを値動きから判定できるかもしれません。逆もしかりです。ただ、これだけでは明らかに材料不足です。ほかのインジケータと合わせて使用する形になるかと思います。

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