Quantcast
Channel: とあるMetaTraderの備忘秘録
Viewing all 35 articles
Browse latest View live

EAで指標発表等を回避するには?

$
0
0

・・・と、どなたかに聞かれていたような気がするので方針だけ書いておきます。

1.ネット上で経済指標発表時刻一覧を公開しているサイトを探す。
2.定期的に自動取得して、EAに読み込む。

公開サイトとしては、
ForexFactoryhttp://www.forexfactory.com/ff_calendar_thisweek.xmlや、
DailyFXhttp://www.dailyfx.com/files/Calendar-10-21-2012.csv(週単位でファイル名が変わります)
が知られています。

EAからデータ取得するとしたら、WinInet.mqh のようなライブラリを使うと

↑こんな感じで、↓のCSVデータが取得できます。

DailyFXのデータはCSVなので、MQL4では簡単に読めます。(ただし、文字コードUnicodeなので一部文字化けします。)
DailyFXの指標を表示させるインジケータがここにあるので、そのあたりを参考にすればよいと思います。


一方、ForexFactory のデータは、FFCal.mq4 が対応していて、EA から直接 iCustom 経由で直前直後にどのインパクトの指標発表があるのかを1つだけ取得できます。

↑EAでの書き方はこれだけです。一つのMT4内で、複数のEAで使う場合は、iCustom よりもグローバル環境変数を用いて情報共有させた方が良いかもしれません。



問題は、、、FFCal.mq4 自体があまり改良されていない点で、例えば、「SetIndexStyle(1, DRAW_NONE);//←本来は 2 」みたいなバグも相変わらず放置されています。
一定時間前に鳴るように Alert の設定をしても、希なタイミングで鳴らないこともあります。EAから呼ばれる際に、毎回、XMLファイルを読み取って、構文解析する処理も非効率です。(一度読んだ結果をメモリ上に保持しておけば良いはずなのに...)



指標インジケータ自体は、凝ったものがいくつかあるので作り込む気はないのですが、最低限のカスタマイズをしたものをこちらに用意しました。

・縦ライン表示機能の削除
・Alertは少し遅れても確実に鳴るように
・3個以上の指標時刻を表示可能に
XMLのデータは解析結果を保持
・既知の指標名は日本語表示可能に

などの変更を行っています。指標ボットを作りたい人向けの下地になれば良いかなと思ってます。

↑二段表示

↑日本語表示(!)


日本語表示は、同梱のCSVファイルによる置換をしているだけなので、適宜、正しい訳語に修正してお使いください。


00-EcoIndi用経済指標ファイルをForexFactoryやDailyFXから自動取得する。

$
0
0

00-EcoIndiは、00(ダブルオー)先生の作られた、経済指標時刻を MT4 のチャート上に表示するインジケータです。
これは、ローカルにある EcoIndi.txt を読み取ってチャートに表示させる為、常に最新の EcoIndi.txt が必要なのですが、現在は更新が滞っているようです。なので、ForexFactoryやDailyFXから定期的に取得して、保存するインジケータをこちらに用意しました。


GetFFCalData.ex4 をチャートに貼っておけば、ForexFactoryのデータを取得します。
files フォルダに FFCalTransJP.csvを置いておけば、既知の指標は日本語で表示されます。
GetDailyFXData.ex4 は、DailyFXから取得しますが、日本語未対応です。

↑平日であれば、00-EcoIndi に設定すべき serverGMT の値がわかります。


↑00-EcoIndi の xTitleOffset = 50; yStep = 20; 辺りで適宜調整すれば見やすくなります。

MetaTrader4 から別のエディタを選択して起動する。

$
0
0

Notepad++ de MQL4の記事を読んで、『A better editor for MQL4 using SciTE!』を導入してみたら、かなり便利だった...のですが、微妙に欠点があって、やはり純正 MetaEditor も手放せなかったりします。
そこで、MetaTrader4 から、両方のエディタを選んで起動できるようにしてみました。
動作イメージは・・・

↑MT4から起動すると
↓選択ダイアログがでて、「はい」 ならMetaEditor 、「いいえ」 なら SciTE が起動します。


