弊社カスタマーサポートでは、このツールに関するサポートは行なっておりません。ご自身で解決できる方のみご使用ください。
MT4(メタトレーダー4)Oanda Excel RTDの使い方
Oanda Excel RTDとは?
Oanda Excel RTDとはMicrosoftのExcelのRTD関数を用いてExcelでMT4(メタトレーダー4)の口座の状況や通貨ペアのプライスなどを管理できるツールとなります。
例えば、次のように口座の状況をリアルタイムで表示させることができます。
Excelであるため、このリアルタイムデータを元に、ご自由にグラフを作成することもできます。
保有中のポジションの管理や注文中のオーダーの管理も行うことができます。
また、リアルタイムの価格を表示させることも可能です。
その他、時系列データの取得も可能となっています。
RTD関数を使うことで、様々なデータを取得することができるため、アイディア次第で自由にアレンジして使うことができます。
またVBAと組み合わせる事で、Excelから注文の発注、変更、決済なども行うこともできます。VBAに明るい方はぜひお試しください。
Oanda Excel RTDの使い方
Oanda Excel RTDはEA型のプログラムとなっているため、自動売買ができる状態にしておかなければなりません。
ナビゲーター内のOanda Excel RTDをダブルクリックまたはチャート上にドラッグ&ドロップすると設定画面が表示されます。
設定画面では「自動売買を許可する」「DLLファイルの使用を許可する」にチェックが入っていることを確認しOKを押します。
口座番号の表示のあるボックスが表示されます。この口座番号がExcelとリンクする番号となります。
これでMT4側の準備は完了です。
続いて、Excel側で関数を入力します。
基本的なRTD関数の書き方
あるデータを表示させる場合、以下の式の「口座番号」の部分に自分の口座番号、「プロパティ」の部分に表示させたい情報の名前(プロパティ名)を入力します。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","プロパティ名")
プロパティ名
「プロパティ名:内容」となっております。数式にはプロパティ名を入力します。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","currency")
口座情報に関するもの
口座についての情報を取得します。
- currency:取引口座の通貨種別
- balance:口座残高
- equity:有効証拠金
- pl:未実現損益
- usedmargin:必要証拠金
- freemargin:余剰証拠金
- tickets:チケットの数(保有ポジション、未約定のオーダー)
価格及び通貨ペア情報
価格や通貨ペアの情報を取得します。
通貨ペア名の部分には通貨ペア名を入力します。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","askEURUSD")
- bid通貨ペア名:Bid(売り)の価格
- ask通貨ペア名:Ask(買い)の価格
- high通貨ペア名:当日の高値
- low通貨ペア名:当日の安値
- symbols:通貨ペアの数
- s番号:入力した番号に相当する通貨ペア名
チケットに関する情報
保有中のポジション、注文中のチケットに関する情報を取得します。
番号は古い順に1からの数字となります。
(例)=RTD("FXBlueLabs.ExcelRTD",,"156734","t2s")
- t番号t:チケット番号
- t番号a:アクション名(Buy,sell,BUYLIMIT,SELLLIMIT,BUYSTOP,SELLSTOP)
- t番号s:通貨ペア
- t番号v:取引量
- t番号npl:取引の損益+スワップの損益
- t番号pl:取引の損益
- t番号swap:スワップの損益
- t番号comm:コミッションの価格
- t番号sl:ストップ注文の価格
- t番号tp:テイクプロフィット注文の価格
- t番号op:約定価格、または指値/逆指値価格
- t番号cp:現在の価格
- t番号cm:注文についているコメント
- t番号mg:マジックナンバー
過去の価格の取得
過去の価格を取得する場合は次のように入力します。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@bh,通貨名,時間軸,価格の種類,シフトする数(現在の足を0とします。)")
(例)最新の1時間足の高値を表示する場合
=RTD("FXBlueLabs.ExcelRTD",,"156734","@bh,EURUSD,H1,high,0")
時間軸の種類は次の通りです。
- M1:1分
- M2:2分
- M3:3分
- M4:4分
- M5:5分
- M6:6分
- M10:10分
- M15:15分
- M30:30分
- H1:60分
- H2:120分
- H3:180分
- h4:240分
- h6:360分
- h8:480分
- D1:1440分
- D2:2880分
- W1:7200分
価格の種類は次の通りです。
- open:始値
- high:高値
- low:安値
- close:終値
- range:高値と安値のレンジ
- median:高値と安値の平均
- typical:高値、安値、終値の平均
- weighted:高値、安値、終値×2の平均
- change:始値からの変動
- abschange:始値からの変動幅
- time:その時間軸の開始時間
インジケーターの数値の算出
Oanda Excel RTDでは組み込まれた関数を使用することで、インジケーターの数値を算出することも可能です。
例えば、次のような関数を入力するとポンドドルの五分足の期間14本分のRSIの数値を表示することができます。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@rsi,GBPUSD,M5,14,0")
インディケーターの数値の表示は基本的に次の式となります。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@インジケーター名,通貨ペア名,時間軸,パラメーター,シフト本数(0が現在の足)")
シフト本数は0が現在の足の数値を表示し、1と入力すると1本前の数値を表示します。
表示できるインジケーターの種類と設定方法
単純移動平均線(SMA)
単純移動平均線の式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@sma,通貨ペア名,時間軸,価格の種類,期間,シフト本数")
価格の種類は終値(close)等から選択します。下の例では中間値(高値と安値の平均)で表示する場合となります。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","@sma,GBPUSD,M5,median,10,0")
指数平滑移動平均線(EMA)
指数平滑移動平均線(EMA)の式はほぼ単純移動平均線と同じ設定となります。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@ema,通貨ペア名,時間軸,価格の種類,期間,シフト本数")
価格の種類は終値(close)等から選択します。下の例では中間値(高値と安値の平均)で表示する場合となります。
- 例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","@ema,GBPUSD,M5,median,10,0")
平滑移動平均線(SMMA)
平滑移動平均線もインジケーターの種類以外の設定は同じになります。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@smma,GBPUSD,H1,close,21,0")
加重移動平均線(WMA、LWMA)
加重移動平均線もインジケーターの種類以外の設定は同じになります。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@lwma,GBPUSD,1440,range,21,0")
MACDとMACDのシグナル
MACD、MACDのシグナルの数値を表示させる場合の式は次のようになります。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@macd(シグナルの場合は@magcsig),通貨ペア名,時間軸,価格の種類,短期のEMAの期間,長期のEMAの種類,シグナルの移動平均期間,シフト本数")
具体例は次のようになります。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","@macd,GBPUSD,30,high,12,26,9,0")
アベレージトゥルーレンジ(ATR)
アベレージトゥルーレンジの式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@atr,通貨ペア名,時間軸,期間,シフト本数")
具体例は次のようになります。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","@atr,GBPUSD,D1,21,0")
RSI
RSIの式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@rsi,通貨ペア名,時間軸,期間,シフト本数")
具体例は次のようになります。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","@rsi,USDJPY,H1,14,0")
ストキャスティクス
ストキャスティクスの%K、ストキャスティクスの%Dの式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@stoch(%Dの場合は@stochslow),通貨ペア名,時間軸,ストキャスティクスのパラメーター(例5,3,3),シフト本数")
具体例は次のようになります。
- (例)
=RTD("FXBlueLabs.ExcelRTD",,"156734","@stochslow,USDJPY,H1,5,3,3,0")
ボリンジャーバンド
ボリンジャーバンドのアッパーバンド、ボリンジャーバンドのロウアーバンドの式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@bbupper(ロウアーバンドの場合はbblower),通貨ペア名,時間軸,価格の種類,期間,標準偏差の数,シフト本数")
具体例は次のようになります。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@bbupper,GBPUSD,10,close,30,2,0")
標準偏差
標準偏差の式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@vol,通貨ペア名,時間軸,価格の種類,期間,シフト本数")
具体例は次のようになります。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@vol,GBPUSD,10,close,21,0")
CCI
CCIの式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@cci,通貨ペア名,時間軸,価格の種類,期間,シフト本数")
具体例は次のようになります。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@cci,EURUSD,60,typical,14,0")
一定期間の高値を表示
一定期間の高値を表示させる式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@high,通貨ペア名,時間軸,high,ローソク足の本数,シフト本数")
具体例は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@high,GBPUSD,D1,high,20,0")
一定期間の安値を表示
一定期間の安値を表示させる式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@low,通貨ペア名,時間軸,low,ローソク足の本数,シフト本数")
具体例は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@low,GBPUSD,D1,low,20,0")
フラクタルのスイングHとスイングL
フラクタルのスイングHとスイングLの数値を表示させる式は次の通りです。
フラクタルに関してはシフト本数の部分は0か1となります。0は現在のバーを無視し確定した足で判断するのに対し、1は現在のバーを含めて判断します。
=RTD("FXBlueLabs.ExcelRTD", , "口座番号", "@swingh(スイングLの場合は@swingl),通貨ペア名,時間軸,high(スイングLの場合はlow),スイング本数,シフト本数")
具体例は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",, "156734","@swingh,GBPUSD,D1,high,2,0")
ケルトナーチャネルのアッパーバンドとロウアーバンド
ケルトナーチャネルのアッパーバンドとロウアーバンドの数値を表示させる式は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"口座番号","@keltlower,通貨ペア名,時間軸,価格の種類,EMAの期間,ATRの期間,ATRの倍数,シフト本数")
具体例は次の通りです。
=RTD("FXBlueLabs.ExcelRTD",,"156734","@keltlower,GBPUSD,60,close,20,10,0.5,0")
通貨ペア名の表示
OANDAの東京サーバの通貨ペア名は「USDJPY.oj1m」というように通貨ペア名の後ろに「.oj1m」といった文字が入っています。Oanda excel RTDではデフォルトでこれを取り除き、「USDJPY」と表示しています。
それを解除し、「USDJPY.oj1m」といった表示形式の方が好ましい場合はMT4側の標準的シンボル名を使用のチェックを外します。
コマンドの送信
Oanda excel RTDではExcelのVBAコードを使用し取引コマンドを送信することもできます。
また、RTD関数を介して同じデータを読み取ることができます。
次の機能は実際にはExcelのVBAだけでなく、COMをサポートするプログラミング言語を使用することができます。
VBAコードでのデータの読み取り
FXBlueLabs.ExcelReaderオブジェクトを利用してデータを読み取ることができます。
Set reader = CreateObject("FXBlueLabs.ExcelReader")
reader.Connect ("156734")
MsgBox reader.Read("balance")
つまり、FXBlueLabs.ExcelReaderオブジェクトのインスタンスを作成し、Connect関数を使用して特定の口座番号にリンクします。
Read関数を使用して口座に関する情報を取得することができます。Read関数を使用する際のプロパティ名はRTD関数で使用する際のものと同じ名前となります。
リーダーが正常に接続されているかどうかの確認
ExcelReaderオブジェクトが正常に作成されていれば、Oanda excel RTDが動作していない場合でもConnect関数を呼び出すことができます。
データが実際に利用可能かどうかを確認するにはRead関数を使用し、残高などのプロパティに空白がないことを確認するか、LastUpdatetimeプロパティを読み込み、時刻が2000年1月1日より遅いことを確認します。
複数のデータを読み取る際のデータの一貫性
複数のデータ、特に複数のチケットのデータを照会する場合には、更新とデータの一貫性に注意する必要があります。
例えば、チケットリストをループする次のコードを考えてみましょう。
For i = 1 To reader.Read("tickets")
strSymbol = reader.Read("t" & i & "s")
vVolume = reader.Read("t" & i & "v")
Next
次のことが起こる可能性があります。
・最初に2つのチケットがあります。
Read関数が2回使用されている間、つまり、2行目と3行目を実行している間にチケットの1つが閉じられます。
よって、チケット2であったものがチケット1になります。
その結果、最初のループの終わりでstrSymbolは現在閉じられているチケットの通貨ペアを保持し、vVolumeはまだ保有しているチケットの取引量を示します。
複数のデータを読み込みながら一貫性を確保するにはReader.ReaderLock関数を使用します。そうすればReader.ReaderUnlock関数を使用するまでデータの変更が中断されます。
例をあげると、次のようになります。
ただし、Reader.ReaderLock関数を使用した場合はReader.ReaderUnlock関数を忘れないようにしましょう。
Reader.ReaderLock()
For i = 1 To reader.Read("tickets")
strSymbol = reader.Read("t" & i & "s")
vVolume = reader.Read("t" & i & "v")
Next
Reader.ReaderUnlock()
Excelから取引コマンドを送信する
Oanda Excel RTDではデフォルトではコマンドが送信できない状態になっています。
コマンドを送信できる状態にする場合は「コマンドを承諾」のチェックボックスにチェックを入れます。
このチェックボックスがオフになっている場合は全てのコマンドが「ERR:Commands not allowed」で返されます。
FXBlueLabs.ExcelCommandオブジェクトを使用すると、Excelから簡単なコマンドを送信できます。
例えば次のようなプログラムが送信できます。
Set cmd = CreateObject("FXBlueLabs.ExcelCommand")
strResult = cmd.SendCommand("156734", "BUY", "s=EURUSD|v=10000", 5)
The SendCommand() function has four parameters:
SendCommand()関数には4つのパラメータがあります。
- ①口座番号(例:156734)
- ②コマンド(アクション)
- ③コマンドのパラメータ(通貨ペアとボリューム)
- ④応答を待つ秒数
SendCommand関数は同期です。 RTDがコマンドを完了したとき、またはタイムアウト期間が満了したときに戻ります。
(タイムアウトとは、マーケット注文などが取り消された/キャンセルされたことを意味するものではなく、ブローカー/プラットフォームが許容時間内に応答していないことを意味します)。
SendCommand関数からの戻り値は、エラーが発生したことを示すための「ERR:」か動作が完了した「OKAY:」のいずれかで始まる文字列です。唯一の例外は、HELLOというテキストを返すTESTコマンドです。
コマンドとパラメータ
コマンドのパラメータは、パイプで区切られた文字列として送信され、name = valueの形式でいくつかの設定が行われます。 パラメータは任意の順序でリストすることができ、いくつかのパラメータはオプションです。
cmd.SendCommand("156734","BUY","s=EURUSD|v=10000",5)
取引量はロットサイズではなく取引通貨数となります。 通貨ペアの形式は、RTDで「標準的シンボル名を使用」のチェックボックスにチェックが入っているかどうかで異なります。
コマンドの種類
BUYとSELLコマンド
- パラメーター
- S(必須):通貨ペア名
- L(必須):取引数量
- sl(任意):ストップ注文価格
- tp(任意):テイクプロフィット注文価格
- comment(任意):コメント
- magic(任意):マジックナンバー
BUYLIMIT、SELLLIMIT、BUYSTOP、SELLSTOPコマンド
- パラメーター
- S(必須):通貨ペア名
- V(必須):取引数量
- price(必須):価格
- sl(任意):ストップ注文価格
- tp(任意):テイクプロフィット注文価格
- comment(任意):コメント
- magic(任意):マジックナンバー
CLOSEコマンド
ポジションを閉じたり、注文中のオーダーをキャンセルします。成功すると「OKAY:」が返されます。
- パラメーター
- t(必須):チケットID
PARTIALCLOSEコマンド
保有中のポジションの一部決済を行う場面で使用します。ポジションサイズを超える数量を入れるとそのポジションが全て閉じられます。ドテン売買は行いません。また、注文中のオーダーには使うことができません。
- パラメーター
- t(必須):チケットID
- v(必須):決済する数量
REVERSEコマンド
買っていたポジションを決済し、さらに売りに持ち替える取引を行います。いわゆるドテン売買です。
- パラメーター
- t(必須):チケットID
- v(任意):新しいポジションの数量。省略した場合は決済されるポジションの数量と同量となります。
- sl(任意):ストップ注文価格
- tp(任意):テイクプロフィット注文価格
- comment(任意):コメント
- magic(任意):マジックナンバー
CLOSESYMBOLコマンド
特定の通貨ペアの保有中のポジション、注文中のオーダーを全てキャンセルします。
成功すると「OKAY:」が返ってきます。
- パラメーター
- s(必須):通貨ペア名
CLOSEALLコマンド
全ての通貨ペアの保有中のポジション、注文中のオーダーを全てキャンセルします。
成功すると「OKAY:」が返ってきます。
- パラメーターなし
- (例)
cmd.SendCommand("156734","CLOSEALL","",20) '20-second timeout
ORDERSLコマンド
保有中のポジション、注文中のストップ注文の変更を行います。
- t(必須):チケットID
- sl(必須):ストップ注文価格、0とすると取消し
ORDERTPコマンド
保有中のポジション、注文中のテイクプロフィット注文の変更を行います。
- パラメーター
- t(必須):チケットID
- tp(必須):テイクプロフィット注文価格、0とすると取消し
ORDERMODIFYコマンド
保有中のポジション、注文中のオーダーのストップロス、テイクプロフィット注文の双方の変更に使えるほか、注文中のオーダーの指値/逆指値の価格の変更も行うことができます。
- パラメーター
- t(必須):チケットID
- p(オーダー変更の場合必須):価格
- sl(必須):ストップ注文価格、0とすると取消し
- tp(必須):テイクプロフィット注文価格、0とすると取消し
一般的なエラーメッセージ
- ERR:Need account:口座情報がブランクの場合
- ERR:Need command:コマンドがブランクの場合
- ERR:No listening app:RTDが特定のアカウントで動作していない場合
- ERR:No response within timeout:時間内にブローカーまたはプラットフォームから返答がない場合
- ERR:Commands not allowed:RTDでコマンドの使用が許可されていない場合
- ERR:Unrecognised command:SendCommand関数の値が認識できない場合
- ERR:Missing parameters:必要なパラメーターが足りないためコマンドを実行できない場合
非同期コマンド
コマンドが完了するかタイムアウトするまでVBAのコードの実行をブロックするのではなく非同期で送信することもできます。
これは次のように動作します
SendCommand関数の代わりにSendCommandAsync関数を使用します。
CheckAsyncResult関数を使用して非同期アクションの結果を定期的にチェックします。
終了したとき、もしくは諦めることを決めたとき、FreeAsyncCommand関数で使っているコマンドメモリーを解放します。
例えば、次のようなものがあります。
Set cmd = CreateObject("FXBlueLabs.ExcelCommand")
lCommandId = cmd.SendCommandAsync("10915", "BUY", "s=EURUSD|v=10000", 60)
strResult = ""
While strResult = ""
strResult = cmd.CheckAsyncResult(lCommandId)
If strResult = "" Then MsgBox "Still waiting..."
Wend
cmd.FreeAsyncCommand (lCommandId)
SendCommandAsync関数は、SendCommand関数と同じ4つのパラメータを使用しますが、コマンド結果を返す代わりに、CheckAsyncResult関数およびFreeAsyncCommand関数で後で使用するための「コマンドID」を返します。
SendCommandAsync関数には依然としてタイムアウト値がある事には注意が必要です。
SendCommandAsync関数の後で、最終的にFreeAsyncCommand関数を呼び出す必要があります。そうしないと、コードは少量ではありますが、メモリがリークします。
CheckAsyncResult関数は、コマンドがまだ実行中で、指定されたタイムアウトに達していない場合は空文字列を返し、完了していればSendCommand関数と同じ文字列レスポンスを返します。
Oanda Excel RTDの使い方の紹介動画
MT4を学びたい方へオススメコンテンツ
OANDA証券ではMT4(メタトレーダー4)の基本的な使い方を、画像や動画を用いて詳しく解説します。OANDA証券が独自開発したオリジナルインジケーターや自動売買(EA)なども豊富に提供しています。OANDA証券の口座をお持ちであれば無料で使えるので、ぜひ口座開設をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。