ethanliang 發表於 13-3-4 12:17

請問關於群益報價API + VB 2012的問題

各位前輩好,想請問關於群益報價API + VB 2012的問題…..

小弟在win7作業系統下,使用VS2012 Desktop的VB抓取群益報價API ,
目前只抓取台指期貨TX00報價,但是,每次收報價大概4分鐘後,
報價就自動停了,也沒有任何的錯誤訊息。

懇請有經驗的前輩指導一下,謝謝。

1. 前置作業如下:
先把config.ini、SKQuote.exe、SKQuoteLib.dll、SKQuoteLib.lib等4個檔,
複製貼到/bin/Debug/內。

2. 完整程式碼如下:
Imports System.Runtime.InteropServices

Public Class Form1

    ' *** DLLImport
    '* 0. SKQuoteLib_Initialize 初始使用者相關資訊
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_Initialize(ByVal lpszLoginID As String, ByVal lpszPassword As String) As Integer
    End Function

    '* 1. SKQuoteLib_AttachConnectionCallBack 向報價函式庫註冊接收連線狀態的 Call back 函式位址
    <UnmanagedFunctionPointer(CallingConvention.StdCall)> _
    Public Delegate Sub FOnNotifyConnection(ByVal nKind As Integer, ByVal nCode As Integer)
    Shared Delegate_AttachConnection As New FOnNotifyConnection(AddressOf OnConnectionBack)

    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_AttachConnectionCallBack(ByVal Delegate_AttachConnection As FOnNotifyConnection) As Integer
    End Function

    '* 2. SKQuoteLib_AttachQuoteCallBack 當有索取的個股報價異動時,將透過此註冊的函式通知應用程式處理
    <UnmanagedFunctionPointer(CallingConvention.StdCall)> _
    Public Delegate Sub FOnNotifyQuote(ByVal sMarketNo As Short, ByVal sStockidx As Short)
    Public Shared Delegate_AttachQuote As New FOnNotifyQuote(AddressOf OnQuoteCallBack)

    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_AttachQuoteCallBack(ByVal Delegate_AttachQuote As FOnNotifyQuote) As Integer
    End Function

    '* 3. SKQuoteLib_EnterMonitor 建立與報價伺服器的連線
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_EnterMonitor() As Integer
    End Function

    '* 4. SKQuoteLib_RequestStocks 要求伺服器針對pStockNos內的商品代號作報價通知的動作
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function SKQuoteLib_RequestStocks(ByRef psPageNo As Short, ByVal pStockNos As String) As Integer
    End Function

    '* 5. SKQuoteLib_GetStockByIndex 根據市場別編號與系統所編的特殊代號,取回股票報價的相關資訊
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function SKQuoteLib_GetStockByIndex(ByVal sMarketNo As Short, ByVal sIndex As Short, ByRef pStock As TStock) As Integer
    End Function

    '* 6. SKQuoteLib_LeaveMonitor 中斷與報價伺服器的連線
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_LeaveMonitor() As Integer
    End Function

    ' *** 定義TStock 結構
    <StructLayout(LayoutKind.Sequential)> _
       Public Structure TStock
      Dim Stockidx As Short
      Dim Decimal1 As Short
      Dim TypeNo As Short
      Dim MarketNo As Byte
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> Dim StockNo As String
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=10)> Dim StockName As String
      Dim Open As Integer
      Dim High As Integer
      Dim Low As Integer
      Dim Close As Integer
      Dim TickQty As Integer ' 單量
      Dim Ref As Integer   ' 昨收、參考價
      Dim Bid As Integer   ' 買價
      Dim Bc As Integer      ' 買量
      Dim Ask As Integer   ' 賣價
      Dim Ac As Integer      ' 賣量
      Dim TBc As Integer   ' 買盤量
      Dim TAc As Integer   ' 賣盤量
      Dim FutureOI As Integer ' 期貨未平倉 OI
      Dim TQty As Integer   ' 單量
      Dim YQty As Integer
      Dim Up As Integer       ' 漲停
      Dim Down As Integer   ' 跌停
    End Structure

    '*** 檢視報價連線是否登入成功
    Public Shared Sub OnConnectionBack(ByVal Kind As Integer, ByVal Code As Integer)

      If Code = 0 Then
            MsgBox(" 報價伺服器登入成功!!")
      Else
            MsgBox("報價中斷!!")
      End If

      '*** 要求伺服器針對 pStockNos內的商品代號作報價通知的動作
      Dim Status As Integer
      Dim ComIds As String
      ComIds = "TX00"

      Status = SKQuoteLib_RequestStocks(-1, ComIds)

    End Sub

    '*** 接收報價的位置
    Public Shared Sub OnQuoteCallBack(ByVal Market As Short, ByVal Index As Short)

      On Error Resume Next
      Dim Status As Integer
      Dim Stock As New TStock

      '*** 要求報價
      Status = SKQuoteLib_GetStockByIndex(Market, Index, Stock)

      '*** 接收台指期貨 TX00 報價的項目
      Form1.txtTxBid.Text = Stock.Bid / 100
      Form1.txtBuyQty.Text = Stock.Bc
      Form1.txtTxAsk.Text = Stock.Ask / 100
      Form1.txtSellQty.Text = Stock.Ac
      Form1.txtTxClose.Text = Stock.Close / 100
      Form1.txtTxTickQty.Text = Stock.TickQty

    End Sub

    '*** 程式開啟時 呼叫 API
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

      Dim Status As Integer
      Status = Status + SKQuoteLib_Initialize("身分證字號", "密碼")
      Status = Status + SKQuoteLib_AttachConnectionCallBack(AddressOf OnConnectionBack)
      Status = Status + SKQuoteLib_AttachQuoteCallBack(AddressOf OnQuoteCallBack)
      Status = SKQuoteLib_EnterMonitor()

    End Sub

    '*** 結束報價按鈕
    Private Sub btnEnd_Click(sender As Object, e As EventArgs) Handles btnEnd.Click

      SKQuoteLib_LeaveMonitor()
      MsgBox("結束報價,離開 !")

    End Sub