手順は以下の通りです。
(1) MetaEditor.exe -> _MetaEditor.exe にリネームしておく。
(2) 以下の6行の MetaEditor.ahkを作成し、右クリ&コンパイルして MetaEditor.exe を作成して配置する。(要 AutoHotkey)

SetWorkingDir %A_ScriptDir%
MsgBox, 4,, Open MetaEditor ?
IfMsgBox Yes
    Run , %A_ScriptDir%\\_MetaEditor.exe "%1%"
else
    Run , "C:\\MT4\\scite-mql-1.4.2\\SciTE.exe""%1%"

↑SciTE.exeのパスは適宜書き換えてください。

注意1)MetaTrader がアップデートされると、MetaEditor.exe が上書きされて元に戻ります。その場合は、やり直してください。
注意2)既に、MetaEditor.exe が起動している場合は、そちらがアクティブになるだけなので、SciTEは起動しません。





『A better editor for MQL4 using SciTE!』は、そのままでは日本語設定になっていないのと、キーワードの色設定が MetaEditor と異なっています。
このセットを解凍して、SciTE.exe のあるフォルダに上書きすると簡単に上記設定に変更できます。
メニューが日本語では困る人は、locale.properties ファイルを削除してください。


フォントを変えたい場合は、オプションから
SciTEGlobal.properties (共有特性設定)ファイルの下記を変更してください。
font.base=font:MS ゴシック,size:10


ツールの Code Beatifierでソース整形する際のオプションを変更する場合は、
Commands.properties ファイルの下記を変更してください。
command.14.*="$(SciteDefaultHome)\\additions\\astyle\\astyle.exe" -s2A3Dp "$(FileNameExt)"


コンパイラのパスを変えたい場合は、
langs/mql.properties ファイルの下記を変更してください。
metalang=$(SciteDefaultHome)\other\metalang.exe


#include しているファイルがある場合、metalang.exeのパスを本来のパスに変えるか、
scite-mql-1.4.2\other\experts\include
に必要なファイルを置くしかないようです。


デフォルトの補完機能では、MQL4のすべてのキーワードが補完候補には出てきません。不便であれば、
api\mql.apiに追記しておくと改善します。とりあえず、これで上書きして、不要な単語を消すと良いかも?

ヒストグラムを描く

$
0
0

統計学の基本は、データを観察することにあるのであ〜る。

