VS2015_VB.NET_x64_调用COM组件演示程序源代码

源码下载地址:https://gitee.com/topview999/TopViewQHTCtpCom

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles button1.Click
        Dim ierr As Long = 0
        Dim serr As String = "sf111111111111111111111111"
        AddHandler tVQhtICtpClientAPI.OnEventsInfo, AddressOf OnMyEventsInfo 'OnEventsInfo(int InfoID, BSTR MsgInfo)
        AddHandler tVQhtICtpClientAPI.OnMarketData, AddressOf OnMyMarketData
        AddHandler tVQhtICtpClientAPI.OnTradeConnected, AddressOf MyOnTdForntConnectd
        AddHandler tVQhtICtpClientAPI.OnTradeDisconnected, AddressOf MyOnTradeDisconnected
        AddHandler tVQhtICtpClientAPI.OnMDConnected, AddressOf MyOnMDConnected
        AddHandler tVQhtICtpClientAPI.OnMDDisconnected, AddressOf MyOnMDDisconnected
        AddHandler tVQhtICtpClientAPI.OnOrder, AddressOf MyOnOrder
        AddHandler tVQhtICtpClientAPI.OnTrade, AddressOf MyOnTrade
        AddHandler tVQhtICtpClientAPI.OnOrderActionFailed, AddressOf MyOnOrderActionFailed
        AddHandler tVQhtICtpClientAPI.OnOrderCanceled, AddressOf MyOnOrderCanceled
        AddHandler tVQhtICtpClientAPI.OnOutPosition, AddressOf MyOnOutPosition
        AddHandler tVQhtICtpClientAPI.OnInstrumentStatus, AddressOf MyOnInstrumentStatus
        AddHandler tVQhtICtpClientAPI.OnGetPositionDetail, AddressOf MyOnGetPositionDetail
        AddHandler tVQhtICtpClientAPI.OnGetInstrument, AddressOf MyOnGetInstrument
        AddHandler tVQhtICtpClientAPI.OnRspError, AddressOf MyOnRspError
        AddHandler tVQhtICtpClientAPI.OnRspQryTrade, AddressOf MyOnRspQryTrade
        AddHandler tVQhtICtpClientAPI.OnInitFinished, AddressOf MyOnInitFinished
        AddHandler tVQhtICtpClientAPI.OnPushCancleOrder, AddressOf OnPushCancleOrder
        AddHandler tVQhtICtpClientAPI.OnDepthMarketData, AddressOf OnDepthMarketData
        AddHandler tVQhtICtpClientAPI.OnRspQryOrder, AddressOf OnRspQryOrder
        AddHandler tVQhtICtpClientAPI.OnOutProgress, AddressOf OnOutProgress
        AddHandler tVQhtICtpClientAPI.OnOutExchangeTradeTimes, AddressOf MyOnOutExchangeTradeTimes
        tVQhtICtpClientAPI.SetOrderCloseMode(0, ierr) '// 设置平仓时的优先顺序 : 0 先平昨再平今  1 先平今再平昨  默认为0 
        tVQhtICtpClientAPI.Login("config.ini", Me.textBox5.Text.ToString(), Me.textBox6.Text.ToString(), ierr, serr)
        Me.textBox1.AppendText("Loginid:" + ierr.ToString() + " Loginfo:" + serr.ToString() + tVQhtICtpClientAPI.GetAPIVersion() + vbCrLf)

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs)
        Dim i As Integer
        For i = 0 To 63
            tVQhtICtpClientAPI.SubscribeMD(MyInstr(i).InstrumentID)
            Me.textBox1.AppendText("SubscribeMD:" + MyInstr(i).InstrumentID + vbCrLf)
        Next
        tVQhtICtpClientAPI.SubscribeMD(Me.textBox3.Text.ToString())

    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles button4.Click
        MyUseVar.iBeginTest = 0
        If (Me.rb0.Checked = True) Then
            Dim ProductClass, MaxMarketOrderVolume, MinMarketOrderVolume,
          MaxLimitOrderVolume, MinLimitOrderVolume, IsTrading, OptionsType, CombinationType As Integer
            Dim LongMarginRatio, ShortMarginRatio, Multiply, PriceUnit, MarginRate As Double
            Dim ExchangeID, InstrumentName, ExchangeInstID, ProductID, ExpireDate As String
            tVQhtICtpClientAPI.GetInstrumentInfo(Me.textBox3.Text.ToString(), ProductClass, MaxMarketOrderVolume, MinMarketOrderVolume, MaxLimitOrderVolume, MinLimitOrderVolume,
             IsTrading, OptionsType, CombinationType, LongMarginRatio, ShortMarginRatio, Multiply, PriceUnit, MarginRate, ExchangeID, InstrumentName, ExchangeInstID, ProductID,
                                                 ExpireDate)
            Me.textBox1.AppendText(String.Format("查询合约:{0} 产品类型:{1} 市价单最大下单量:{2} 市价单最小下单量:{3} 限价单最大下单量:{4} 限价单最小下单量:{5} " +
                    "当前是否交易:{6} 期权类型:{7} 组合类型:{8} 多头保证金率:{9:f} 空头保证金率:{10:f} 合约数量乘数:{11:f} 最小变动价位:{12:f} 保证金率:{13:f} 交易所代码:{14} " +
                    "合约在交易所的代码:{15} 合约名称:{16} 产品代码:{17} 到期日:{18}", Me.textBox3.Text.ToString(), ProductClass, MaxMarketOrderVolume, MinMarketOrderVolume,
                    MaxLimitOrderVolume, MinLimitOrderVolume, IsTrading, OptionsType, CombinationType, LongMarginRatio, ShortMarginRatio, Multiply, PriceUnit,
                    MarginRate, ExchangeID, InstrumentName, ExchangeInstID, ProductID, ExpireDate) + vbCrLf)
        ElseIf (Me.rb1.Checked = True) Then
            tVQhtICtpClientAPI.GetPositionDetail(Me.textBox3.Text.ToString())
            Me.textBox1.AppendText(String.Format("查询:{0} 持仓", MyUseVar.sInstrumentID) + vbCrLf)
        ElseIf (Me.rb2.Checked = True) Then
            Dim PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit As Double
            tVQhtICtpClientAPI.GetAccount(PreBalance, Balance, PreMargin, Available,
                    WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit)
            Me.textBox1.AppendText(String.Format("静态权益:{0:f} 结算准备金:{1:f} 占用保证金:{2:f} " +
                    "可用资金:{3:f} 可取资金:{4:f} 交易所保证金:{5:f} 持仓盈亏:{6:f} 平仓盈亏:{7:f}",
                    PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, PositionProfit, CloseProfit) + vbCrLf)
        ElseIf (Me.rb3.Checked = True) Then
            tVQhtICtpClientAPI.GetTradeInfo(Me.textBox3.Text.ToString())
            Me.textBox1.AppendText(String.Format("查询:{0} 成交信息", Me.textBox3.Text.ToString()) + vbCrLf)
        ElseIf (Me.rb4.Checked = True) Then
            tVQhtICtpClientAPI.SettlementInfoConfirm()
            Me.textBox1.AppendText(String.Format("确认结算单 !", Me.textBox3.Text.ToString()) + vbCrLf)
        ElseIf (Me.rb5.Checked = True) Then

        ElseIf (Me.rb6.Checked = True) Then
            Dim vOrderId, vIsCanC As Integer
            vOrderId = CInt(Me.textBox3.Text)
            tVQhtICtpClientAPI.IsOrderOpen(vOrderId, vIsCanC)
            Me.textBox1.AppendText(vMyTimeStr + " 订单:" + vOrderId.ToString() +
                " 是否可撤:" + vIsCanC.ToString() + " (0 :不可撤 1:可撤)" + vbCrLf)
        ElseIf (Me.rb7.Checked = True) Then
            Dim vd1, vd2 As Integer

            Dim lpp, spp, lprice, bidprice, sprice, askprice As Double
            tVQhtICtpClientAPI.GetPositionPlus(Me.textBox3.Text.ToString(),
                    MyUseVar.MyPostion.LongPostion, MyUseVar.MyPostion.LongYDPostion, MyUseVar.MyPostion.LongFrozen,
                    vd1, lprice, lpp,
                    MyUseVar.MyPostion.ShortPostion, MyUseVar.MyPostion.ShortYDPostion, MyUseVar.MyPostion.ShortFrozen,
                    vd2, sprice, spp, bidprice, askprice)
            Me.textBox1.AppendText(String.Format("{0}  多头仓位:{1} 昨仓:{2} 冻结仓位:{3} 开仓挂起:{4} 持仓价格:{5:f} 持仓盈亏:{6:f} " +
                                                 "BidPrice:{7:f} 空头仓位:{8} 昨仓:{9} 冻结仓位:{10} 开仓挂起:{11} 持仓价格:{12:f} 持仓盈亏:{13:f} AskPrice:{14:f}",
                                                  Me.textBox3.Text.ToString(),
                    MyUseVar.MyPostion.LongPostion, MyUseVar.MyPostion.LongYDPostion, MyUseVar.MyPostion.LongFrozen,
                    vd1, lprice, lpp, bidprice,
                    MyUseVar.MyPostion.ShortPostion, MyUseVar.MyPostion.ShortYDPostion, MyUseVar.MyPostion.ShortFrozen,
                    vd2, sprice, spp, askprice) + vbCrLf)
            '多头仓位:IF2301 昨仓:1 冻结仓位:1 开仓挂起:0 持仓价格:0.00 持仓盈亏:3947.40 BidPrice:-120.00 空头仓位:3947 昨仓:1 冻结仓位:1 开仓挂起:0 持仓价格:0.00 持仓盈亏:3947.40 AskPrice:-120.00
        ElseIf (Me.rb8.Checked = True) Then
            Dim getflag As Integer
            tVQhtICtpClientAPI.GetHisOrderList("", getflag) '//查询历史订单信息 不为空查询指定合约。
            ' //tVQhtICtpClientAPI.GeMeOrderList("IF2111")//查询历史订单信息 为空查询所有。
        ElseIf (Me.rb9.Checked = True) Then
            Dim YdClose, YdSettlement, Open, Last, Bid1, Ask1, Highest, Lowest, TradedAmmount As Double
            Dim Bid1Volume, Ask1Volume, TradedVolume As Integer
            tVQhtICtpClientAPI.GetMarketData(Me.textBox3.Text.ToString(), YdClose, YdSettlement, Open, Last, Bid1, Ask1, Bid1Volume, Ask1Volume, Highest, Lowest,
                    TradedVolume, TradedAmmount)
            Me.textBox1.AppendText(String.Format("{0} YdClose:{1:F2} YdSettlement:{2:F2} Open:{3:F2} " +
                    "Last:{4:F2} Bid1:{5:F2} Ask1:{6:F2} Bid1Volume:{7} Ask1Volume:{8} " +
                    "Highest:{9:F2} Lowest:{10:F2} TradedVolume:{11} TradedAmmount:{12:F2}\r\n",
                    MyUseVar.sInstrumentID, YdClose, YdSettlement, Open, Last, Bid1, Ask1, Bid1Volume,
                    Ask1Volume, Highest, Lowest, TradedVolume, TradedAmmount))
        ElseIf (Me.rb10.Checked = True) Then
            tVQhtICtpClientAPI.PrintOrderInfo()
            Me.textBox1.AppendText(String.Format("输出信息到:{0} 目录的{0}.txt文件中完成!{1}", Me.textBox5.Text.ToString(), vbCrLf))
        ElseIf (Me.rb11.Checked = True) Then
            Dim OpenRatioByVolume, OpenRatioByMoney, CloseRatioByMoney, CloseRatioByVolume, CloseTodayRatioByMoney, CloseTodayRatioByVolume As Double
            tVQhtICtpClientAPI.GetInstrumentRatio(Me.textBox3.Text.ToString(), OpenRatioByMoney, OpenRatioByVolume, CloseRatioByMoney,
                   CloseRatioByVolume, CloseTodayRatioByMoney, CloseTodayRatioByVolume)
            Me.textBox1.AppendText(String.Format("{0} OpenRatioByMoney:{1} OpenRatioByVolume:{2} CloseRatioByMoney:{3} CloseRatioByVolume:{4} " +
                "CloseTodayRatioByMoney :{5} CloseTodayRatioByVolume:{6}vbCrLf", Me.textBox3.Text.ToString(), OpenRatioByMoney,
                OpenRatioByVolume, CloseRatioByMoney, CloseRatioByVolume, CloseTodayRatioByMoney, CloseTodayRatioByVolume))
        ElseIf (Me.rb12.Checked = True) Then
            Dim PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit As Double
            tVQhtICtpClientAPI.GetRealAccount(PreBalance, Balance, PreMargin, Available, WithdrawQuota,
                    ExchangeMargin, CloseProfit, PositionProfit)
            Me.textBox1.AppendText(String.Format("静态权益:{0} 结算保证金:{1} 占用保证金:{2} 可用资金:{3} 可取资金:{4} 交易所保证金:{5} 平仓盈亏:{6} 持仓盈亏:{7}vbCrLf",
                PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit))
        ElseIf (Me.rb13.Checked = True) Then
            Dim lsp, ssp As Double
            tVQhtICtpClientAPI.GetRealPosition(Me.textBox3.Text.ToString(), MyUseVar.MyPostion.LongPostion, MyUseVar.MyPostion.LongYDPostion,
                    MyUseVar.MyPostion.LongFrozen, lsp, MyUseVar.MyPostion.ShortPostion, MyUseVar.MyPostion.ShortYDPostion,
                                    MyUseVar.MyPostion.ShortFrozen, ssp)
            Me.textBox1.AppendText(String.Format("{0} 多头仓位:{1} 昨仓:{2} 冻结仓位:{3} 持仓价格:{4} 空头仓位:{5} 昨仓:{6} 冻结仓位:{7} 持仓价格:{8}vbCrLf",
                Me.textBox3.Text.ToString(), MyUseVar.MyPostion.LongPostion, MyUseVar.MyPostion.LongYDPostion, MyUseVar.MyPostion.LongFrozen, lsp,
                MyUseVar.MyPostion.ShortPostion, MyUseVar.MyPostion.ShortYDPostion, MyUseVar.MyPostion.ShortFrozen, ssp))
        ElseIf (Me.rb14.Checked = True) Then
            Dim vOrderId, vIsCanC As Integer
            Try
                vOrderId = Convert.ToInt32(Me.textBox7.Text.ToString())
            Catch ex As Exception
                vOrderId = 0
            End Try
            tVQhtICtpClientAPI.CancelOrder(vOrderId, vIsCanC)
            Me.textBox1.AppendText(vMyTimeStr + " 订单:" + vOrderId.ToString() + " 撤单状态:" + vIsCanC.ToString() + " 【0:撤单成功 其它:撤单不成功】vbCrLf")
        ElseIf (Me.rb15.Checked = True) Then
            Dim IsOk, Counts, Period As Integer
            Period = 1
            tVQhtICtpClientAPI.CreateBars(Me.textBox3.Text.ToString(), Period, Counts, IsOk)
            Me.textBox1.AppendText(String.Format(" 合约:{0} 创建{1}分钟周期BARS完成:{2} 【1:创建成功 2:此周期已创建 -1:创建不成功】当前分钟计数器:{3}vbCrLf",
               Me.textBox3.Text.ToString(), Period, IsOk, Counts))
            If (IsOk = 2) Then
                tVQhtICtpClientAPI.DeleteBars(Me.textBox3.Text.ToString(), Period, IsOk)
                Me.textBox1.AppendText(String.Format(" 合约:{0} 删除{1}分钟周期BARS完成:{2} 【1:创建成功 2:此周期已创建 -1:创建不成功】vbCrLf",
                   Me.textBox3.Text.ToString(), Period, IsOk))
            End If
        ElseIf (Me.rb17.Checked = True) Then
            Dim vopen, vhight, vclose, vlow As Double
            Dim vmaxi, tmppe, counts, vvloumes As Integer
            Dim vuptime As String
            tVQhtICtpClientAPI.GetBars(Me.textBox3.Text.ToString(), tmppe, 0, vmaxi, vopen, vclose, vhight, vlow, vvloumes, counts, vuptime)
            Me.textBox1.AppendText(String.Format("合约{0} K线数据 周期:{1} 计数器:{2} 长度:{3} 序号:{4} open:{5} vclose:{6} vhight:{7} vlow:{8} vvloumes:{9} counts:{10} vuptime:{11}vbCrLf",
               Me.textBox3.Text.ToString(), tmppe, counts, vmaxi, 0, vopen, vclose, vhight, vlow, vvloumes, counts, vuptime))
            If (vmaxi > 1) Then
                Dim vl As Integer = vmaxi
                For i As Integer = 1 To vl
                    tVQhtICtpClientAPI.GetBars(Me.textBox3.Text.ToString(), tmppe, i, vmaxi, vopen, vclose, vhight, vlow, vvloumes, counts, vuptime)
                    Me.textBox1.AppendText(String.Format("合约{0} K线数据 周期:{1} 计数器:{2} 长度:{3} 序号:{4} open:{5} vclose:{6} vhight:{7} vlow:{8} vvloumes:{9} counts:{10} vuptime:{11}vbCrLf",
                       Me.textBox3.Text.ToString(), tmppe, counts, vmaxi, i, vopen, vclose, vhight, vlow, vvloumes, counts, vuptime))
                Next
            End If
        ElseIf (Me.rb18.Checked = True) Then
            Dim vinfoid As Integer = 0
            Dim vinfo As String = ""
            Me.textBox1.AppendText("==========CZCE======添加合约苹果2305交易时间段=========================" + vbCrLf) ''CZCE

            tVQhtICtpClientAPI.AppendExchangeTradeTimes("CZCE", "AP2305", 9, 0, 75, 0, vinfoid, vinfo)   ''开盘时间段 标志位是 0 收盘时间段标志位是9 其他为1
            Me.textBox1.AppendText(String.Format("添加:{0} 合约:{1}交易时间段:{2}:{3}:{4}  vinfoid::{5}", "CZCE", "AP2305", 9, 0, vinfo, vinfoid) + vbCrLf)

            tVQhtICtpClientAPI.AppendExchangeTradeTimes("CZCE", "AP2305", 10, 30, 60, 1, vinfoid, vinfo)  ''开盘时间段 标志位是 0 收盘时间段标志位是9 其他为1
            Me.textBox1.AppendText(String.Format("添加:{0} 合约:{1}交易时间段:{2}:{3}:{4}  vinfoid::{5}", "CZCE", "AP2305", 10, 30, vinfo, vinfoid) + vbCrLf)

            tVQhtICtpClientAPI.AppendExchangeTradeTimes("CZCE", "AP2305", 13, 30, 90, 9, vinfoid, vinfo)    ''开盘时间段 标志位是 0 收盘时间段标志位是9 其他为1
            Me.textBox1.AppendText(String.Format("添加:{0} 合约:{1}交易时间段:{2}:{3}:{4}  vinfoid::{5}", "CZCE", "AP2305", 13, 30, vinfo, vinfoid) + vbCrLf)

            Me.textBox1.AppendText("==========SHFE======添加苹果所有合约交易时间段=========================" + vbCrLf) ''CZCE

            tVQhtICtpClientAPI.AppendExchangeTradeTimes("CZCE", "AP999", 9, 0, 75, 0, vinfoid, vinfo)   ''开盘时间段 标志位是 0 收盘时间段标志位是9 其他为1
            Me.textBox1.AppendText(String.Format("添加:{0} 合约:{1}交易时间段:{2}:{3}:{4}  vinfoid::{5}", "CZCE", "AP999", 9, 0, vinfo, vinfoid) + vbCrLf)

            tVQhtICtpClientAPI.AppendExchangeTradeTimes("CZCE", "AP999", 10, 30, 60, 1, vinfoid, vinfo)  ''开盘时间段 标志位是 0 收盘时间段标志位是9 其他为1
            Me.textBox1.AppendText(String.Format("添加:{0} 合约:{1}交易时间段:{2}:{3}:{4}  vinfoid::{5}", "CZCE", "AP999", 10, 30, vinfo, vinfoid) + vbCrLf)

            tVQhtICtpClientAPI.AppendExchangeTradeTimes("CZCE", "AP999", 13, 30, 90, 9, vinfoid, vinfo)    ''开盘时间段 标志位是 0 收盘时间段标志位是9 其他为1
            Me.textBox1.AppendText(String.Format("添加:{0} 合约:{1}交易时间段:{2}:{3}:{4}  vinfoid::{5}", "CZCE", "AP999", 13, 30, vinfo, vinfoid) + vbCrLf)

            Me.textBox1.AppendText("============删除合约苹果2305交易时间段============================" + vbCrLf)

            tVQhtICtpClientAPI.DeleteExchangeTradeTimes("CZCE", "AP2305", vinfoid, vinfo)

            Me.textBox1.AppendText(String.Format("删除{0} 合约{1}交易时间 {2}", "CZCE", "AP2305", vinfo) + vbCrLf)

            Me.textBox1.AppendText("==========SHFE======螺纹合约交易时间段=========================" + vbCrLf)
            tVQhtICtpClientAPI.GetOutExchangeTradeTimes("SHFE", "rb9999")
            Me.textBox1.AppendText("================获取全部交易所全部合约交易时间段=========================" + vbCrLf) ''CZCE
            tVQhtICtpClientAPI.GetOutExchangeTradeTimes("", "")
        End If 'Me.Rb0.Checked
    End Sub 'Button4_Click、、
