「MT4」の版間の差分
ナビゲーションに移動
検索に移動
(→表示方法) |
(→Tips) |
||
| (同じ利用者による、間の50版が非表示) | |||
| 1行目: | 1行目: | ||
==MT4== | ==MT4== | ||
{{amazon|B017HFIIEA}} | {{amazon|B017HFIIEA}} | ||
| + | *[https://mql4.metasys-seeker.com/category/index/ MQL4リファレンス] | ||
| + | *[https://www.mql5.com/ja/docs MQL5リファレンス] | ||
===プログラムの種類=== | ===プログラムの種類=== | ||
*種類によって保存される場所が異なる | *種類によって保存される場所が異なる | ||
| 24行目: | 26行目: | ||
*チャートに挿入すると、価格の変化に応じて自動売買のできるプログラム | *チャートに挿入すると、価格の変化に応じて自動売買のできるプログラム | ||
*過去のデータに対して仮想売買を実行し結果を表示するバックテストにも利用可能 | *過去のデータに対して仮想売買を実行し結果を表示するバックテストにも利用可能 | ||
| + | |||
| + | ==売買注文== | ||
| + | ===メタトレーダーで出せる注文=== | ||
| + | #成行注文 | ||
| + | ##その時点での買い気配や売り気配ですぐにポジションを建てる | ||
| + | #逆指値注文 | ||
| + | ##待機注文の一種 | ||
| + | ##価格が一定になったら、成り行きで注文を建てる | ||
| + | ##買いの逆指値は現在価格の上、売りの逆指値は現在価格の下に置かれる | ||
| + | ##価格がその水準まで上昇、下落して、その後もそのポジションに動いて利益を生むことを想定する | ||
| + | #指値注文 | ||
| + | ##逆指値注文の逆 | ||
| + | ##価格がその水準まで上昇、下落したのち、反転して利益を生むことを想定する | ||
| + | ##自動売買ではあまり使われない | ||
| + | |||
| + | ==基本== | ||
===コンパイル=== | ===コンパイル=== | ||
*ソースコードは拡張子、mq4 | *ソースコードは拡張子、mq4 | ||
| 29行目: | 47行目: | ||
[[File:mt4_programming_compile.png|600px]] | [[File:mt4_programming_compile.png|600px]] | ||
| − | === | + | ===変数=== |
| − | + | ---- | |
| − | + | ====定義済変数==== | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | ===定義済変数=== | ||
---- | ---- | ||
{| class="wikitable" | {| class="wikitable" | ||
| 102行目: | 113行目: | ||
|- | |- | ||
|} | |} | ||
| + | ====外部変数==== | ||
| + | ---- | ||
| + | *トレーディングシステムに対して調整可能なパラメータ | ||
| + | *トレードやインディケーターの設定を行う | ||
| + | *変数の前に、extern をつけて宣言 | ||
| + | |||
===組込関数=== | ===組込関数=== | ||
---- | ---- | ||
| − | *https://www.mql5.com/ja/docs | + | *[https://www.mql5.com/ja/docs MQL5リファレンス] |
| + | |||
===定義済変数=== | ===定義済変数=== | ||
---- | ---- | ||
| 130行目: | 148行目: | ||
| | | | ||
| | | | ||
| + | |- | ||
| + | |} | ||
| + | ===プリプロセッサ=== | ||
| + | ---- | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! scope="col"| プリプロセッサ定義 | ||
| + | ! scope="col"| 意味 | ||
| + | ! scope="col"| 備考 | ||
| + | |- | ||
| + | | #property indicator_chart_window | ||
| + | | 指標をチャートと同じウインドウに表示 | ||
| + | | | ||
| + | |- | ||
| + | | #property indicator_separate_window | ||
| + | | 指標をチャートと別のウインドウに表示 | ||
| + | | | ||
| + | |- | ||
| + | | #property indicator_buffers N | ||
| + | | プロットさせる指標の数(N) | ||
| + | | | ||
| + | |- | ||
| + | | #propertyindicator_typeN | ||
| + | | 指標の種類を指定 | ||
| + | | Nの部分は、1 - 512 を指定 | ||
| + | |- | ||
| + | | #propertyindicator_colorN | ||
| + | | 指標の色を指定 | ||
| + | | 例:#propertyindicator_color1clrRed | ||
| + | |- | ||
| + | | #propertyindicator_styleN | ||
| + | | 指標の線種 | ||
| + | | STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT 例:#propertyindicator_style1STYLE_DOT | ||
| + | |- | ||
| + | | #propertyindicator_widthN | ||
| + | | 指標の太さ | ||
| + | | 例 #propertyindicator_width1 2 | ||
| + | |- | ||
| + | | | ||
| + | | | ||
| + | |- | ||
| + | | | ||
| + | | | ||
| + | |- | ||
| + | | | ||
| + | | | ||
|- | |- | ||
|} | |} | ||
| 153行目: | 217行目: | ||
|- | |- | ||
|} | |} | ||
| − | === | + | ===関数のインポート=== |
| + | ---- | ||
| + | <pre> | ||
| + | #import "library.ex4" | ||
| + | double MyFunction(); | ||
| + | #import | ||
| + | </pre> | ||
| + | |||
| + | ==プログラミング== | ||
| + | ===スクリプト実行手順=== | ||
| + | #ファイル-新規作成 からウィザードでスクリプトを作成 | ||
| + | #コーディングして、コンパイル | ||
| + | #ナビゲーターウィンドウに出現するので、チャートにドロップ | ||
| + | #ターミナルウィンドウ「エキスパート」に出力された | ||
| + | [[File:mt4_dev_proc.png|600px]] | ||
| + | |||
| + | *スクリプトをはじめ、MT4で作成するあらゆるプログラムは、チャートに挿入して実行される | ||
| + | |||
| + | ===カスタム指標(インディケーター)プログラミング=== | ||
---- | ---- | ||
| + | *よく利用されるインディケーターとして、移動平均線や、ストキャスティックスなどがある | ||
*カスタム指標は、チャート上にテクニカル指標データを順次プロットしていく | *カスタム指標は、チャート上にテクニカル指標データを順次プロットしていく | ||
*プログラムは、チャート上の価格が更新されるたびに繰り返し実行される | *プログラムは、チャート上の価格が更新されるたびに繰り返し実行される | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
====表示方法==== | ====表示方法==== | ||
---- | ---- | ||
*配列を指標バッファにSetIndexBuffer()関数を用いて関連づける | *配列を指標バッファにSetIndexBuffer()関数を用いて関連づける | ||
| + | *新規作成-カスタムインディケーター | ||
| + | |||
| + | <pre> | ||
| + | #property indicator_separate_window | ||
| + | #property indicator_buffers 1 | ||
| + | |||
| + | double buf[]; | ||
| + | //+------------------------------------------------------------------+ | ||
| + | //| Custom indicator initialization function | | ||
| + | //+------------------------------------------------------------------+ | ||
| + | int OnInit() | ||
| + | { | ||
| + | //--- indicator buffers mapping | ||
| + | SetIndexBuffer(0, buf); | ||
| + | //--- | ||
| + | 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[]) | ||
| + | { | ||
| + | //--- | ||
| + | for(int i=0; i<5; i++) { | ||
| + | buf[i] = close[i]; | ||
| + | } | ||
| + | //--- return value of prev_calculated for next call | ||
| + | return(rates_total); | ||
| + | } | ||
| + | //+------------------------------------------------------------------+ | ||
| + | </pre> | ||
| + | |||
| + | [[File:mt4_custom_indicator.png|800px]] | ||
| + | |||
| + | ===エキスパートアドバイザプログラミング=== | ||
| + | ---- | ||
| + | *一般にEAはインディケーターを使って売買シグナルを点灯させる | ||
| + | ====EA例==== | ||
| + | ---- | ||
| + | <pre> | ||
| + | #property strict | ||
| + | |||
| + | input int FastMAPeriod = 10; | ||
| + | input int SlowMAPeriod = 40; | ||
| + | input double Lots = 0.1; | ||
| + | |||
| + | int Ticket = 0; | ||
| + | |||
| + | int OnInit() | ||
| + | { | ||
| + | return(INIT_SUCCEEDED); | ||
| + | } | ||
| + | void OnDeinit(const int reason) | ||
| + | { | ||
| + | } | ||
| + | void OnTick() | ||
| + | { | ||
| + | double FastMA1 = iMA(_Symbol, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1); | ||
| + | double SlowMA1 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1); | ||
| + | double FastMA2 = iMA(_Symbol, 0 ,FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2); | ||
| + | double SlowMA2 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2); | ||
| + | |||
| + | int pos = 0; | ||
| + | if (OrderSelect(Ticket, SELECT_BY_TICKET) && OrderCloseTime() == 0) | ||
| + | { | ||
| + | if (OrderType() == OP_BUY) | ||
| + | { | ||
| + | pos = 1; | ||
| + | } | ||
| + | if (OrderType() == OP_SELL) | ||
| + | { | ||
| + | pos = -1; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | bool ret; | ||
| + | if (FastMA2 <= SlowMA2 && FastMA1 > SlowMA1) | ||
| + | { | ||
| + | if (pos < 0) | ||
| + | { | ||
| + | ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0); | ||
| + | if (ret) | ||
| + | { | ||
| + | pos = 0; | ||
| + | } | ||
| + | } | ||
| + | if (pos == 0) | ||
| + | { | ||
| + | Ticket = OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0); | ||
| + | } | ||
| + | } | ||
| + | if (FastMA2 >= SlowMA2 && FastMA1 < SlowMA1) | ||
| + | { | ||
| + | if (pos > 0) | ||
| + | { | ||
| + | ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0); | ||
| + | if (ret) | ||
| + | { | ||
| + | pos = 0; | ||
| + | } | ||
| + | } | ||
| + | if (pos == 0) | ||
| + | { | ||
| + | Ticket = OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | ====ヒストリーセンター==== | ||
| + | ---- | ||
| + | *メニュー - ツール - ヒストリーセンター | ||
| + | *通貨ペアと足を選択し、ダウンロード | ||
| + | *上記ストラテジーテスターを実行 | ||
| + | *[https://www.fxddtrading.com/bm/jp/resources/mt4-one-minute-data ヒストリカルデータダウンロード] | ||
| + | [[File:mt4_history_center.png|500px]] | ||
| + | |||
| + | *https://efxcursion.com/812.html | ||
| + | ====バックテスト==== | ||
| + | ---- | ||
| + | *EAを過去のチャート上で仮想的に動作させること | ||
| + | *MT4ではストラテジーテスターという機能が搭載されている | ||
| + | *メニュー - 表示 - ストラテジーテスター で表示される | ||
| + | [[File:mt4_storategy_tester.png|600px]] | ||
| + | |||
| + | *結果 | ||
| + | [[File:mt4_backtest_chart.png|700px]] | ||
| + | *レポート | ||
| + | [[File:mt4_backtest_result_report.png|400px]] | ||
| + | |||
| + | ===ボリンジャーバンド=== | ||
| + | ボリンジャーバンドの上位ライン、下位ラインは、一定期間の価格の標準偏差に比例した幅をもつため、値動きが大きくなると幅が広がります。通常は、価格がその上下ラインを超えることはないのですが、さらに値動きが大きくなると、上下ラインを超える場合が出てきます。その状態を、買われ過ぎ、売られ過ぎと判断すると、そのうち価格が元の移動平均に戻ると期待できます。そのような想定にもとづくと、下図のように価格が上位ラインを上抜けたときに売りシグナル、下位ラインを下抜けたときに買いシグナルとする方法が考えられます。これがいわゆる「逆張り(カウンタートレンド)」のシステムです。 | ||
| + | |||
| + | |||
| + | ==Tips== | ||
| + | ===[[Visual Studio Code]]=== | ||
| + | *https://fx-ai-trading.com/fx/mql/vs-code.html | ||
| + | *https://creator.fx-ea-system-project.com/mql-programming/visual-studio-code/ | ||
| + | |||
| + | *ExtensionをMQL4で検索し、以下をインストール | ||
| + | [[File:mt4_vscode_extension.png|700px]] | ||
| + | |||
| + | *コンパイラの設定 | ||
| + | [[File:mt4_vscode_estention_compiler_setttings.png|500px]] | ||
| + | *メタエディタパスの設定 | ||
| + | [[file:mt4_vscode_extension_metaeditor_path.png|600px]] | ||
| + | |||
| + | ====[[Mac]]==== | ||
| + | [https://www.typea.info/blog/index.php/2021/06/06/mt4_dev_mac_vscode_method/ MetaTrader4 開発をMacとVisual Studio Codeで行う手順] | ||
2021年10月24日 (日) 13:30時点における最新版
MT4
プログラムの種類
- 種類によって保存される場所が異なる
- 保存フォルダ一覧を開くには、ファイル-データフォルダを開く
- プログラムファイルなどは、MQL4フォルダ以下に格納される
- mac の場合、/Users/{ユーザー名}/Library/Application Support/MetaTrader 4/Bottles/metatrader4/drive_c/Program Files/MetaTrader 4/MQL4 が物理的な場所
スクリプト(Script)
- Scriptsフォルダに保存される
- 複数の処理をまとめて実行
- チャートに挿入すると一度だけ実行
- 口座情報や通貨ペア情報の取得
- 過去のチャートデータの一斉処理
カスタム指標(Custom Indicator)
- Indecatorsフォルダに保存される
- MT4にすでに組み込まれているテクニカル指標と同様に、チャートに挿入することで独自に作成したテクニカル指標をチャートにプロットする
エキスパートアドバイザー(Expert Advisor,EA)
- Expertsフォルダに保存される
- チャートに挿入すると、価格の変化に応じて自動売買のできるプログラム
- 過去のデータに対して仮想売買を実行し結果を表示するバックテストにも利用可能
売買注文
メタトレーダーで出せる注文
- 成行注文
- その時点での買い気配や売り気配ですぐにポジションを建てる
- 逆指値注文
- 待機注文の一種
- 価格が一定になったら、成り行きで注文を建てる
- 買いの逆指値は現在価格の上、売りの逆指値は現在価格の下に置かれる
- 価格がその水準まで上昇、下落して、その後もそのポジションに動いて利益を生むことを想定する
- 指値注文
- 逆指値注文の逆
- 価格がその水準まで上昇、下落したのち、反転して利益を生むことを想定する
- 自動売買ではあまり使われない
基本
コンパイル
- ソースコードは拡張子、mq4
- コンパイルすると、ex4
変数
定義済変数
| 変数 | 意味 | 備考 |
|---|---|---|
| Bid | 売値 | |
| Ask | 買値 | |
| Open | 始値 | 配列 |
| High | 高値 | 配列 |
| Low | 安値 | 配列 |
| Close | 終値 | 配列 |
| _Symbol | 通貨ペア名 | |
| _Point | 通貨ペアごとの異なる最小値幅 | |
| _Digit | 小数点以下桁数 | |
| _Period | 現在のチャートのタイムフレーム(分)換算 | |
外部変数
- トレーディングシステムに対して調整可能なパラメータ
- トレードやインディケーターの設定を行う
- 変数の前に、extern をつけて宣言
組込関数
定義済変数
取引関数
- 自動売買を許可する必要がある
- ツール-オプション -エキスパートアドバイザ タブ - 自動売買を許可する にチェック
| 定義済関数 | 意味 | 備考 |
|---|---|---|
| OrderSend | 取引操作の実行に使用され、リクエストを取引サーバに送信 | |
プリプロセッサ
| プリプロセッサ定義 | 意味 | 備考 |
|---|---|---|
| #property indicator_chart_window | 指標をチャートと同じウインドウに表示 | |
| #property indicator_separate_window | 指標をチャートと別のウインドウに表示 | |
| #property indicator_buffers N | プロットさせる指標の数(N) | |
| #propertyindicator_typeN | 指標の種類を指定 | Nの部分は、1 - 512 を指定 |
| #propertyindicator_colorN | 指標の色を指定 | 例:#propertyindicator_color1clrRed |
| #propertyindicator_styleN | 指標の線種 | STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT 例:#propertyindicator_style1STYLE_DOT |
| #propertyindicator_widthN | 指標の太さ | 例 #propertyindicator_width1 2 |
口座情報
| 定義済関数 | 意味 | 備考 |
|---|---|---|
| AccountInfoString | 口座のプロパティの値を返します | プロパティ |
| AccountInfoInteger | 口座のプロパティの値を返します | プロパティ |
| AccountInfoDouble | 口座のプロパティの値を返します | プロパティ |
関数のインポート
#import "library.ex4"
double MyFunction();
#import
プログラミング
スクリプト実行手順
- ファイル-新規作成 からウィザードでスクリプトを作成
- コーディングして、コンパイル
- ナビゲーターウィンドウに出現するので、チャートにドロップ
- ターミナルウィンドウ「エキスパート」に出力された
- スクリプトをはじめ、MT4で作成するあらゆるプログラムは、チャートに挿入して実行される
カスタム指標(インディケーター)プログラミング
- よく利用されるインディケーターとして、移動平均線や、ストキャスティックスなどがある
- カスタム指標は、チャート上にテクニカル指標データを順次プロットしていく
- プログラムは、チャート上の価格が更新されるたびに繰り返し実行される
表示方法
- 配列を指標バッファにSetIndexBuffer()関数を用いて関連づける
- 新規作成-カスタムインディケーター
#property indicator_separate_window
#property indicator_buffers 1
double buf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0, buf);
//---
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[])
{
//---
for(int i=0; i<5; i++) {
buf[i] = close[i];
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
エキスパートアドバイザプログラミング
- 一般にEAはインディケーターを使って売買シグナルを点灯させる
EA例
#property strict
input int FastMAPeriod = 10;
input int SlowMAPeriod = 40;
input double Lots = 0.1;
int Ticket = 0;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double FastMA1 = iMA(_Symbol, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double SlowMA1 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double FastMA2 = iMA(_Symbol, 0 ,FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
double SlowMA2 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
int pos = 0;
if (OrderSelect(Ticket, SELECT_BY_TICKET) && OrderCloseTime() == 0)
{
if (OrderType() == OP_BUY)
{
pos = 1;
}
if (OrderType() == OP_SELL)
{
pos = -1;
}
}
bool ret;
if (FastMA2 <= SlowMA2 && FastMA1 > SlowMA1)
{
if (pos < 0)
{
ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0);
if (ret)
{
pos = 0;
}
}
if (pos == 0)
{
Ticket = OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
}
}
if (FastMA2 >= SlowMA2 && FastMA1 < SlowMA1)
{
if (pos > 0)
{
ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0);
if (ret)
{
pos = 0;
}
}
if (pos == 0)
{
Ticket = OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
}
}
}
ヒストリーセンター
- メニュー - ツール - ヒストリーセンター
- 通貨ペアと足を選択し、ダウンロード
- 上記ストラテジーテスターを実行
- ヒストリカルデータダウンロード
バックテスト
- EAを過去のチャート上で仮想的に動作させること
- MT4ではストラテジーテスターという機能が搭載されている
- メニュー - 表示 - ストラテジーテスター で表示される
- 結果
- レポート
ボリンジャーバンド
ボリンジャーバンドの上位ライン、下位ラインは、一定期間の価格の標準偏差に比例した幅をもつため、値動きが大きくなると幅が広がります。通常は、価格がその上下ラインを超えることはないのですが、さらに値動きが大きくなると、上下ラインを超える場合が出てきます。その状態を、買われ過ぎ、売られ過ぎと判断すると、そのうち価格が元の移動平均に戻ると期待できます。そのような想定にもとづくと、下図のように価格が上位ラインを上抜けたときに売りシグナル、下位ラインを下抜けたときに買いシグナルとする方法が考えられます。これがいわゆる「逆張り(カウンタートレンド)」のシステムです。
Tips
Visual Studio Code
- https://fx-ai-trading.com/fx/mql/vs-code.html
- https://creator.fx-ea-system-project.com/mql-programming/visual-studio-code/
- ExtensionをMQL4で検索し、以下をインストール
- コンパイラの設定
- メタエディタパスの設定
Mac
© 2006 矢木浩人