End Class

smile2 發表於 13-3-4 14:06

據小弟使用的經驗~群益API會不定時踢帳號,我也不知道為什麼?{:4_666:}
(我使用的是excel vba接收的)

ethanliang 發表於 13-3-4 15:52

我的 Excel 2007 VBA接收報價是很正常,
但是,類似的程式架構,
轉成 VB.net 2012,卻只能收到4分鐘的報價,
真是奇怪了,
還請各位高手,多多指教,
謝謝。

kimogi 發表於 13-3-5 09:53

我用老老的VB6,沒這問題ㄟ

.net ㄜ...... 懶的學

pazival01 發表於 13-3-5 10:36

印象上五分鐘以內要在跟server要一次時間資訊, 不然好像是5分鐘會斷線...

我自己用C#是定幾分鐘去要一次server time...

ethanliang 發表於 13-3-5 12:22

pazival01 發表於 13-3-5 10:36 static/image/common/back.gif
印象上五分鐘以內要在跟server要一次時間資訊, 不然好像是5分鐘會斷線...

我自己用C#是定幾分鐘去要一次se ...

我試著每60秒呼叫一次伺服器時間,但是還是4分鐘左右,自動停止收報價。還是很感謝 pazival01 兄的建議。程式碼如下: ' * 呼叫伺服器時間     <UnmanagedFunctionPointer(CallingConvention.StdCall)>_    Public DelegateSub FOnNotifyServerTime(ByVal tHour As Int16, ByVal tMinute As Int16, ByValtSecond As Int16, ByVal tTotal As Int16)    SharedDelegate_ServerTime As New FOnNotifyServerTime(AddressOf CBFunc_ServerTime)     <DllImport("SKQuoteLib.dll",CallingConvention:=CallingConvention.StdCall)> _    Public Shared FunctionSKQuoteLib_AttchServerTimeCallBack(ByVal Delegate_ServerTime As FOnNotifyServerTime)As Integer    End Function     <DllImport("SKQuoteLib.dll",CallingConvention:=CallingConvention.StdCall)> _    Public Shared FunctionSKQuoteLib_RequestServerTime() As Integer    End Function '*** 60 秒呼叫一次伺服器時間    Private SubTimer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick            SKQuoteLib_RequestServerTime()         End Sub     Public Shared SubCBFunc_ServerTime(ByVal tHour As Int16, ByVal tMinute As Int16, ByVal tSecond AsInt16, ByVal tTotal As Int16)            '留空()    End Sub

