之前曾努力了快一周, 才搞定讓 Python 可以 呼叫 元大期貨 API , 實在沒當初想的簡單, 在此紀錄下要點, 也免得其他人碰到像我一樣的問題時, 浪費時間去研究如何設定 :
- 原本的 C++ 範例, 若想使用 Visual Studio 2013 去 Compile , 需到 微軟官方網站 下載 Multibyte MFC Library , 否則會編譯錯誤
- 元大期貨 API 是使用 ActiveX 包裝而非單純的 DLL , 所以用 Python 呼叫變得比較麻煩, 主要的步驟是 :
- 參考這篇 stack overflow 的文章, 安裝 pywin32 , 並呼叫 makepy
- 之後在 C:\Python27\Lib\site-packages\win32com\gen_py 目錄下, 會找到新產生的 .py 檔, 請打開它
- 在程式碼下方會有類似的敘述, 主要看 註解行
# This CoClass is known by the name 'Yuanta.YuantaOrdCtrl.1'
from win32com.client import CoClassBaseClass
# This CoClass is known by the name 'Yuanta.YuantaOrdCtrl.1'
class YuantaOrd(CoClassBaseClass): # A CoClass
- 由上得知我們在 python 程式中使用 win32com.client.Dispatch 時, 方式是 win32com.client.Dispatch('Yuanta.YuantaOrdCtrl.1')
- 元大 API 主要使用 ActiveX Event 的方式來回應各種 Function 呼叫 , 所以還得要用 Event Class 來設定各個 Event 該做甚麼 , 範例大概如下 :
class MyEvent :
def __init__(self) :
self.event = win32event.CreateEvent(None, 0, 0, None)
def OnLogonS(self, TLinkStatus=defaultNamedNotOptArg, AccList=defaultNamedNotOptArg, Casq=defaultNamedNotOptArg, Cast=defaultNamedNotOptArg):
win32event.SetEvent(self.event)
def OnUserDefinsFuncResult(self, RowCount=defaultNamedNotOptArg, Results=defaultNamedNotOptArg, WorkID=defaultNamedNotOptArg):
win32event.SetEvent(self.event)
- 有了這個 MyEvent Class, 可以用 WithEvent() 或是 DispatchWithEvent() 來連結 ActiveX Object 與 Event , 我是使用後者, 範例如下 :
win32com.client.DispatchWithEvents("Yuanta.YuantaOrdCtrl.1", MyEvent)
pythoncom.PumpWaitingMessages()
- 我主要是用來得到實際帳戶部位, 保證金金額, 帳戶淨值等, 來做資金和風險管理, 最後甚至拿來與 MultiCharts 做倉位同步, 這部分以後有機會再跟大家分享.
請問, 有簡單的example可以參考嗎??
回覆刪除謝謝
您好,
刪除會這樣問是因為我是初學者
按照上面的輸入, 得到 error message, 謝謝
File "E:\work\python\class.py", line 5, in MyEvent
def OnLogonS(self, TLinkStatus=defaultNamedNotOptArg, AccList=defaultNamedNotOptArg, Casq=defaultNamedNotOptArg, Cast=defaultNamedNotOptArg):
NameError: name 'defaultNamedNotOptArg' is not defined
有 import win32com.client ??
刪除我自己的 import module 如下 :
import win32com.client.CLSIDToClass, pythoncom, pywintypes
import win32com.client.util
import win32event
您好, 謝謝您的答覆
刪除現在沒有error message了
另外請教, 如果要得到 2330目前的收盤價
command 應該怎麼下??
謝謝
目前元大應該只有開放 帳戶資訊查詢API 和 下單 API ...沒有報價的 API ...
刪除謝謝您的答覆, 我可能要另外想辦法了
回覆刪除作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除如果打擾了您先說聲抱歉.
回覆刪除元大期貨 API in C#
想要請人寫下單軟體,可以幫忙嗎?
line id: cliff2018.