‥‥という訳で、ヒストグラムを表示させるインジケータをこちらに作りました。
階級幅の自動決定には、フリードマン=ダイアコニスの選択を採用しています。(スタージェスの公式はサンプル数が多いと当てはまらないらしい..
階級幅を自分で指定したい場合は、ClassWidth で設定できます。
チャートをかなり縮小して表示させている人向けに、HistWidth で、ヒストグラム一本の柱の幅を何本の Bar で表示させるか?も指定できるようにしました。
平均や分散といった、基本統計量を計算する機能はありません。(平均よりも中央値、分散よりも Q3-Q1幅の方が好きなので...。必要な人は自分で改造してくださいっ



↑過去何本目から何本分のデータを対象とするか?を指定すれば、異なる期間のデータを比較できます。
二つのグラフで自動計算した階級幅が異なる場合は直接指定してください。
グラフの右側を揃えるために、FixedMinimum を同一の値(0)に設定してください。
現在の値は、赤塗りされた位置で分かります。


上のグラフは、EURUSD の週足で、直近の過去1年(下段)と、その前の一年(上段)の高値-安値 の幅の分布を示しています。
中央値でみると、120pips も振れ幅が減っていることがわかります。。。
これでは、ボラティリティの低下に嘆くトレーダーが増えているのも仕方ないですね。。^^;

ZigZag指標に相場の周期性を夢見る・・

$
0
0

時系列データに周期性があるのかどうか?を調べる方法としては、コレログラム、フーリエ変換、ARモデル・・・等を使うのが一般的のようです。ただ、投機市場に見られる周期性は、私の想像では、連続する2〜3つの山が近い周期になるだけ(3〜4つ目の山で周期が崩れる)なので、長期のデータから固定長の周期性を見つけ出すのは困難なのでは?と思ってたりします。
(一時的に周期性が存在しても、投機筋が他者を出し抜く過程で周期性が失われてしまう・・・



なので、相場に周期性は存在しないという前提でいろいろ考えているのですが、せっかく、ヒストグラム表示インジケータを作ったので、今日はZigZagインジケータの周期分布を調べてみます。
ZigZag.mq4 を改造し、山の頂点間の期間データ(top.csv)、谷底間の期間データ(btm.csv)、一辺の期間データ(full.csv)を保存するようにしたものが、ZigZag_output.mq4です。
csvデータをそのまま表示させるのが、CSVView.mq4 です。(一行に一個しか数字が入っていないので、CSVとは言えないのはさておき...
Hist-NF-Meter.mq4 は、top.csvファイルを読み込んでヒストグラム表示します。

↑山頂と山頂の期間(Top to Top) のデータを生で見るとランダムに見えますが(2段目)、ヒストグラムでは20〜25期間にピークがあることが分かります。



ZigZagインジケータを眺めていると、そこに周期性らしきものを感じるのは、錯覚ではなく、実際に特定の周期付近での頻度が多いからだったのですね。。。











しかし、この知見が、実際に役に立つものであるかどうか?は、ランダム・ウォークのチャートに適用して比較する必要があります。
以前に作成したランダムウォークチャート作成スクリプトで作成したチャートに当てはめてみたのが下図です。


2回試しましたが、見事に周期の偏よったピークが見つかります。元データには周期性が存在しないのにも関わらず(!)。


これが、「ユール・スルツキー効果」と呼ばれるもので、

元の時系列データ → ほにゃらら変換 → 加工済みデータ

ほにゃらら変換の変換式に周期性を作り出す要素が含まれていると、変換後の加工済みデータにはその周期性が現れてしまうそうです。
この事実をもって、ZigZagや、同様にみせかけの周期性を生み出す移動平均が全く役に立たないと考えるのは早計ですが、加工済データの解釈には注意すべきでしょう。

直近の値幅とスプレッドとの比が大きな銘柄を探す。

$
0
0

以前は、メジャーなドルストレートだけ見てればいいじゃん!スプレッドも小さいし・・・。
なんて思っていたのだけれど、CHFがEURと固定的相場になって、円が政治的にも経済的にも迷走し始め、ドルストレートのボラティリティが残念なことになってくると、マイナー通貨を含むユーロクロスや、今まで見ていなかった銘柄にも注目せざるを得ないと思ってます。
CFDも含めて120銘柄もある業者では、1銘柄ずつ見てゆくのも面倒なので、直近の値幅とスプレッドの比が大きな銘柄を見つけやすくなるようなインジケータをこちらに作成しました。

気配値表示しているすべての銘柄に対して、直近60本の中の最高値-最安値 をスプレッドで割って、スプレッドに対する変動倍率をランキング表示させています。


起動時は、全銘柄の2048本分のヒストリカルデータを取得しに行ってしまうので、若干、重くなります。



フォントサイズ等を調整すれば小さく表示できます。
変動するスプレッドの代表値をどう採るか?や、値幅の算出方法も検討の余地がありますが、自作派の方の参考になればと思います。
(ブローカーによっては異常にスプレッドを狭く見せている場合もあるので、モニョモニョ・・


個人的には、

・OBJ_LABEL でテキストを複数行 縦に並べるときは、フォントサイズの1.72倍だけ下にずらせば良い
 (横方向は、適当なフォントサイズでデザインして、フォントサイズに比例してずらす。厳密な対応は無理。)


・OBJ_LABEL の重なりの前後関係は、オブジェクト名で決まる(=命名法を工夫すると背景用に文字を置ける)


・文字部分に背景を付けるときは、Webdingsフォントの g(=■) で塗りつぶすのが良い
 (本記事の上図が背景有り、下図が背景無しです。背景があると読みやすくなります。)

という知見が得られたので十分です。。

MT4のチャート上に画像を表示する(?)

$
0
0


前回得た知識は、Webdings フォントの g が四角であるというコトでした。
この四角を最小化して隙間なく埋めることができれば、、、チャート上に画像を表示することが出来るかも知れません。
・・・という訳で早速試してみました。


下準備として、JPEG画像をPPM (ASCII P3)形式に変換しておきます。
画像がRGB値のテキストデータになるので、MQL4のスクリプトでも簡単に扱えます。
変換ソフトには、IrfanView32を使います。








↑画像を文字で再現するのは負荷が高いので、縮小しておきます。



↑PCのスペックによりますが、100x100 以下が無難です。

↑リサイズ後にSaveを選び・・・



PPM形式を指定し、オプションで Ascii encoding を選択します。



↑保存したファイルをテキストエディタで開くと、テキストとして読めることがわかります。
保存したPPMファイルは、experts\files 以下に置きます。


こちらから、画像表示テスト用のスクリプト( MADPainter.mq4 ) を入手し、experts\scripts 以下に置きます。




スクリプトをチャートにドロップし、PPMファイル名を設定します。
フォントサイズは、3以下を指定しても、チャート上では 4に切り上がります。
スケールは 1〜6 辺りを指定してください。




↑画像の読み取りに成功すると、ファイル名と画像サイズとピクセル数が表示されます。





そして・・・






↑チャート上に画像が表示されました(!)





↑くみん先輩だけでは寂しいので、六花ちゃんもこのとおり♪





↑とある有名な人物の写真で試すとこんな感じです。笑。



↑Scale = 7 にすると1ドット=1文字ずつ見ることができます。
四角いテキストによるドット打ちでここまで自然な画像ができるとは意外でした。



・・・と同時に、数十万オブジェクトの表示で操作不能になるという、、MT4の限界を痛感しました。
念のため書いておきますが、トレード中の MT4 でコレを試したらダメですよ。^^;
素数が多いと、貧弱なPCでは MT4 が長時間固まります。
スペック的に耐えられないと思ったら、すぐにチャートを閉じましょう。



そんじゃーね。☆彡

正確にチャートを同期させる00-TimeSync_v101.mq4を script 化する。

$
0
0

ジム・ジャロース
こんにちは。

00-timesync_v101_modbyfai.mq4ですが、たまったタスクが悪さをして不可解な挙動が多いため自分的には使えない感じですので、scriptにしてドラックアンドドロップした時に1度だけ同期を実行するように改造しようと試みたのですが、APIの部分が理解できず、ペンディング状態です。
もし、ご無理でなければ、scriptを作っていただけないでしょうか。n(_ _)n
興味のないネタでしたら華麗にスルーしていただいて結構ですが。(;^_^A

これは・・・確かにAPIをよく知らないと出来ないので、こちらに用意しました。


・インジケータとスクリプトでは、実行時のスレッドが異なる。
インジケータはウィンドウを表示しているスレッドで動いているので、SetFocus()が可能だが、スクリプトは別のスレッドなので、SetFocus()できず、代わりに SetForegroundWindow()を使う必要がある。(SetForegroundWindowでも、見た目はアクティブにならないが、キーイベントだけは送れるようになる。)


スクリプトを実行するウィンドウは必ずしもアクティブとは限らない。
ナビゲーターウィンドウからスクリプトを非アクティブなウィンドウにドロップすることもあり得るので、GetTopWindow()でアクティブなウィンドウを取得してから、GetWindow(hWnd,2)で次のウィンドウを取得する必要がある。


・・・という点に注意して改造する必要がありました。
実行時の確認ダイアログが煩わしい人は、
#property show_inputs
の一行を削除してください。



ちなみに、AutoHotkeyの Accela.ahkを使用していると正常動作しません。(数字入力が被ってしまうため..)

1::
   if CheckFN()==0
     PostMessage, 0x111,33137,0  ;Period M1
   else
     Send 1
  return

↑Accela.ahkで、1から9の数字にショートカットを割り当てている部分をすべて削除するか、

#1::
   if CheckFN()==0
     PostMessage, 0x111,33137,0  ;Period M1
   else
     Send 1
  return

↑ # を加えて「Win + 1」に割り当てる等で回避してください。


拡大したローソクを描く。

$
0
0

fesbix 2012/11/30 16:10
直近何本かを指定してローソク足の幅を広くすることは可能でしょうか。


幅を小さくして広い範囲での趨勢を見、直近は幅を大きくして
タイミングを計る、というふうに使いたいのですが。


う〜ん、こんな感じ?

ステータスバーの価格を拡大表示する。

$
0
0

謹みて 新年を賀し 申し上げます。<(_ _)>


735 :Trader@Live!:2013/01/12(土) 17:54:40.57 id:YhLpHkcT
チャートの各ローソク足マウスポインタ当てると
始値終値高値安値
が表示されると思うんですけど
この数値をチャートの四隅あたりに表示できるインジってありませんか?
何かシンプルなインジ程全然見つからなくて

・・・という訳で、早速作ってみました。

http://ux.getuploader.com/fai_fx/download/338/MT4StatusView.zip
AutoHotkeyによるGUIアプリで、ステータスバーの内容を200ミリ秒間隔で読み取って表示させているだけです。



ウィンドウ枠も邪魔かなと、消してみたモノが下記です。

http://ux.getuploader.com/fai_fx/download/339/MT4StatusView1.1.zip
タイトルバー用のウィンドウと、枠なしの表示ウィンドウを2つ並べています。

OANDAのHeatmap を真似てみた。

$
0
0

OANDAのCurrency Strength Heatmap Tableに似せたインジケータ(HeatMapModoki)を作ってみました。
Exoticsや、Commoditiesは無しで8通貨のみを縦に一列に並べるだけのものです。
計算式は、USDを基準として、デフォルトで現在から60分前(BeforeMin = 60)の価格からの変化率%で並べ替えているだけです。
色分けは、白が中央となるイメージです。

↑それぞれ5,60,1440分前に設定して、横に3つ並べています。
位置調整は、ShiftX,ShiftY で行えます。




↑文字が黄色の時は、その通貨のデータが足りない可能性があります。
通常は、1分足のデータを元に計算しますが、長期の変化率を見る時は長い時間足のデータを参照しますので、ログ等確認してください。

複数のチャートの通貨ペアを一括変更する。

$
0
0

VPS上のEAを不正コピーされる事案が起きたそうです。詳しくは、「ずさんな管理のレンタルVPSサーバー(実話)」をどうぞ。





さて、表題のツールは、例えば、下図のように USDCHF の時間足の異なる複数のチャートを開いている状態から、全てのチャートをGBPUSDに変更したい場合に役立つスクリプトです。ある人のためだけに作ったものですが、欲しい人のためにこちらに置いておきます。


使い方は、まず、気配値ウィンドウから GBPUSDをドロップして1枚のチャードだけ GBPUSD に変更します。

その後、GBPUSD のチャートにスクリプトをドロップすると・・・


↓全てのチャートが GBPUSD に変わります。

仕組みは・・・

1. チャートウィンドウを列挙して、順にアクティブ化
2. キーナビゲーションで、シンボル名をキー入力
3. 稀に失敗するので、何度か繰り返す

みたいなことをしているだけです。
スクリプト内の Sleep(1) を Sleep(5000) などに変えると動作をゆっくり確認できます。
シンボル名に特殊な文字が入っていて動かない場合は、カスタマイズが必要です。(面倒なので、、不完全)

FxProの限月変更を簡単にする(?)

$
0
0

FxProの先物CFDは、銘柄名が定期的に変わります。
http://www.fxpro.com/trading/cfd/mt4/futures/13

銘柄が1つだけであれば、チャートの変更も大した手間ではないのですが、複数あるとちょっと面倒です。。


そこで、前回の一括変更ツールを元に限月変更ツールを作ってみました。

限月が代わり、Bidが提供されなくなった銘柄は、Waiting for update のままになります。
FutureUpdateスクリプトを適当なチャートにドロップすると・・・


↓それっぽい銘柄に自動的に変わります。

変更ルールは

1. チャートを列挙し、銘柄名を取得する。
2. その銘柄の Bid がゼロならば、変更対象とする。
3. その銘柄の末尾2文字を削除して、先頭部分が一致する銘柄を探す。
4. 一致した銘柄が見つかれば、その銘柄に変更する。

といった感じです。


次の銘柄をどのように探すか、一括で変えるべきか、指定したチャートのみ変えるべきか、悩みどころはありますが、不都合を感じたらその都度改良すれば良いかなと思ってます。

バックテスト結果チャートのラインの色を一括変更する。

$
0
0

923 名前:Trader@Live![sage] 投稿日:2013/01/24(木) 10:02:46.52
バックテストした時に新規と決済のところを結ぶTrendLineが表示されます。
この色を全部変更するにはどうしたらいいでしょう。


buyの時の線が背景にまぎれてみずらいので、もっと明るい色に変えたいのですが

こちらに作ってみました。(大昔にも作った記憶があるような無いような・・・

↑バックテスト後に、Visual Mode や Open chart で見るチャートは、確かに、青の点線は見づらいです。


↓LineColorChanger[sc].mq4をチャートにドロップして色を変えてみると・・・




↓たぶん、ローソク足の色も変えたほうが良いと思います・・。

ローソク足の配色は、detault.tplや、tester.tpl、offline.tplという名称でテンプレートとして保存しておくのが便利です。

DDEの憂鬱

$
0
0

906 名前:Trader@Live![sage] 投稿日:2013/01/23(水) 09:19:28.31
MT4を起動してから
DDE-Sample.xlsを開いてもリアルタイムレートがエクセルに表示されません。
どうしたらエクセルにレートを表示できますでしょうか?


DDEサーバーを有効にするにチェックをいれてます。
エクセルは2007です。
エクセルの リンクの編集ー値の更新を押してもだめでした・・

この問題は・・・難しいですね。
MT4のDDE経由でExcelに情報を渡せません」でも解決策は無いですし、マイクロソフトの「DDE links crash Excel 2010 on Windows 7 64bits」のいくつかの回避案も万能ではないようです。
私の環境でも、Excelが固まる現象を確認できたのですが、固まるようになると、何をやっても直らず、逆に動くようになると常に動く・・・ようで、原因追求も対策もままらない状況です。


調べて集まった情報をまとめると、、

新しいExcelでは、 MT4 を 'MT4'と囲む必要がある。
=MT4|BID!EURUSD

='MT4'|BID!EURUSD


銘柄に # が含まれる場合は、銘柄も囲む。
='MT4'|BID!'#CH3'

Google Chromeや soffice.exe を動かしているとダメ。
アンインストールするか、soffice.exeを管理者権限で実行すると治った。

↑私の環境では、DDEが動作するときは、Chrome動作中でも問題無く動きました。

Excelをアンインストールし、再インストールすると治る。

↑私の環境では、治らなかったこともあります。

以下のVBAマクロをExcel上で動かすと治る(?)。
Sub KillDDE()
Dim i, ChannelNumber As Integer
For i = 1 To 1000
Application.DDETerminate (i) ' Closes all DDE links whose channels might be open
Next i
End Sub

↑※私の環境では、治ったことは無いです。。

MT4の代わりにDDEの送信テスト用に使えるツール。
http://www.codematic.net/excel-development/excel-dev-general/excel-dde-links.htmただのテストツール
https://www.prorealtime.com/en/help-manual/dde-data-export ProRealTime DDE(有料)
DDESPYは動作のモニタ用。


今のところ、私の環境では下記の手順で2回、復旧に成功していますので、お困りの人は試してみてください。

1.ウィンドウズを再起動します。

2.MT4 を1つだけ起動します。
他のアプリは起動してはいけません。絶対に・・・

3.Excelを起動します。

4. ='MT4'|BID!EURUSD と数式を入れてみます。 MT4 の前後を 'で囲んでください。

Viewing all 35 articles
Browse latest View live