VBS サンプルプログラムの解説
当社カスタマーサポートの対象外です
概要
VBScript (Microsoft Visual Basic Scripting Edition)はWindowsのネイティブスクリプト言語です。
おもにWSHやIEなどで使用されています。今回はWSHでの使い方を解説します。
WSH(Windows Script Host)とはMicrosoft Windowsおいて用意されたスクリプト実行環境です。
対応環境:Windows XP以降のWindows。特にインストールするソフトウェアは有りません。
開発ツール:Windows付属のメモ帳でも十分です。
その他注意事項:プログラムに関する一定の知識をお持ちの方を想定して解説させていただきますので、
ご了承ください。
下記リンクよりorder2goAPIをダウンロード、インストールしてください。
サンプルソース
また、解説用のサンプルソースは下記よりダウンロードできます。
サンプルソースを実行する場合、保存したフォルダにtest.logという空のファイルを作ってください。
また、このサンプルソースでは最初に自分のアカウントIDとパスワードを書いてください。
注:サンプルソースは例外処理を行っておりませんので、参考資料としての範囲内でご利用ください。
解説
サンプルソースをもとに各機能ごとに解説していきます。
ログインページトップへ
APIを使用する手順として、まずはシステムにログインしなければなりません。
リアル、もしくはデモの取引口座アカウントとパスワードをご用意ください。
注:ログインし、使い終わりましたら必ずログアウトしてください。
Option Explicit
Dim oCor, oTradeDesk, oSink, sid, username, password
'通知された取引口座アカウントとパスワードをご入力ください
username = "xxxxxxxxxxx" '取引口座アカウント
password = "xxxxxxxxxxx" 'パスワード
if StrComp( username, "") = 0 then
WScript.Echo "PLEASE SET 'username' and 'password' variables in this .vbs file before running it!"
WScript.Quit
end if
if StrComp( password, "" ) = 0 then
WScript.Echo "PLEASE SET 'username' and 'password' variables in this .vbs file before running it!"
WScript.Quit
end if
Set oCor = CreateObject("Order2Go.Core")
WScript.Echo "Core created"
Set oTradeDesk = oCor.CreateTradeDesk("trader")
WScript.Echo "TradeDesk created"
WScript.Echo "Login..."
Call oTradeDesk.Login(username, password, "http://fxcmj.fxcorporate.com/Hosts.jsp", "Real")
'Call oTradeDesk.Login(username, password, "http://www.fxcorporate.com/Hosts.jsp", "Demo")
if oTradeDesk.IsLoggedIn() <> True then
WScript.Echo "Login failed"
end if
WScript.Echo "Logged"
1. Order2GoのCoreオブジェクトを呼び出します。
Set oCor = CreateObject("Order2Go.Core")
Order2GoApiをインストールしていない場合、ここでエラーが出ます。
2. コアオブジェクトからtraderオブジェクトを呼び出します。
Set oTradeDesk = oCor.CreateTradeDesk("trader")
これは顧客側からの操作に関するオブジェクトです。
3. ログインをします。usernameとpasswordはここで使われます。
Call oTradeDesk.Login(username, password, "http://fxcmj.fxcorporate.com/Hosts.jsp", "Real") Call oTradeDesk.Login(username, password, "http://www.fxcorporate.com/Hosts.jsp", "Demo")
リアル口座の場合は"Real"の方を、デモ口座の場合は"Demo"の方をお使いください。
リアルタイムレート取得ページトップへ
注文条件を設定するためには、現在のレートを取得する必要があります。
各通貨ペア、先物オプション(CFD)のリアルタイムレートを取得してみましょう。
注:時間の扱いですがすべてニューヨーク時間になっています。
日本時間を得たい場合は自分で変換してください。
Set oSink = WScript.CreateObject("FXcore.TradeDeskEventsSink", "FXE_")
WScript.Echo "Sink created"
sid = oTradeDesk.Subscribe(oSink)
WScript.Echo "Subscribed ID: " & sid
'二十秒間リアルタイムレートを取得します。
Dim i
i = 0
While (i < 20)
WScript.sleep(1000)
i = i+1
Wend
WScript.Echo "Unsubscribing..."
Call oTradeDesk.Unsubscribe(sid)
WScript.Echo "Unsubscribed."
Sub FXE_OnRowAddedEx(t, id)
if StrComp( t.Type, "offers") = 0 then
end if
End Sub
Sub FXE_OnRowChangedEx(t, id, x)
if StrComp( t.Type, "offers") = 0 then
Dim parser
Set parser = oTradeDesk.GetParser()
Call parser.ParseEventRow(x, "offers")
Dim str
Dim offerId, instrument, bid, ask, high, low, datetime
offerId = parser.GetValue("OfferID")
instrument = parser.GetValue("Instrument")
bid = parser.GetValue("Bid")
ask = parser.GetValue("Ask")
high = parser.GetValue("Hi")
low = parser.GetValue("Low")
datetime = parser.GetValue("Time")
str= datetime & " currncy: "&instrument&" Ask: "&ask&" Bid: "&bid&" High: "&high&" Low: "&low&" offerId: "&offerId
fileWrite(str)
if (instrument = "USD/JPY" And ask = 85.406) then
OpenPosition("USD/JPY")
end if
end if
End Sub
Sub FXE_OnRowBeforeRemoveEx(t, id, x)
if StrComp( t.Type, "offers" ) = 0 then
end if
End Sub
1. リアルタイムレート取得時間を設定します。
Dim i
i = 0
While (i < 20)
WScript.sleep(1000)
i = i+1
Wend
ここでは20秒間、リアルタイムレートを取得しています。
Whileでloopしている間はレート取得が続いているということです。
好きな値をご入力ください。
2. リアルタイムレート取得のメソッドを設定します。
Set oSink = WScript.CreateObject("FXcore.TradeDeskEventsSink", "FXE_")
WScript.Echo "Sink created"
sid = oTradeDesk.Subscribe(oSink)
WScript.Echo "Subscribed ID: " & sid
ここではコールバックメソッド”FXE_”系を指定し登録しています。
コールバックメソッドについては各自ご確認ください。
3. リアルタイムレート取得のメソッドを取り除きます。
WScript.Echo "Unsubscribing..." Call oTradeDesk.Unsubscribe(sid) WScript.Echo "Unsubscribed."
コールバックメソッド”FXE_”系を解放しています。
4. リアルタイムレート取得のメソッド本体です。
Sub FXE_OnRowChangedEx(t, id, x)
コールバックメソッドです。レートの更新があると、このメソッドが呼ばれます。
この中では色々なレートに関する値が取得できます。
5. ファイル書き込みです。
fileWrite(str)
logファイルに書き出しています。必ずtest.logファイルを用意してください。
test.logには
2010/08/19 6:00:57 currncy: USD/JPY Ask: 85.763 Bid: 85.745 High: 85.82 Low: 85.329 offerId: 2
以上のようなリアルタイムレートが書き込まれます。
成行注文ページトップへ
成行注文を出します。
今回はUSD/JPYのレートが一定値になったら注文が出るようにします。
注:条件設定に注意してください。思いもよらない件数の注文が出るかもしれません。
Sub FXE_OnRowChangedEx(t, id, x)
if StrComp( t.Type, "offers") = 0 then
Dim parser
Set parser = oTradeDesk.GetParser()
Call parser.ParseEventRow(x, "offers")
Dim str
Dim offerId, instrument, bid, ask, high, low, datetime
offerId = parser.GetValue("OfferID")
instrument = parser.GetValue("Instrument")
bid = parser.GetValue("Bid")
ask = parser.GetValue("Ask")
high = parser.GetValue("Hi")
low = parser.GetValue("Low")
datetime = parser.GetValue("Time")
str= datetime & " currncy: "&instrument&" Ask: "&ask&" Bid: "&bid&" High: "&high&" Low: "&low&" offerId: "&offerId
fileWrite(str)
'条件にマッチすれば注文をだす。
if (instrument = "USD/JPY" And ask = 85.406) then
OpenPosition("USD/JPY")
end if
end if
End Sub
Sub OpenPosition(orderInstrument)
'ACCESSING ACCOUNTS TABLE
Dim accounts, accountId, baseUnitSize
Set accounts = oTradeDesk.FindMainTable("Accounts")
accountId = accounts.CellValue2(1,"AccountID")
'-----------6-----------
baseUnitSize = accounts.CellValue2(1,"BaseUnitSize")
'ACCESSING OFFERS TABLE
Dim offers, instrument, ask, quoteId
Set offers = oTradeDesk.FindMainTable("Offers")
'-----------7-----------
instrument = offers.CellValue2(2,"Instrument")
'-----------8-----------
ask = offers.CellValue2(2,"Ask")
quoteId = offers.CellValue2(1,"QuoteID")
'-----------9-----------
'OPENING POSITION
Dim orderId, dint
oTradeDesk.OpenTrade2 accountId, instrument, true, baseUnitSize, ask, quoteId, 0, oTradeDesk.SL_NONE, 0, 0, 0, orderId, dint
WScript.Echo("Position opened. Inst: "&instrument&" Rate: "&ask&" Amount: "&baseUnitSize)
WScript.Echo("ORDER ID: "&orderId)
End Sub
1. 通貨USD/JPYでaskが85.406円になったら注文を出します。
if (instrument = "USD/JPY" And ask = 85.406) then
OpenPosition("USD/JPY")
end if
ご自分で好きな条件を設定してください。(通貨やレート、指定水準より上になったら起動など色々設定できます)
2. 注文数量を指定します。
baseUnitSize = accounts.CellValue2(1,"BaseUnitSize")
注文時の数量を設定します。ここではBaseUnitSizeを指定しています。弊社では注文数量のマイクロ化により1が指定されます。
3. 注文通貨を設定します。
instrument = offers.CellValue2(2,"Instrument")
注文を出したい通貨を指定します。リアルタイムレートのofferIdを指定してください。
4. askなのかbidなのか注文レートを設定します。
ask = offers.CellValue2(2,"Ask")
askかbidを設定します。また、リアルタイムレートのofferIdを指定してください。
5. 成行注文をリクエストします。
Dim orderId, dint oTradeDesk.OpenTrade2 accountId, instrument, true, baseUnitSize, ask, quoteId, 0, oTradeDesk.SL_NONE, 0, 0, 0, orderId, dint
分かりにくいパラメータを左から順に説明をします。
3つ目の引数 true:buyかsellかを指定します。trueだと買い、falseだと売りです。
7つ目の引数 0:marketRangeです。order2goAPIで成行注文を出す場合、
自分でマーケットレンジを指定する必要があります。
これを0に設定すると、指定したレートのみで約定するように発注するため、
これ以外のレートでは約定しません。
(相場の流動性などによっては、約定に失敗する可能性が高まります。)
8つ目の引数 oTradeDesk.SL_NONE:ストップやリミットを設定するパラメータです。指定しない場合はoTradeDesk.SL_NONEを入れてください。
詳しいパラメータなどの説明はorder2goAPIがインストールされたフォルダにあるHelpファイルをご覧ください。
免責事項:
サンプルプログラムや解説ページは当社のカスタマーサポート対象外であり、質問に対してお答えすることはできません。
サンプルプログラムや解説ページのご利用は、お客様の責任において行われるものとし、利用によって生じたあらゆる損害に対して、当社は一切の責任を負いません。
サンプルプログラムや解説ページは無償で提供されますが、プログラムやページの情報に何ら欠陥がないことを保証するものではありません。