pazival01 發表於 13-3-5 13:23

印象上 好像有兩個function, 看看要不要用另一個

--
先用SKQuoteLib_AttchServerTimeCallBack 註冊

之後固定時間用SKQuoteLib_GetServerTime

我是用這個, 目前用C#沒有遇過斷線問題

ethanliang 發表於 13-3-5 14:21

pazival01 發表於 13-3-5 13:23 static/image/common/back.gif
印象上 好像有兩個function, 看看要不要用另一個

--


了解,我明天盤中再試試,非常感謝您的指點。

ethanliang 發表於 13-3-6 11:31

剛剛試著先用SKQuoteLib_AttchServerTimeCallBack 註冊
之後固定1分鐘用timer 呼叫SKQuoteLib_GetServerTime
    固定5分鐘用timer 呼叫 SKQuoteLib_RequestServerTime()
但是…還是只能收到 約4分鐘左右的報價,就收不到報價了….

更新後的全部程式碼如下:

Imports System.Runtime.InteropServices

Public Class Form1

    ' *** DLLImport
    '* 0. SKQuoteLib_Initialize 初始使用者相關資訊
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_Initialize(ByVal lpszLoginID As String, ByVal lpszPassword As String) As Integer
    End Function

    '* 1. SKQuoteLib_AttachConnectionCallBack 向報價函式庫註冊接收連線狀態的 Call back 函式位址
    <UnmanagedFunctionPointer(CallingConvention.StdCall)> _
    Public Delegate Sub FOnNotifyConnection(ByVal nKind As Integer, ByVal nCode As Integer)
    Shared Delegate_AttachConnection As New FOnNotifyConnection(AddressOf OnConnectionBack)

    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_AttachConnectionCallBack(ByVal Delegate_AttachConnection As FOnNotifyConnection) As Integer
    End Function

    '* 2. SKQuoteLib_AttachQuoteCallBack 當有索取的個股報價異動時,將透過此註冊的函式通知應用程式處理
    <UnmanagedFunctionPointer(CallingConvention.StdCall)> _
    Public Delegate Sub FOnNotifyQuote(ByVal sMarketNo As Short, ByVal sStockidx As Short)
    Public Shared Delegate_AttachQuote As New FOnNotifyQuote(AddressOf OnQuoteCallBack)

    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_AttachQuoteCallBack(ByVal Delegate_AttachQuote As FOnNotifyQuote) As Integer
    End Function

    '* 3. SKQuoteLib_EnterMonitor 建立與報價伺服器的連線
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_EnterMonitor() As Integer
    End Function

    '* 4. SKQuoteLib_RequestStocks 要求伺服器針對pStockNos內的商品代號作報價通知的動作
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function SKQuoteLib_RequestStocks(ByRef psPageNo As Short, ByVal pStockNos As String) As Integer
    End Function

    '* 5. SKQuoteLib_GetStockByIndex 根據市場別編號與系統所編的特殊代號,取回股票報價的相關資訊
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function SKQuoteLib_GetStockByIndex(ByVal sMarketNo As Short, ByVal sIndex As Short, ByRef pStock As TStock) As Integer
    End Function

    '* 6. SKQuoteLib_LeaveMonitor 中斷與報價伺服器的連線
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_LeaveMonitor() As Integer
    End Function

    '* 7. SKQuoteLib_GetStockByNo
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function SKQuoteLib_GetStockByNo(ByVal lpszStockNo As , ByRef pStock As TStock) As Integer
    End Function

    '* 8. SKQuoteLib_AttchServerTimeCallBack 呼叫伺服器時間
    <UnmanagedFunctionPointer(CallingConvention.StdCall)> _
    Public Delegate Sub FOnNotifyServerTime(ByVal tHour As Int16, ByVal tMinute As Int16, ByVal tSecond As Int16, ByVal tTotal As Int16)
    Shared Delegate_ServerTime As New FOnNotifyServerTime(AddressOf CBFunc_ServerTime)

    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_AttchServerTimeCallBack(ByVal Delegate_ServerTime As FOnNotifyServerTime) As Integer
    End Function

    '*9. SKQuoteLib_RequestServerTime 要求報價主機傳送目前時間
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SKQuoteLib_RequestServerTime() As Integer
    End Function

    '* 10 . SKQuoteLib_GetServerTime 取得查詢的主機時間
    <DllImport("SKQuoteLib.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function SKQuoteLib_GetServerTime(ByRef pFormat05 As CFormat05) As Integer
    End Function


    ' *** 定義TStock 結構
    <StructLayout(LayoutKind.Sequential)> _
       Public Structure TStock
      Dim Stockidx As Short
      Dim Decimal1 As Short
      Dim TypeNo As Short
      Dim MarketNo As Byte
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> Dim StockNo As String
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=10)> Dim StockName As String
      Dim Open As Integer
      Dim High As Integer
      Dim Low As Integer
      Dim Close As Integer
      Dim TickQty As Integer ' 單量
      Dim Ref As Integer   ' 昨收、參考價
      Dim Bid As Integer   ' 買價
      Dim Bc As Integer      ' 買量
      Dim Ask As Integer   ' 賣價
      Dim Ac As Integer      ' 賣量
      Dim TBc As Integer   ' 買盤量
      Dim TAc As Integer   ' 賣盤量
      Dim FutureOI As Integer ' 期貨未平倉 OI
      Dim TQty As Integer   ' 單量
      Dim YQty As Integer
      Dim Up As Integer       ' 漲停
      Dim Down As Integer   ' 跌停
    End Structure

    ' *** 定義主機時間格式   CFormat05
    <StructLayout(LayoutKind.Sequential)> _
    Public Structure CFormat05
      Dim m_sHour As Short
      Dim m_sMinute As Short
      Dim m_sSecond As Short
      Dim m_lTotal As Integer
    End Structure

    '*** 檢視報價連線是否登入成功
    Public Shared Sub OnConnectionBack(ByVal Kind As Integer, ByVal Code As Integer)

      If Code = 0 Then
            MsgBox(" 報價伺服器登入成功!!")
      Else
            MsgBox("報價中斷!!")
      End If

      '*** 要求伺服器針對 pStockNos內的商品代號作報價通知的動作
      Dim Status As Integer
      Dim ComIds As String
      ComIds = "TX00"

      Status = SKQuoteLib_RequestStocks(-1, ComIds)

    End Sub

    '*** 接收報價的位置
    Public Shared Sub OnQuoteCallBack(ByVal Market As Short, ByVal Index As Short)

      On Error Resume Next
      Dim Status As Integer
      Dim Stock As New TStock

      '*** 要求報價
      Status = SKQuoteLib_GetStockByIndex(Market, Index, Stock)
   
      '*** 接收台指期貨 TX00 報價的項目
      Form1.txtTxBid.Text = Stock.Bid / 100
      Form1.txtBuyQty.Text = Stock.Bc
      Form1.txtTxAsk.Text = Stock.Ask / 100
      Form1.txtSellQty.Text = Stock.Ac
      Form1.txtTxClose.Text = Stock.Close / 100
      Form1.txtTxTickQty.Text = Stock.TickQty

    End Sub

    '*** 程式開啟時 呼叫 API
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

      Dim Status As Integer
      Status = Status + SKQuoteLib_Initialize("身分證字號", "密碼")
      Status = Status + SKQuoteLib_AttachConnectionCallBack(AddressOf OnConnectionBack)
      Status = Status + SKQuoteLib_AttachQuoteCallBack(AddressOf OnQuoteCallBack)

      Status = Status + SKQuoteLib_AttchServerTimeCallBack(AddressOf CBFunc_ServerTime)

      Status = SKQuoteLib_EnterMonitor()

    End Sub

    '*** 結束報價按鈕
    Private Sub btnEnd_Click(sender As Object, e As EventArgs) Handles btnEnd.Click

      SKQuoteLib_LeaveMonitor()
      MsgBox("結束報價,離開 !")

    End Sub

    '*** 接收 SKQuoteLib_AttchServerTimeCallBack
    Public Shared Sub CBFunc_ServerTime(ByVal tHour As Int16, ByVal tMinute As Int16, ByVal tSecond As Int16, ByVal tTotal As Int16)
      ' Form1.Label7.Text = tHour
      ' Form1.Label8.Text = tMinute
      ' Form1.Label9.Text = tSecond
      ' 留空()
      
    End Sub



    '*** 5分鐘 秒呼叫一次 SKQuoteLib_RequestServerTime() 伺服器時間
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
      
      Try
            SKQuoteLib_RequestServerTime()
      Catch ex As Exception
      End Try

          End Sub

    '*** 1 分鐘 秒呼叫一次 SKQuoteLib_GetServerTime 查詢的主機時間時間
    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
      
               Dim pFormat05 As New CFormat05
         SKQuoteLib_GetServerTime(pFormat05)
      
    End Sub

