FXメタトレーダー実践プログラミング
50種類以上の通貨ペア、各種CFD(金、株など)対応
お久しぶりです。
年末からやたら忙しい状態がつづいていて、部署が変わったから楽になるかと思ったら、もっとひどくなってしまいました。
そんな訳で、更新もままならない状況です。
楽しみにしている方には、申し訳ないと思います。
出来る範囲で、ゆっくりとやっていきたいので期待せずにまっていてください。
ちょっと前に見つけて、今日買った本について
「FXメタトレーダー実践プログラミング」という本です。
|
FXメタトレーダー実践プログラミング 価格:2,940円(税込、送料別) |
前作の「FXメタトレーダー入門」の続編に当たるものです。
|
FXメタトレーダー入門 価格:2,940円(税込、送料別) |
FXメタトレーダー実践プログラミングは、結構いいですよ。
前作は、メタトレーダーの使い方とプログラムの触りでしたが、今回のはやりたい事をだいたい実現できるだけの情報が載っています。
目次はこんな感じ。
- 第1章 メタトレーダーの構成を知る(メタトレーダーを使いこなす前に/メタトレーダーとMQL4プログラミング)
- 第2章 カスタム指標プログラムで独自のテクニカル分析(カスタム指標プログラムの基本/組み込みテクニカル指標関数の使い方/オブジェクトを利用したカスタム指標/テクニカル指標のデータをファイルに出力)
- 第3章 トレード関数で柔軟な注文を実現(トレード関数を使いこなす/トレード時のエラーチェック/トレード関数のライブラリー化/エキスパートプログラムによる注文)
- 第4章 エキスパートプログラムでシステムトレード自由自在(売買システムの基本構成/仕掛けのパターン/手仕舞いのパターン/そのほかのシステムのパターン/ストラテジーテスターでの検証)
- 第5章 MQL4をさらに使いこなしたい人のために(データの型/プリプロセッサ命令/変数の種類/配列の種類/数学関数/オブジェクトの表示/ファイルの入出力/文字列に関する関数/日時に関する関数/マーケット情報/口座情報/関数のライブラリー化)
- 付録A MQL4関数一覧
- 付録B 参考図書
いい感じで知りたい情報が分かります。
多少なり、プログラムの経験があればそれなりのプログラムが組めるようになります。
興味のある方は、本屋で立ち読みしてみてください。
タグ
2010年07月08日
コメント&トラックバック(0)
| トラックバックURL
|
オーダーやオーダー変更時に失敗する場合
50種類以上の通貨ペア、各種CFD(金、株など)対応
EAでのトレイルストップがうまくいかない質問を受けたので、たぶんこれかな?ってのを回答しておきます。
わたしも初期はこれで悩んだので。。。
OrderSendやOrderModifyを行うとエラーになることがあると思います。
こんなとき何が悪いかちょっと確認してほしいことがあります。
1.注文の方向でAskとBidが間違っていないか。
2.StoplossとTakeprofitの幅
の2点です。
1番は、結構よくやります。
2番は、ストップレベルポイントというのがあって、現在のポイントからいくつか離さないといけないというルールがあります。
だいたい、20pipsぐらいだと思います。
この値は、会社などで違ってきます。
調べる方法は、
MarketInfo(Symbol(),MODE_STOPLEVEL);
を使います。
インジケーターでもEAでもいいので、適当なのを作って以下のソースを書いてみてください。
Comment(”ストップレベル:”,MarketInfo(Symbol(),MODE_STOPLEVEL));
これで、最低離さなければいけない値が表示されます。
もう一つ気をつけなければいけないのは、スリップです。
注文するときにスリップページをいくつにするか指定していますよね。
3pipsを指定していたら、20+3で23離す必要があります。
何でもいいけど、20pipsは大きいですよね。
だから、私がEAを作るときは、LossとTakeは保険(通信障害などの)でかける程度にして、実際のクローズはEAにやらせるようにしています。
これだと、1pipsでも狙えます。
あまり細かいとスリップが大きいとダメですがね。
参考にしてみてください。
タグ
2009年07月23日
コメント&トラックバック(1)
| トラックバックURL
|
iADXって?
50種類以上の通貨ペア、各種CFD(金、株など)対応
質問にあったので、iADXについて。
まず、どこの資料を参考にするか。
私の場合は、
を愛用しています。
無料で利用できるMQL4の日本語リファレンスマニュアルとしては、一番便利だと思います。
MT4関係で調べ物をするときに一番利用しているサイトと言っても過言ではありません。
すべての関数を隅々までのぞいてみると、気がつかなかったことが見えてくると思いますよ。
分からない単語が出てきたら、検索してみてください。
きっとわかりやすい説明のサイトがあると思います。
で、本題のiADX。
double iADX( string symbol, int timeframe, int period, int applied_price, int mode, int shift)
symbol – 計算したい通貨名。NULLを指定すると現在の通貨。
timeframe – 時間枠。時間枠列挙型のどれか。0は現在の時間枠。
period – 計算で使用する足の数
applied_price – 適用価格。これは価格定数のどれかをとる。
mode – インジケータの線指定。これはインジケータラインの値をとる。
shift – 現在の足から何本前の値を出したいか
適用価格
PRICE_CLOSE 終値
PRICE_OPEN 始値
PRICE_HIGH 高値
PRICE_LOW 安値
PRICE_MEDIAN 中央値、(high + low)/2
PRICE_TYPICAL 代表値、(high + low + close)/3
PRICE_WEIGHTED 重み付け値、(high + low + close + close)/4
インジケータの線指定
MODE_MAIN インジケータの基本線
MODE_PLUSDI +DIインジケータ線
MODE_MINUSDI -DIインジケータ線
こんな感じの関数仕様です。
質問をくださった方は、MODEの意味が分からないといっていました。
実はこの関数、ADXといいながら、DMIも表示できてしまいます。
ここが分かりにくかったところなんだと思います。
でも、普通は一緒に使うので利用しやすいようにとの配慮でしょう。
ADX(Average Directional Movement Index):トレンドの強さを測定する指標
DMI(Directional Movement Index):一般的に方向性指数といわれる
ADXは、MODE_MAIN。
DMIは、MODE_PLUSDI、MODE_MINUSDI
で表します。
簡単に説明すると、ADXでトレンドの向きを確かめて、DMIで強さを見ます。
いろいろな方法があるので、詳しくは書きませんが一度動きを確かめてみるとおもしろいかもしれませんね。
タグ
2009年07月17日
コメント&トラックバック(3)
| トラックバックURL
|
カテゴリ: MQL4 メタトレーダープログラミング メタトレーダー入門
メタトレーダーに日本語を表示してみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
今回は、メタトレーダーのプログラムで日本語を利用できるようにしてみます。
実は、日本語表示はできないと思っていました。。。
あまり困らなかったので、調べようとも思わなかったのが原因です。
やっぱり、こうしたことは興味がないとやりませんね。
重要指標を表示するインジケータを作ってみるにコメントを下さった犬養さんに感謝です。
本題の日本語を表示してみる方法です。
メニューとかの表示は、できていますよね。
今回のは、プログラムのコードの中に日本語を利用できるようにして、チャート上にも日本語を表示します。
MetaEditorを開いてください。
メニューの
「Tool」-「Options…」を押してください。
「Font」タブを選択すると以下のような画面が表示されます。
ここで、日本語のフォントを選択し、Scriptの日本語を選択してください。
2箇所あるので間違えないでください。
「OK」ボタンを押してください。
これで、全部終了です。
むちゃくちゃ簡単です。
これで、ソース内のコメントを日本語化したり、チャートに表示させたりすることができます。
サンプルで、インジケータを作って見ました。
単純にコメントを表示するだけのものです。
こんな感じですね。
Comment(”日本語を表示してみる”);
今まで、日本語が化けていたのが表示できることが確認できると思います。
これをコンパイルして、チャートに貼り付けてみます。
こんな感じです。
赤丸のところに「日本語を表示してみる」が表示されていることが確認できると思います。
やっぱり、日本語が表示できると見やすいですね。
プログラムを組むのにも日本語コメントを入れられるだけで作業効率がアップすると思います。
がんばってみてください。
タグ
2009年07月10日
コメント&トラックバック(4)
| トラックバックURL
|
カテゴリ: MQL4 メタトレーダープログラミング メタトレーダー入門
Excel用にデータを出力してみる2
50種類以上の通貨ペア、各種CFD(金、株など)対応
前回に引き続き、エクセルを使っていろいろやってみたいと思います。
今回は、DDEというアプリケーション間通信の機能を利用します。
DDEというのは、かなり古い規格で今はほとんど利用されません。
最近の.NETではサポートされていないほどの企画です。
ですが、なぜかMT4ではDDEのサーバー機能を持っていて、ExcelはDDEのクライアント機能を実装しています。
ということで、通信できてしまいます。
やり方も簡単です。
まず、メタトレーダーの設定です。
メニューの「ツール」-「オプション」でオプションを開きます。
「DDEサーバーを有効にする」にチェックを入れて、「OK」を押します。
これだけです。
Excel側は、サンプルがあるのでそれを使ってみましょう。
インストールフォルダ\MetaTrader
に
DDE-Sample.xls
があるので、開いて見ましょう。
開くと
こんな感じのメッセージが表示されるので、「更新する」を押します。
こんな感じで、最新の状況がリアルタイムに表示されます。
売値は、MT4|BID!USDCHF
買値は、MT4|ASK!USDCHF
高値は、MT4|HIGH!USDCHF
安値は、MT4|LOW!USDCHF
時間は、MT4|TIME!USDCHF
時間・売値・買値は、MT4|QUOTE!USDCHF
を表示したいセルに「=MT4|QUOTE!USDCHF」と書けば、利用できます。
通貨ペアを変更したいときは、USDCHFの部分を変更するだけです。
これで、いろいろできると思います。
タグ
2009年07月09日
コメント&トラックバック(2)
| トラックバックURL
|
カテゴリ: メタトレーダープログラミング メタトレーダー入門
Excel用にデータを出力してみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
どうも、エクセルを使っていろいろやっている方が多いみたいなので、ちょっとしたテクニックを。
MT4では、EA用に過去の履歴データを取得できます。
そのデータを使って、バックテストをしたりします。
でも、その履歴データをExcelで利用できたら便利だと思いませんか?
今回は、そんな方法です。
まず、履歴データを取得する方法です。
メニューの「ツール」-「History Center」でHistory Centerを呼び出すか、F2を押してください。
こんな感じの画面が表示されます。
次に、「Download」ボタンを押します。
こんな画面が表示されるので、「OK」を押します。
ダウンロードが始まります。
しばらくすると終了するので、通貨をダブルクリックすると時間が展開されます。
ダウンロードしたい時間を選択して、「エクスポート」ボタンを押します。
保存先を聞かれるので、保存したいところを選択して保存します。
エクセルで表示すると
こんな感じですね。
あとは、グラフにしても計算にしても好きなことができます。
一応、項目の順番は、
日付、時間、始値、高値、安値、終値、出来高
の順番です。
次は、DDEというのを使ってみたいと思います。
タグ
2009年07月08日
コメント&トラックバック(0)
| トラックバックURL
|
カテゴリ: メタトレーダープログラミング メタトレーダー入門
重要指標を表示するインジケータを作ってみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
作成するといってもかなり難しいので、慣れてきてから応用してください。
いつもなら関数の説明などもしていますが、今回は省きます。
ダウンロードは、ここから。
ImportantNews 重要指標を表示するインジケータ
今回は、WindowsのAPIを利用してインターネット経由で重要指標を取得。
それを解析して、インジケータとして画面にプロットします。
重要指標の入手元は、
DailyFX
http://www.dailyfx.com/
で、ここはcsv形式で重要指標を入手できます。
こんな感じでcsvを入手できます。
http://www.dailyfx.com/calendar/Dailyfx_Global_Economic_Calendar.csv?direction=none&collector=allInFolderDateDesc&view=week&timezone=GMT
http://www.dailyfx.com/calendar/cal.csv?sort=dateDesc&timezone=¤cy=|&importance=|
MT4は、英語しか表示できないので(日本は表示可能です)英語のサイトのほうが都合がいいのとcsv形式でリアルタイムに入手できるので解析しやすいのが利点です。
csvファイルを入手して読み込ませる方法もありますが、せっかくなのでインターネットから直接入手します。
MT4には、外部DLLを利用する機能があるので、Windows標準のDLL(wininet.dll)を利用して、インターネットのアクセスを可能にします。
※外部DLLの利用はデフォルトなしになっているので、インジケータ組み込み時にありにする必要があります。
↑赤丸のところ
ソースのはじめの方に
#import “使いたいDLL”
使いたい関数
#import
という宣言があると思います。
ここで、インターネット接続関係の関数を利用できるようにします。
・インターネット接続確認
InternetAttemptConnect()
・インターネット接続
InternetOpenA()
・URLオープン
InternetOpenUrlA()
・インターネット読み込み
InternetReadFile()
・インターネットクローズ
InternetCloseHandle()
オリジナルで作成している関数は、
ReadHttp()
StrToSplitArray()
の2つあります。
ReadHttp()は、インターネットに接続し、内容を文字列として読み込みます。
StrToSplitArray()は、文字列を区切り文字で分割して配列に格納します。
今回は、DailyFXへインターネット経由でアクセスして、csvファイルを取得していますから、ReadHttp()を使ってアクセスした結果がcsvファイルの内容で、戻り値にstringとしてメモリ上に展開されます。
csvファイルを取得してもらうと分かりますが、改行など無駄な部分もたくさんあるので、start()の中でStrToSplitArray()を利用して、改行を区切り文字として行データを配列へ格納、行データを「,」で分割して各項目データとして取得しています。
start()で行っていることは、
1.15分ごとの更新
2.表示データの削除
3.csvデータ(重要指標)の取得
4.データの分割
5.年月日など表示用に適した形への変換
6.タイムゾーンの一致
7.データの表示
今回のタイムゾーンは、デフォルト日本時間を採用しています。
server_timezone
show_timezone
で設定しています。
サーバ時間と表示時間を分けていますが、通常は同じでかまわないでしょう。
自分の環境に合わせてください。
データ表示で書かれている文字ですが、今の状態の上のほうから書き始めていますので、スクロールなどすると消えてしまいます。
次の更新で復活しますので、その辺は我慢してください。
デフォルトで取得している重要指標はすべてです。
URLの問い合わせで
&importanceFilter=Medium|Low|
&importance=Medium|Low|
などを追加して、Highのみにすることも可能です。
また、通貨ペアのフィルターも可能です。
¤cyFilter=GBP|CHF|CAD|AUD|NZD|
¤cy=GBP|CHF|CAD|AUD|NZD|
今回は、ちょっと難しいので少しずつ理解して行ってください。
慣れてきてから、応用するのもありだと思います。
タグ
2009年06月30日
コメント&トラックバック(10)
| トラックバックURL
|
カテゴリ: MQL4 インジケータ メタトレーダープログラミング メタトレーダー入門
FX自動売買ロボット作成マニュアル
50種類以上の通貨ペア、各種CFD(金、株など)対応
ちょっと本屋に寄ったら、FX自動売買ロボット作成マニュアルというのが売っていました。
やっとメタトレーダーの本が増えてきましたね。
今までのこれは全般的なことが載っていました。
FX自動売買ロボット作成マニュアルは、本屋の立ち読みレベルだとEAが重視されています。
自動売買といっているので当たり前ですが。。。
といってもものすごく細かいことが書いてあるわけではないので、初心者向けです。
設定関係が、写真つきで説明してあるのでまだ始めたばかりという人は、いい感じの本かもしれません。
本屋で見かけたら、立ち読みしてみてください。
一応次の予告です。
次は、重要指標を表示するインジケータを作ります。
作ってあるのですが、だいぶ難易度が高いのでどう説明するか悩んでいます。
説明が短かったら、あきらめたと思ってください。。。
タグ
2009年06月26日
コメント&トラックバック(0)
| トラックバックURL
|
CSVファイルを出力してみる。
50種類以上の通貨ペア、各種CFD(金、株など)対応
今回は、ファイル出力を行いたいと思います。
タイトルでは、CSVファイルを出力することになっていますが、なるべく利用しやすいように文字列の行書きだしの関数を作ります。
CSVファイルも出力できますし、ログとして出力することもできます。
EAでもインジケータでもいいのですが、とりあえず、インジケーターで作成してみましょう。
何でもいいので、MetaEditorでインジケーターを作成してください。
別にパラメータなど入りませんので、適当でかまいません。
以下の関数をコピーして、最後にでもペースとしてください。
int LogWrite(string strFileName,string strText)
{
int handle;
handle=FileOpen(strFileName, FILE_BIN|FILE_READ|FILE_WRITE);
if(handle<1)
{
Print(”can’t open file error-”,GetLastError());
return(-1);
}
FileSeek(handle, 0, SEEK_END);
strText = strText + “\r\n”;
FileWriteString(handle, strText, StringLen(strText));
FileClose(handle);
return(0);
}
この関数は、
1.ファイルを開く
2.ファイルの最後に移動
3.ファイルへ出力
4.ファイルを閉じる
このことを行っています。
ちょこっと難しいというか、分かりにくいのが、
FileOpen(strFileName, FILE_BIN|FILE_READ|FILE_WRITE);
の
FILE_BIN|FILE_READ|FILE_WRITE
バイナリーモードで読み書きするという意味ですが、
その他にもファイルの中身を消去しないという意味があります。
今回は、書くだけなので「FILE_WRITE」だけでいいような気がしますが、
これだけだと、ファイルの中身を消してしまいます。
ということで、消したくないときは「FILE_READ|FILE_WRITE」の2つを指定する必要があります。
たぶん、ここが分かりにくいでしょうね。
FileSeek(handle, 0, SEEK_END);
は、ファイルの一番最後へ移動。
strText = strText + “\r\n”;
は、指定された文字の最後に改行コードを入れています。
これを入れないと改行されずに、連続した文字になってしまいます。
FileWriteString(handle, strText, StringLen(strText));
で、文字を指定した文字数分書き出しています。
FileClose(handle);
でファイルを閉じています。
この関数を使うと、簡単にファイルを出力できます。
LogWrite(ファイル名,出力したい文字列)
を指定すればいいだけです。
ちなみにファイルですが、
インストールパス\MetaTrader\experts\files
に出力されます。
EAのテストモードだけ出力先が変わって、
インストールパス\MetaTrader\tester\files
です。
では、関数を呼び出す部分を作ってみましょう。
int start()
の中に、以下の行を追加してください。
string strText = StringConcatenate(Year(),”/”,Month(),”/”,Day(),” “,Hour(),”:”,Minute(),”:”,Seconds(),”,”,Ask,”,”,Bid);
LogWrite(”AskBid.csv”,strText);
YYYY/MM/DD hh:mm:ss,買値,売値
CSVファイルで出力していますが、CSVファイルはカンマ区切りのテキストファイルです。
本当は、もう少し細かいルールがありますが、とりあえず問題ないはずです。
詳しく知りたい人は、ぐぐってみてください。
これで、コンパイルして適当な表にドラッグすれば、ファイルができあがっているはずです。
この関数は、文字なら何でも出力できるので、重宝すると思います。
せっかくなので、もう一つ出力例を
init()の上あたりに以下の宣言を追加してください。
datetime timeNow;
start()の中に以下の処理を追加してください。
if(timeNow != iTime(NULL,0,1))
{
timeNow = iTime(NULL,0,1);
string strTextAshi = StringConcatenate(TimeYear(timeNow),”/”,TimeMonth(timeNow),”/”,TimeDay(timeNow),” “,TimeHour(timeNow),”:”,TimeMinute(timeNow),”:”,TimeSeconds(timeNow),”,”,iHigh(NULL,0,1),”,”,iOpen(NULL,0,1),”,”,iClose(NULL,0,1),”,”,iLow(NULL,0,1));
LogWrite(”Ashi.csv”,strTextAshi);
}
今度のは、足が確定したときの高値、始値、終値、安値を出力しています。
レートが変わるたびに出力しても意味がないので、1本前の時間が変わったときに出力するようにしています。
こんな感じです。
ファイル出力は、分かりましたか?
他にも出力の仕方は、色々あるので試してみてくださいね。
タグ
2009年06月17日
コメント&トラックバック(4)
| トラックバックURL
|
さわさわさん手法について考える
50種類以上の通貨ペア、各種CFD(金、株など)対応
リクエストにありました「さわさわさん手法」について考えたいと思います。
さわさわさん手法って知っていますか?
トラップリピートイフダン(R)
とかリピートイフダンと言われる手法です。
簡単に説明すると
たとえば、JPYUSJで考えて見ましょう。
現在100円だとします。
小さいと面白くないので、25銭単位で仕込みます。
100円、100.25円、100.50円、100.75円、101円に買いと売り注文を両建てで注文を入れます。
利益確定は、25銭単位。
利益確定と同時に確定した買い注文をまた出します。
ロスカットはなしです。
101円まで円安が進むと。
買いポジションは、
25銭が4回確定して、1円の利益です。
売りポジションのほうは、
1円、0.75円、0.5円、0.25円のマイナスで、2.5円のマイナスです。
これがまた、100円まで戻ってくると
マイナスだった売りポジションは、1円のプラスに
逆に買いポジションは、2.5円のマイナスです。
トータルでは、2円プラスの2.5円マイナスです。
もう一度、101円まで動いたとします。
そうすると、利益が3円、マイナスが2.5円で0.5円の利益がでます。
ここまでくるとわかると思いますが、上下を繰り返すとどんどん利益が増えていく手法です。
いい感じですよね。
でも、一方向へ大きく動くと大変なマイナスポジションを持ってしまいます。
ですが、通常上下しながら移動するので、基本的にはプラスになるはずです。
長い目で見れば、140円まで安くなったとしても数年で100円まで戻ってくる可能性が大きいですね。
ある程度、リスクはあると同時に強制ロスカットにならないだけの資金が必要ですが有効な手法だと思います。
オリジナルでは、1円単位でポジションを持っているみたいです。
人によっては、ロスカットも加えている人がいます。
という手法ですが、これをメタトレーダーで実装することを考えます。
結果からいえば、プログラムを作ることは可能です。
ですが、通信が切れたらどうなりますか?
PCが壊れたら。。。
この辺を考えるとちょっと怖いですね。
ということで、作ることは可能ですがおすすめできません。
こうした機能を実装しているFX会社があります。
そちらを利用したほうが、結果的によいのではないでしょうか。
タグ
2009年06月13日
コメント&トラックバック(9)
| トラックバックURL
|














![[image]投資で失敗しない7つの法則:無料CDプレゼント](http://www.affiliatecenter.jp/invest/img/FX_freeCD/banner165x100seven_rule5e.gif)



MyBlog