''===============================显示时间=========================================================
    Private Delegate Sub DelegateSetTimeLabel1(vts As String)
    Private Sub SetTimeLabel1(vts As String) ''显示时间
        Me.label1.Text = "时间:" + vts
    End Sub
    ''========================================================================================
    '====================刷新账户资金状况.代码==================================
    Private Delegate Sub DelegateSetAccoutTable2()
    Private Sub InvokeSetAccoutTable2()
        Me.BeginInvoke(New DelegateSetAccoutTable2(AddressOf SetAccoutTable2)) ''显示账户资金状况
    End Sub
    Private Sub SetAccoutTable2()
        Dim PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit As Double
        tVQhtICtpClientAPI.GetAccount(PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit)
        Me.dataGridView2.Rows(0).Cells(0).Value = PreBalance.ToString()  '//静态权益
        Me.dataGridView2.Rows(0).Cells(1).Value = Balance.ToString()  '// 结算保证金
        Me.dataGridView2.Rows(0).Cells(2).Value = PreMargin.ToString()  '//占用保证金
        Me.dataGridView2.Rows(0).Cells(3).Value = Available.ToString()  '//可用资金
        Me.dataGridView2.Rows(0).Cells(4).Value = WithdrawQuota.ToString()  '//可取资金
        Me.dataGridView2.Rows(0).Cells(5).Value = ExchangeMargin.ToString()  '//交易所保证金
        Me.dataGridView2.Rows(0).Cells(6).Value = PositionProfit.ToString()  '//持仓盈亏或浮动盈亏
        Me.dataGridView2.Rows(0).Cells(7).Value = CloseProfit.ToString()  '//平仓盈亏
    End Sub
    ''========================================================================================
    '====================刷新持仓盈利==================================
    Private Delegate Sub DelegateSetPositionsTable4()
    Private Sub InvokeSetPositionsTable4()
        Me.BeginInvoke(New DelegateSetPositionsTable4(AddressOf SetPositionsTable4)) ''显示账户资金状况
    End Sub
    Private Sub SetPositionsTable4()
        Dim vd1, vd2 As Integer
        Dim lpp, spp, lprice, bidprice, sprice, askprice As Double
        For i As Integer = 0 To MyPositionlist.Count - 1
            If (MyPositionlist(i).买卖 = " 卖") Then
                Try
                    tVQhtICtpClientAPI.GetPositionPlus(MyPositionlist(i).合约名称.ToString(),
                    MyUseVar.MyPostion.LongPostion, MyUseVar.MyPostion.LongYDPostion, MyUseVar.MyPostion.LongFrozen,
                    vd1, lprice, lpp,
                    MyUseVar.MyPostion.ShortPostion, MyUseVar.MyPostion.ShortYDPostion, MyUseVar.MyPostion.ShortFrozen,
                    vd2, sprice, spp, bidprice, askprice)
                    MyPositionlist(i).BidPrice = bidprice
                    MyPositionlist(i).AskPrice = askprice
                    MyPositionlist(i).持仓盈亏 = spp
                    MyPositionlist(i + 1).BidPrice = bidprice
                    MyPositionlist(i + 1).AskPrice = askprice
                    MyPositionlist(i + 1).持仓盈亏 = lpp
                Catch ex As Exception
                End Try
            End If
        Next
        Me.dataGridView4.DataSource = vbNull  '必须加此代码,否则表格不显示。
        Me.dataGridView4.DataSource = MyPositionlist
    End Sub
    ''========================================================================================
    Private Delegate Sub DelegateSetAccountPositionTable()
    Private Sub InvokeSetAccountPositionTable()
        While (True) ''while 循环一定要放在线程直接调用的过程中。放在其它过程中 程序CPU占有率高或程序卡顿、崩溃。
            Thread.Sleep(1000)
            Dim vsec As Integer = DateTime.Now.Second
            If (vsec <> MyUseVar.RefSec) Then
                MyUseVar.RefSec = vsec
                vMyTimeStr = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
                Me.BeginInvoke(New DelegateSetTimeLabel1(AddressOf SetTimeLabel1), vMyTimeStr) ''显示时间
                Dim vt As New Thread(New ThreadStart(AddressOf InvokeSetAccoutTable2))  ''显示账户资金状况
                vt.IsBackground = True
                vt.Start()
                Dim vt1 As New Thread(New ThreadStart(AddressOf InvokeSetPositionsTable4))  ''刷新持仓盈利
                vt1.IsBackground = True
                vt1.Start()
            End If
        End While
    End Sub
    '=====================================================================
    Public Sub MyOnInitFinished() '//初始化完成后回报。
        Me.textBox1.AppendText("MyOnInitFinished OK!" + vbCrLf)
        Dim vt1 As New Thread(New ThreadStart(AddressOf InvokeSetAccountPositionTable))
        vt1.IsBackground = True
        vt1.Start()
    End Sub