End Class

ethanliang 發表於 13-3-7 08:48

pazival01 發表於 13-3-5 13:23 static/image/common/back.gif
印象上 好像有兩個function, 看看要不要用另一個

--


透過轉換,把『群益報價api』的程式碼由VB轉成C#,請 pazival01兄與各位精通C#的高手指教,目前只能收到約4分鐘的台指期貨TX00報價,謝謝。C#的程式碼如下: using Microsoft.VisualBasic;using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Diagnostics;using System.Runtime.InteropServices; public class Form1{       // *** DLLImport      //* 0. SKQuoteLib_Initialize 初始使用者相關資訊            public static extern intSKQuoteLib_Initialize(string lpszLoginID, string lpszPassword);       //* 1.SKQuoteLib_AttachConnectionCallBack 向報價函式庫註冊接收連線狀態的 Call back 函式位址            public delegate voidFOnNotifyConnection(int nKind, int nCode);      static FOnNotifyConnectionDelegate_AttachConnection = new FOnNotifyConnection(OnConnectionBack);             public static extern intSKQuoteLib_AttachConnectionCallBack(FOnNotifyConnectionDelegate_AttachConnection);       //* 2.SKQuoteLib_AttachQuoteCallBack 當有索取的個股報價異動時,將透過此註冊的函式通知應用程式處理            public delegate voidFOnNotifyQuote(short sMarketNo, short sStockidx);      public static FOnNotifyQuoteDelegate_AttachQuote = new FOnNotifyQuote(OnQuoteCallBack);             public static extern intSKQuoteLib_AttachQuoteCallBack(FOnNotifyQuote Delegate_AttachQuote);       //* 3.SKQuoteLib_EnterMonitor 建立與報價伺服器的連線            public static extern intSKQuoteLib_EnterMonitor();       //* 4.SKQuoteLib_RequestStocks 要求伺服器針對pStockNos內的商品代號作報價通知的動作            public static extern intSKQuoteLib_RequestStocks(ref short psPageNo, string pStockNos);       //* 5.SKQuoteLib_GetStockByIndex 根據市場別編號與系統所編的特殊代號,取回股票報價的相關資訊            public static extern intSKQuoteLib_GetStockByIndex(short sMarketNo, short sIndex, ref TStock pStock);       //* 6.SKQuoteLib_LeaveMonitor 中斷與報價伺服器的連線            public static extern intSKQuoteLib_LeaveMonitor();       //* 7.SKQuoteLib_GetStockByNo            public static extern intSKQuoteLib_GetStockByNo(String lpszStockNo, ref TStock pStock);       //* 8.SKQuoteLib_AttchServerTimeCallBack 呼叫伺服器時間             public delegate voidFOnNotifyServerTime(Int16 tHour, Int16 tMinute, Int16 tSecond, Int16 tTotal);      static FOnNotifyServerTimeDelegate_ServerTime = new FOnNotifyServerTime(CBFunc_ServerTime);             public static extern intSKQuoteLib_AttchServerTimeCallBack(FOnNotifyServerTime Delegate_ServerTime);       //*9.SKQuoteLib_RequestServerTime 要求報價主機傳送目前時間            public static extern intSKQuoteLib_RequestServerTime();       //* 10 .SKQuoteLib_GetServerTime 取得查詢的主機時間            public static extern intSKQuoteLib_GetServerTime(ref CFormat05 pFormat05);       // *** 定義TStock 結構             public struct TStock      {               public short Stockidx;               public shortDecimal1;               public short TypeNo;               public byteMarketNo;                              public stringStockNo;                              public stringStockName;               public int Open;               public int High;               public int Low;               public int Close;                         // 單量               public int TickQty;                         // 昨收、參考價               public int Ref;                         // 買價               public int Bid;                         // 買量               public int Bc;                         // 賣價               public int Ask;                         // 賣量               public int Ac;                         // 買盤量               public int TBc;                         // 賣盤量               public int TAc;                         // 期貨未平倉 OI               public int FutureOI;                         // 單量               public int TQty;               public int YQty;                         // 漲停               public int Up;                         // 跌停               public int Down;      }       // *** 定義主機時間格式   CFormat05            public struct CFormat05      {               public shortm_sHour;               public shortm_sMinute;               public shortm_sSecond;               public int m_lTotal;      }       //*** 檢視報價連線是否登入成功      public static voidOnConnectionBack(int Kind, int Code)      {                if (Code == 0) {                         Interaction.MsgBox("報價伺服器登入成功!!");               } else {                         Interaction.MsgBox("報價中斷!!");               }                //*** 要求伺服器針對 pStockNos內的商品代號作報價通知的動作               int Status = 0;               string ComIds =null;               ComIds ="TX00";                Status =SKQuoteLib_RequestStocks(ref -1, ComIds);       }       //*** 接收報價的位置      public static voidOnQuoteCallBack(short Market, short Index)      {                   // ERROR: Not supported in C#:OnErrorStatement                int Status = 0;               TStock Stock = newTStock();                //*** 要求報價               Status =SKQuoteLib_GetStockByIndex(Market, Index, ref Stock);                //*** 接收台指期貨 TX00 報價的項目               Form1.txtTxBid.Text= Stock.Bid / 100;               Form1.txtBuyQty.Text= Stock.Bc;               Form1.txtTxAsk.Text= Stock.Ask / 100;               Form1.txtSellQty.Text= Stock.Ac;               Form1.txtTxClose.Text= Stock.Close / 100;               Form1.txtTxTickQty.Text= Stock.TickQty;       }       //*** 程式開啟時 呼叫 API      private voidForm1_Load(object sender, EventArgs e)      {                int Status = 0;               Status = Status +SKQuoteLib_Initialize("身分證字號", "密碼");               Status = Status +SKQuoteLib_AttachConnectionCallBack(OnConnectionBack);               Status = Status +SKQuoteLib_AttachQuoteCallBack(OnQuoteCallBack);                Status = Status +SKQuoteLib_AttchServerTimeCallBack(CBFunc_ServerTime);                Status =SKQuoteLib_EnterMonitor();       }       //*** 結束報價按鈕      private voidbtnEnd_Click(object sender, EventArgs e)      {                SKQuoteLib_LeaveMonitor();               Interaction.MsgBox("結束報價,離開 !");       }       //*** 接收SKQuoteLib_AttchServerTimeCallBack      public static voidCBFunc_ServerTime(Int16 tHour, Int16 tMinute, Int16 tSecond, Int16 tTotal)      {               // Form1.Label7.Text= tHour               // Form1.Label8.Text= tMinute               // Form1.Label9.Text= tSecond               // 留空()       }       //*** 5分鐘 秒呼叫一次SKQuoteLib_RequestServerTime() 伺服器時間      private voidTimer1_Tick(object sender, EventArgs e)      {                try {                         SKQuoteLib_RequestServerTime();               } catch (Exceptionex) {               }       }       //*** 1 分鐘 秒呼叫一次SKQuoteLib_GetServerTime 查詢的主機時間時間      private voidTimer2_Tick(object sender, EventArgs e)      {                CFormat05 pFormat05= new CFormat05();               SKQuoteLib_GetServerTime(refpFormat05);       }      public Form1()      {               Load += Form1_Load;      } }

