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をダウンロード、インストールしてください。

Order2go API ダウンロードはこちら

サンプルソース

また、解説用のサンプルソースは下記よりダウンロードできます。
サンプルソースを実行する場合、保存したフォルダに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ファイルをご覧ください。

免責事項:

サンプルプログラムや解説ページは当社のカスタマーサポート対象外であり、質問に対してお答えすることはできません。
サンプルプログラムや解説ページのご利用は、お客様の責任において行われるものとし、利用によって生じたあらゆる損害に対して、当社は一切の責任を負いません。
サンプルプログラムや解説ページは無償で提供されますが、プログラムやページの情報に何ら欠陥がないことを保証するものではありません。

  • 口座開設・資料請求
  • 法人口座のご案内
  • デモトレード 無料体験
  • ダウジョーンズFXCM米ドルインデックスバスケット
低スプレッドでアグレッシブな取引を!
メンテナンス・マージン制度 証拠金 1% までポジションを維持!
Video library
NDD VS DD
Live Chat
コールミーサービス
取引ツール
  • お客様ログイン
  • シストレログイン

ページトップ

コンテンツ一覧