''//#==================循环开平仓操作=================================
    Private Delegate Sub DelegateOpenCloseDoit()
    Private Sub InvokeOpenCloseDoit()
        While (True) ''while 循环一定要放在线程直接调用的过程中。放在其它过程中 程序CPU占有率高或程序卡顿、崩溃。
            Thread.Sleep(MyUseVar.Interval)
            Me.BeginInvoke(New DelegateOpenCloseDoit(AddressOf OpenCloseDoit)) ''OpenCloseDoit
        End While
    End Sub
    Private Function GetRandom(vb As Integer, ve As Integer) As Integer
        Dim vrand As Random = New Random(Guid.NewGuid().GetHashCode())
        Return vrand.Next(vb, ve)
    End Function
    Private Sub OpenCloseDoit()
        If (MyUseVar.vloop = 0) Then ''获取持仓仓位 判断是否有可撤订单
            Me.textBox4.AppendText("======TickCount:" + System.Environment.TickCount.ToString() + "=======================" + vbCrLf)
            Dim vd1, vd2 As Double
            tVQhtICtpClientAPI.GetPosition(MyUseVar.sInstrumentID, MyUseVar.MyPostion.LongPostion, MyUseVar.MyPostion.LongYDPostion, MyUseVar.MyPostion.LongFrozen, vd1,
                    MyUseVar.MyPostion.ShortPostion, MyUseVar.MyPostion.ShortYDPostion, MyUseVar.MyPostion.ShortFrozen, vd2)
            Me.textBox4.AppendText(" Tick:" + System.Environment.TickCount.ToString() + " 多头仓位:" + MyUseVar.MyPostion.LongPostion.ToString() +
                    " 昨仓:" + MyUseVar.MyPostion.LongYDPostion.ToString() + " 冻结仓位:" + MyUseVar.MyPostion.LongFrozen.ToString() +
                    " 空头仓位:" + MyUseVar.MyPostion.ShortPostion.ToString() + " 昨仓:" + MyUseVar.MyPostion.ShortYDPostion.ToString() +
                    " 冻结仓位:" + MyUseVar.MyPostion.ShortFrozen.ToString() + vbCrLf)
            MyUseVar.vIsCanC = 0
            MyUseVar.vIsCanC1 = 0
            MyUseVar.vIsCanC2 = 0
            MyUseVar.vIsCanC3 = 0
            If (MyUseVar.MyPostion.LongOrder > 0 Or MyUseVar.MyPostion.LongOrder1 > 0 Or MyUseVar.MyPostion.ShortOrder > 0 Or MyUseVar.MyPostion.ShortOrder1 > 0) Then
                If (MyUseVar.MyPostion.LongOrder > 0) Then
                    Me.tVQhtICtpClientAPI.IsOrderOpen(MyUseVar.MyPostion.LongOrder, MyUseVar.vIsCanC)
                    Me.textBox4.AppendText(String.Format("LongOrder订单:{0} 是否可撤:{1} (0 :不可撤 1:可撤){2}", MyUseVar.MyPostion.LongOrder, MyUseVar.vIsCanC, vbCrLf))
                End If
                If (MyUseVar.MyPostion.LongOrder1 > 0) Then
                    Me.tVQhtICtpClientAPI.IsOrderOpen(MyUseVar.MyPostion.LongOrder1, MyUseVar.vIsCanC1)
                    Me.textBox4.AppendText(String.Format("LongOrder1订单:{0} 是否可撤:{1} (0 :不可撤 1:可撤){2}", MyUseVar.MyPostion.LongOrder1, MyUseVar.vIsCanC1, vbCrLf))
                End If
                If (MyUseVar.MyPostion.ShortOrder > 0) Then
                    Me.tVQhtICtpClientAPI.IsOrderOpen(MyUseVar.MyPostion.ShortOrder, MyUseVar.vIsCanC2)
                    Me.textBox4.AppendText(String.Format("ShortOrder订单:{0} 是否可撤:{1} (0 :不可撤 1:可撤){2}", MyUseVar.MyPostion.ShortOrder, MyUseVar.vIsCanC2, vbCrLf))
                End If
                If (MyUseVar.MyPostion.ShortOrder1 > 0) Then
                    Me.tVQhtICtpClientAPI.IsOrderOpen(MyUseVar.MyPostion.ShortOrder1, MyUseVar.vIsCanC3)
                    Me.textBox4.AppendText(String.Format("ShortOrder1订单:{0} 是否可撤:{1} (0 :不可撤 1:可撤){2}", MyUseVar.MyPostion.ShortOrder1, MyUseVar.vIsCanC3, vbCrLf))
                End If
            End If
            If (MyUseVar.vIsCanC = 1 Or MyUseVar.vIsCanC1 = 1 Or MyUseVar.vIsCanC2 = 1 Or MyUseVar.vIsCanC3 = 1) Then
                MyUseVar.vloop = 1
            Else
                MyUseVar.vloop = 4
            End If
        End If '结束vloop=0 步骤 获取持仓仓位 判断是否有可撤订单
        '==========================================
        If (MyUseVar.vloop = 1) Then ''有订单可撤时 等待时间
            MyUseVar.vWaitInCancle = MyUseVar.vWaitInCancle + 1
            If (MyUseVar.vWaitInCancle >= MyUseVar.vWaitCancleInt) Then
                MyUseVar.vWaitInCancle = 0
                MyUseVar.vloop = 2
            End If
        End If '结束vloop=1 步骤 有订单可撤时 等待时间
        '==========================================
        If (MyUseVar.vloop = 2) Then ''有订单可撤 撤单
            If (MyUseVar.vIsCanC = 1) Then ' #longorder可撤
                tVQhtICtpClientAPI.CancelOrder(MyUseVar.MyPostion.LongOrder, MyUseVar.vIsCanC)
                Me.textBox4.AppendText(String.Format("LongOrder订单:{0} 空头撤单 状态:{1}【0:撤单成功 其它:撤单不成功】vbCrLf",
                    MyUseVar.MyPostion.LongOrder, MyUseVar.vIsCanC))
            End If
            If (MyUseVar.vIsCanC1 = 1) Then ' #longorder可撤
                tVQhtICtpClientAPI.CancelOrder(MyUseVar.MyPostion.LongOrder1, MyUseVar.vIsCanC1)
                Me.textBox4.AppendText(String.Format("LongOrder1订单:{0} 空头撤单 状态:{1}【0:撤单成功 其它:撤单不成功】vbCrLf",
                    MyUseVar.MyPostion.LongOrder1, MyUseVar.vIsCanC1))
            End If
            If (MyUseVar.vIsCanC2 = 1) Then ' #Shortorder可撤
                tVQhtICtpClientAPI.CancelOrder(MyUseVar.MyPostion.ShortOrder, MyUseVar.vIsCanC2)
                Me.textBox4.AppendText(String.Format("ShortOrder订单:{0} 空头撤单 状态:{1}【0:撤单成功 其它:撤单不成功】vbCrLf",
                    MyUseVar.MyPostion.ShortOrder, MyUseVar.vIsCanC2))
            End If
            If (MyUseVar.vIsCanC3 = 1) Then ' #Shortorder可撤
                tVQhtICtpClientAPI.CancelOrder(MyUseVar.MyPostion.ShortOrder1, MyUseVar.vIsCanC3)
                Me.textBox4.AppendText(String.Format("ShortOrder1订单:{0} 空头撤单 状态:{1}【0:撤单成功 其它:撤单不成功】vbCrLf",
                    MyUseVar.MyPostion.ShortOrder1, MyUseVar.vIsCanC3))
            End If
            MyUseVar.vloop = 3
        End If  '结束vloop=2步骤 有订单可撤 撤单
        '==========================================
        If (MyUseVar.vloop = 3) Then ''有订单可撤时 等待时间
            MyUseVar.vWaitInCancle = MyUseVar.vWaitInCancle + 1
            If (MyUseVar.vWaitInCancle >= MyUseVar.vWaitCancleInt) Then
                MyUseVar.vWaitInCancle = 0
                MyUseVar.vloop = 4
            End If
        End If  '结束vloop=3步骤 有订单可撤时 等待时间
        '==========================================
        If (MyUseVar.vloop = 4) Then ''#循环开平仓开始 random.randint(1,10)
            '#=========================多头开平仓操作=================================
            Dim vrandtvol As Integer
            If (MyUseVar.MyPostion.LongPostion > 0 And MyUseVar.MyPostion.LongPostion < MyUseVar.iVolT) Then
                '=============================
                If (MyUseVar.MyPostion.LongOrderFlag = 1) Then '上次平仓
                    vrandtvol = GetRandom(1, MyUseVar.MyPostion.LongPostion) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Sell(MyUseVar.sInstrumentID, vrandtvol, vMyBidPrice, MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " LongOrder:" + MyUseVar.MyPostion.LongOrder.ToString() +
                     " LongOrder1:" + MyUseVar.MyPostion.LongOrder1.ToString() + " 继续平多头仓位:" + vrandtvol.ToString() + vbCrLf)
                Else
                    vrandtvol = GetRandom(1, MyUseVar.iVolT) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Buy(MyUseVar.sInstrumentID, vrandtvol, vMyAskPrice, MyUseVar.MyPostion.LongOrder)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " LongOrder:" + MyUseVar.MyPostion.LongOrder.ToString() +
                    " 继续多头买开仓:" + vrandtvol.ToString() + vbCrLf)
                End If
                '=============================
            Else
                '=============================
                If (MyUseVar.MyPostion.LongPostion >= MyUseVar.iVolT) Then
                    Dim vrandtvol1 As Integer = GetRandom(1, MyUseVar.MyPostion.LongPostion) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Sell(MyUseVar.sInstrumentID, vrandtvol1, vMyBidPrice, MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " LongOrder:" + MyUseVar.MyPostion.LongOrder.ToString() +
                     " LongOrder1:" + MyUseVar.MyPostion.LongOrder1.ToString() + " 平多头多余仓位:" + vrandtvol1.ToString() + vbCrLf)
                    MyUseVar.MyPostion.LongOrderFlag = 1
                End If
                If (MyUseVar.MyPostion.LongPostion <= 0) Then '无持仓时
                    Dim vrandtvol1 As Integer = GetRandom(1, MyUseVar.iVolT) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Buy(MyUseVar.sInstrumentID, vrandtvol1, vMyAskPrice, MyUseVar.MyPostion.LongOrder)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " LongOrder:" + MyUseVar.MyPostion.LongOrder.ToString() +
                    " 多头买开仓:" + vrandtvol1.ToString() + vbCrLf)
                    MyUseVar.MyPostion.LongOrderFlag = 0
                End If
                '=============================
            End If '================结束多头开平仓操作======================================
            '#=========================空头开平仓操作=================================
            If (MyUseVar.MyPostion.ShortPostion > 0 And MyUseVar.MyPostion.ShortPostion < MyUseVar.iVolT) Then
                '=============================
                If (MyUseVar.MyPostion.ShortOrderFlag = 1) Then '上次平仓
                    vrandtvol = GetRandom(1, MyUseVar.MyPostion.ShortPostion) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Cover(MyUseVar.sInstrumentID, vrandtvol, vMyAskPrice, MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " ShortOrder:" + MyUseVar.MyPostion.ShortOrder.ToString() +
                    " ShortOrder1:" + MyUseVar.MyPostion.ShortOrder1.ToString() + " 继续平空头仓位:" + vrandtvol.ToString() + vbCrLf)
                Else
                    vrandtvol = GetRandom(1, MyUseVar.iVolT) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Short(MyUseVar.sInstrumentID, vrandtvol, vMyBidPrice, MyUseVar.MyPostion.ShortOrder)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " ShortOrder:" + MyUseVar.MyPostion.ShortOrder.ToString() +
                    " 继续空头卖开仓:" + vrandtvol.ToString() + vbCrLf)
                End If
                '=============================
            Else
                '=============================
                If (MyUseVar.MyPostion.ShortPostion >= MyUseVar.iVolT) Then
                    Dim vrandtvol1 As Integer = GetRandom(1, MyUseVar.MyPostion.ShortPostion) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Cover(MyUseVar.sInstrumentID, vrandtvol1, vMyAskPrice, MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " ShortOrder:" + MyUseVar.MyPostion.ShortOrder.ToString() +
                     " ShortOrder1:" + MyUseVar.MyPostion.ShortOrder1.ToString() + " 平空头多余仓位:" + vrandtvol1.ToString() + vbCrLf)
                    MyUseVar.MyPostion.ShortOrderFlag = 1
                End If
                If (MyUseVar.MyPostion.ShortPostion <= 0) Then
                    Dim vrandtvol1 As Integer = GetRandom(1, MyUseVar.iVolT) '  # 产生随机开平仓手数量
                    tVQhtICtpClientAPI.Short(MyUseVar.sInstrumentID, vrandtvol1, vMyBidPrice, MyUseVar.MyPostion.ShortOrder)
                    Me.textBox4.AppendText(vMyTimeStr + " Tick:" + System.Environment.TickCount.ToString() + " ShortOrder:" + MyUseVar.MyPostion.ShortOrder.ToString() +
                    " 空头卖开仓:" + vrandtvol1.ToString() + vbCrLf)
                    MyUseVar.MyPostion.ShortOrderFlag = 0
                End If
                '=============================
            End If  '================结束空头开平仓操作======================================
            MyUseVar.vloop = 5
        End If  '结束vloop=4步骤 循环开平仓开始
        '==========================================
        If (MyUseVar.vloop = 5) Then ''#下订单后等待时间
            MyUseVar.vWaitInOrder = MyUseVar.vWaitInOrder + 1
            If (MyUseVar.vWaitInOrder >= MyUseVar.vWaitOrderInt) Then
                MyUseVar.vWaitInOrder = 0
                MyUseVar.vloop = 0
                Me.textBox4.AppendText("===================================================================================" + vbCrLf)
            End If
        End If
    End Sub
    Private Sub SetCloseMode()
        Dim vm, vsetok As Integer
        If (radioButton8.Checked) Then
            vm = 0
        Else
            vm = 1
        End If
        tVQhtICtpClientAPI.SetOrderCloseMode(vm, vsetok)
        Me.textBox1.AppendText(String.Format("设置平仓模式为:{0} 【0:先平昨再平今 1:先平今再平昨  默认为0】," +
                "设置成功于否标志:{1}(0:设置成功 1:设置不成功{2}", vm, vsetok, vbCrLf))
    End Sub
    Private Sub radioButton7_CheckedChanged(sender As Object, e As EventArgs) Handles radioButton7.CheckedChanged
        SetCloseMode()
    End Sub

    Private Sub radioButton8_CheckedChanged(sender As Object, e As EventArgs) Handles radioButton8.CheckedChanged
        SetCloseMode()
    End Sub

    ''=====================================================================================================================================
    Private Sub button8_Click(sender As Object, e As EventArgs) Handles button8.Click
        MyUseVar.iBeginTest = 1 - MyUseVar.iBeginTest
        If (MyUseVar.iBeginTest = 1) Then
            button8.Text = "暂停开平仓循环测试"
            OpenCloseThread = New Thread(New ThreadStart(AddressOf InvokeOpenCloseDoit))  ''OpenCloseDoit
            OpenCloseThread.IsBackground = True
            OpenCloseThread.Start()
        Else
            button8.Text = "开始开平仓循环测试"
            OpenCloseThread.Abort()
        End If

    End Sub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值