pazival01 發表於 13-3-7 10:18

我看了一下我的code

我的程式在SKQuoteLib_AttachQuoteCallBack 之後

還有加上

//2.3當有索取的個股成交明細有所異動,即透過向此註冊的 Call back 函式進行處理
SKQuoteLib_AttachTicksCallBack(QuoteAttachTicks );

之後我又加了一大堆我看不懂的

//2.4
SKQuoteLib_AttachBest5CallBack(QuoteAttachBest5 );
SKQuoteLib_AttachStrikePricesCallBack(QuoteAttachStrikePrices );
SKQuoteLib_AttachKLineDataCallBack(QuoteAttachKLineData );

在這之後我就是下
QuoteEnterMonitor();

SKQuoteLib_AttchServerTimeCallBack(QuoteAttachServerTime);
SKQuoteLib_GetServerTime(ref CFtime);

----

之後就是每隔幾分鐘下 SKQuoteLib_GetServerTime 命令..

希望對你有幫助.

ethanliang 發表於 13-3-7 12:20

pazival01 發表於 13-3-7 10:18 static/image/common/back.gif
我看了一下我的code

我的程式在SKQuoteLib_AttachQuoteCallBack 之後


感謝pazival01兄指點,我再試看看。

ethanliang 發表於 13-3-7 12:23

