VB.NET サンプルプログラムの解説
当社カスタマーサポートの対象外です
概要
vb.net(Microsoft Visual Basic .NET)はMicrosoft社が開発したプログラミング言語です。
日本では前バージョンのVB6.0が大いに流行りました。その後継言語です。
コンパイル環境:.net Framework sdkインストール済みが条件。
コンパイルにはお手持ちのPCの環境変数にvbc.exeの格納Pathを御設定ください。
(vbc.exeはWindowsXP以降ならC:\WINDOWS\Microsoft.NET\Framework\vX.X/以下に存在します。)
内容を変更したいときは
1、test.vbをテキストエディタで開き、修正、上書き保存する。
2、make.batをダブルクリックして起動する。
(環境変数にvbc.exe格納フォルダのPathが設定されていないと失敗します。)
3、コンパイルエラーが出ないこと(warningは無視してかまいません)を確認し、exeの更新時間がmake.batを
起動した時間になっていることを確認する。
4、コマンドプロンプトを起動し、サンプルフォルダに移動、引数付きexe起動(アカウントIDとパスワードを付ける)test.exeを起動する。
起動例:test.exe xxxxxxxxxxx xxxxxxxxxxx
(サンプルexeを実行するだけならWindows XP以降なら特に問題ありません)
開発ツール:Windows付属のメモ帳でも十分ですが、専用に開発された統合開発環境を使って
開発するのが一般的です。
Express EditionがMicrosoftよりインターネットで無償で配布されているのでダウンロードしてみるのも
よろしいかもしれません。
その他注意事項:プログラムに関する一定の知識をお持ちの方を想定して解説させていただきますので、
ご了承ください。
下記リンクよりorder2goAPIをダウンロード、インストールしてください。
サンプルソース
また、解説用のサンプルソースは下記よりダウンロードできます。
サンプルソースを実行する場合、保存したフォルダにtest.logという空のファイルを作ってください。
注:サンプルソースは例外処理を行っておりませんので、参考資料としての範囲内でご利用ください。
解説
サンプルソースをもとに各機能ごとに解説していきます。
ログインページトップへ
APIを使用する手順としてまずはシステムにログインしなければなりません。
概要で申し込まれた結果、取引口座アカウントとパスワードをお持ちになっていると思います。
まだお持ちになられていない方はお申込みいただくかデモ口座をお申し込みください。
注:ログインし、使い終わりましたら必ずログアウトしてください。
Sub Login()
' CREATING ORDER2GO OBJECT AND LOGGING IN
Console.WriteLine( "Creating Order2Go Core...." )
oCore = CreateObject( "Order2Go.core" )
Console.WriteLine( "Core created. Creating Trade Desk...." )
oTradeDesk = oCore.CreateTradeDesk( "trader" )
Console.WriteLine( "Trade Desk Created. Logging in...." )
'oTradeDesk.Login( username, password, "http://www.fxcorporate.com/", "Demo")
oTradeDesk.Login( username, password, "http://fxcmj.fxcorporate.com/Hosts.jsp", "Real")
Console.WriteLine( "Logged in." )
End Sub
Sub Logout()
'UNSUBSCRIBING AND LOGGING OUT
Console.WriteLine("Unsubscribing and Logging out....")
oTradeDesk.Unsubscribe(subId)
oTradeDesk.Logout()
Console.WriteLine("Logged out.")
End Sub
1. Order2GoのCoreオブジェクトを呼び出します。
oCore = CreateObject( "Order2Go.core" )
Order2GoApiをインストールしていない場合、ここでエラーが出ます。
2. コアオブジェクトからtraderオブジェクトを呼び出します。
oTradeDesk = oCore.CreateTradeDesk( "trader" )
これは顧客側からの操作に関するオブジェクトです。
3. ログインをします。usernameとpasswordはここで使われます。
oTradeDesk.Login( username, password, "http://www.fxcorporate.com/", "Demo") oTradeDesk.Login( username, password, "http://fxcmj.fxcorporate.com/Hosts.jsp", "Real")
リアル口座の場合は"Real"の方を、デモ口座の場合は"Demo"の方をお使いください。
リアルタイムレート取得ページトップへ
注文条件を設定するためには、現在のレートを取得する必要があります。
各通貨ペア、先物オプション(CFD)のリアルタイムレートを取得してみましょう。
' ASK OUR CLASS TO SUBSCRIBE TO EVENTS (Look: Subscribe() Sub below)
ourClass.Subscribe()
'ourClass.OpenSampleTrade()
Dim i = 1
'リアルタイムレートを取得したい数だけ設定してください。
While( i < 10 )
Thread.Sleep(1000)
i = i + 1
System.Windows.Forms.Application.DoEvents()
End While
Sub Subscribe()
Console.WriteLine("Subscribing.....")
oEvents = New FXCore.TradeDeskEventsSink
AddHandler oEvents.OnRowChangedEx, AddressOf Me.OnRowChangedEx
subId = oTradeDesk.Subscribe(oEvents)
Console.WriteLine("Subscribed." )
End Sub
Public Sub OnRowChangedEx( ByVal _table As Object, ByVal sRowID As String, ByVal xString As String )
' OUR OnRowChangedEx EVENT HANDLER METHOD
' WE RECEIVE 3 VARIABLES: Reference to Table, RowID, and Extended Info String containing Data from the row that fired the Event.
table = _table
If (table.Type = "offers") Then
Try
' HERE WE USE A PARSER TO PARSE Extended Info STRING
oParser = oTradeDesk.GetParser()
oParser.ParseEventRow(xString, "offers")
' AND PRINTING IT OUT ON THE CONSOLE
Dim r_str As String
Dim dtNow As DateTime = DateTime.Now
r_str = "RATE UPDATE! -> " & dtNow.ToString() & " : " & CStr(oParser.GetValue("Instrument")) & " Ask: " & CStr(oParser.GetValue("Ask")) & " Bid: " & CStr(oParser.GetValue("Bid"))
r_str += " High: " & CStr(oParser.GetValue("Hi")) & " Low: " & CStr(oParser.GetValue("Low")) & " PipSize: " & CStr(oParser.GetValue("PointSize"))
'Console.WriteLine(r_str)
If (CStr(oParser.GetValue("Instrument")) = "USD/JPY" and CInt(oParser.GetValue("Ask")) = 85.390) Then
Me.OpenSampleTrade(CInt(oParser.GetValue("OfferID")))
End If
Dim sw As New System.IO.StreamWriter("test.log", _
True, _
System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(r_str & vbNewLine)
'閉じる
sw.Close()
Catch e As Exception
Console.WriteLine( "EXCEPTION: " + e.Message )
End
End Try
End If
End Sub
Sub Logout()
'UNSUBSCRIBING AND LOGGING OUT
Console.WriteLine("Unsubscribing and Logging out....")
oTradeDesk.Unsubscribe(subId)
oTradeDesk.Logout()
Console.WriteLine("Logged out.")
End Sub
1. リアルタイムレート取得時間を設定します。
Dim i = 1
While( i < 10 )
Thread.Sleep(1000)
i = i + 1
System.Windows.Forms.Application.DoEvents()
End While
ここでは10秒間、リアルタイムレートを取得しています。
Whileでloopしている間はレート取得が続いているということです。
好きな値を御入力ください。
2. リアルタイムレート取得のメソッドを設定します。
oEvents = New FXCore.TradeDeskEventsSink
AddHandler oEvents.OnRowChangedEx, AddressOf Me.OnRowChangedEx
subId = oTradeDesk.Subscribe(oEvents)
Console.WriteLine("Subscribed." )
ここではイベントOnRowChangedExを指定し登録しています。
イベントについては各自ご確認ください。
3. リアルタイムレート取得のメソッドを取り除きます。
Console.WriteLine("Unsubscribing and Logging out....")
oTradeDesk.Unsubscribe(subId)
イベントOnRowChangedExを解放しています。
4. リアルタイムレート取得のメソッド本体です。
Public Sub OnRowChangedEx( ByVal _table As Object, ByVal sRowID As String, ByVal xString As String )
イベントメソッドです。レートの更新毎にこのメソッドが呼ばれます。
この中では色々なレートに関する値が取得できます。
5. ファイル書き込みです。
Dim sw As New System.IO.StreamWriter("test.log", _
True, _
System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(r_str & vbNewLine)
sw.Close()
logファイルに書き出しています。必ずtest.logファイルを用意してください。
test.logには
RATE UPDATE! -> 2010/08/23 10:36:55 : GBP/AUD Ask: 1.75037 Bid: 1.74963 High: 1.74131 Low: 1.74045 PipSize: 0.0001
以上のようなリアルタイムレートが書き込まれます。
成行注文ページトップへ
成行注文を出します。
今回はUSD/JPYのレートが一定値になったら注文が出るようにします。
注:条件設定に注意してください。思いもよらない件数の注文が出るかもしれません。
Public Sub OnRowChangedEx( ByVal _table As Object, ByVal sRowID As String, ByVal xString As String )
' OUR OnRowChangedEx EVENT HANDLER METHOD
' WE RECEIVE 3 VARIABLES: Reference to Table, RowID, and Extended Info String containing Data from the row that fired the Event.
table = _table
If (table.Type = "offers") Then
Try
' HERE WE USE A PARSER TO PARSE Extended Info STRING
oParser = oTradeDesk.GetParser()
oParser.ParseEventRow(xString, "offers")
' AND PRINTING IT OUT ON THE CONSOLE
Dim r_str As String
Dim dtNow As DateTime = DateTime.Now
r_str = "RATE UPDATE! -> " & dtNow.ToString() & " : " & CStr(oParser.GetValue("Instrument")) & " Ask: " & CStr(oParser.GetValue("Ask")) & " Bid: " & CStr(oParser.GetValue("Bid"))
r_str += " High: " & CStr(oParser.GetValue("Hi")) & " Low: " & CStr(oParser.GetValue("Low")) & " PipSize: " & CStr(oParser.GetValue("PointSize"))
'Console.WriteLine(r_str)
If (CStr(oParser.GetValue("Instrument")) = "USD/JPY" and CInt(oParser.GetValue("Ask")) = 85.390) Then
Me.OpenSampleTrade(CInt(oParser.GetValue("OfferID")))
End If
Dim sw As New System.IO.StreamWriter("test.log", _
True, _
System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(r_str & vbNewLine)
'閉じる
sw.Close()
Catch e As Exception
Console.WriteLine( "EXCEPTION: " + e.Message )
End
End Try
End If
End Sub
Sub OpenSampleTrade(ByVal offerId As Integer)
Dim accounts As FXCore.TableAut
Dim accountId As String
Dim baseUnitSize As Long
' GET ACCOUNTS TABLE
accounts = oTradeDesk.FindMainTable("Accounts")
' GET ACCOUNT ID AND BASE UNIT SIZE
accountId = accounts.CellValue2(1,"AccountID")
baseUnitSize = accounts.CellValue2(1,"BaseUnitSize")
Dim offers As FXCore.TableAut
Dim instrument As String
Dim ask As Double
Dim quoteId As String
' GET OFFERS TABLE
offers = oTradeDesk.FindMainTable("Offers")
' GET FIRST AVAILABLE INSTRUMENT AND ASK RATE PLUS QUOTE ID FOR THAT
instrument = offers.CellValue2(offerId,"Instrument")
ask = offers.CellValue2(offerId,"Ask")
quoteId = offers.CellValue2(1,"QuoteID")
' OUTPUT VARIABLES
Dim orderId, dint As Object
' OPEN TRADE USING OUR VARIABLES
oTradeDesk.OpenTrade2(accountId, instrument, true, baseUnitSize, ask, quoteId, 0, oTradeDesk.SL_NONE, 0, 0, 0, orderId, dint)
' PRINT CONFIRMATION TO CONSOLE
Console.WriteLine("OrderID '{4}' Trade Opened -> Inst:{0}, Size:{1}, Rate:{2}, QID:{3}", instrument, baseUnitSize, ask, quoteId, orderId)
End Sub
1. 通貨USD/JPYでaskが85.390円になったら注文を出します。
If (CStr(oParser.GetValue("Instrument")) = "USD/JPY" and CInt(oParser.GetValue("Ask")) = 85.390) Then
Me.OpenSampleTrade(CInt(oParser.GetValue("OfferID")))
End If
御自分で好きな条件を設定してください。(通貨やレート、指定より上になったら起動など色々動かせます)
2. 注文数量を指定します。
baseUnitSize = accounts.CellValue2(1,"BaseUnitSize")
注文時の数量を設定します。ここではBaseUnitSizeを指定しています。弊社では注文数量のマイクロ化により1が指定されます。
3. 注文通貨を設定します。
instrument = offers.CellValue2(offerId,"Instrument")
注文を出したい通貨を指定します。リアルタイムレートのofferIdを指定してください。
4. askなのかbidなのか注文レートを設定します。
ask = offers.CellValue2(offerId,"Ask")
askかbidを設定します。また、リアルタイムレートのofferIdを指定してください。
5. 成行注文をリクエストします。
Dim orderId, dint As Object ' OPEN TRADE USING OUR VARIABLES 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ファイルをご覧ください。
免責事項:
サンプルプログラムや解説ページは当社のカスタマーサポート対象外であり、質問に対してお答えすることはできません。
サンプルプログラムや解説ページのご利用は、お客様の責任において行われるものとし、利用によって生じたあらゆる損害に対して、当社は一切の責任を負いません。
サンプルプログラムや解説ページは無償で提供されますが、プログラムやページの情報に何ら欠陥がないことを保証するものではありません。