在修改過程中,發現一個奇怪的現象,

1. 原接收台指期貨TX00,買價、買量、賣價、賣量、成交價、單筆量,
    等6個報價選項時,約可收到4分鐘報價。
2. 若是接收台指期貨TX00的項目,縮減為買量、賣量,
   等2個報價選項時,約可收到12分鐘報價。

煩請 高手們指教,幫幫忙,
謝謝。

pazival01 發表於 13-3-7 13:33

我看了一下我的code, 我好像沒使用SKQuoteLib_RequestStocks 這個function

--
接收台指期貨 TX00 報價 我是這樣用

SKQuoteLib_GetStockByNo("TX00", ref Stock);

SKQuoteLib_RequestTicks(ref PageNo, "TX00");

SKQuoteLib_QuoteGetKLine("TX00", 0);

也許你可以這樣試試看,

--
也說不定是我哪裡誤用了, 拿到是錯誤的數據~ @@..
...

ethanliang 發表於 13-3-7 13:44

pazival01 發表於 13-3-7 13:33 static/image/common/back.gif
我看了一下我的code, 我好像沒使用SKQuoteLib_RequestStocks 這個function

--


感謝pazival01兄指點,我再試看看。
頁: [1] 2 3 4 5 6
查看完整版本: 請問關於群益報價API + VB 2012的問題