Part 1:用來分析的期貨交易資料來源。
Part 2:如何接收即時資料。
Part 3:如何下單及確認下單狀況。
這個部份要說明該如何利用券商的 API 來下單,坦白說我只有用過永豐的 API,所以我只能針對這個來說明,首先你要先向期貨商申請 API 交易,而申請資格根據期交所規定有下列兩項:
(1)要開期貨戶頭滿三個月以上。
(2)最近一年內有十筆的交易記錄。
申請到 API 後,你就可以從永豐金API元件下單 說明網頁取得 API 元件,裡面已有該 API 的使用說明,不過我還是介紹一下該怎麼從 C# 引用,熟悉程式開發的朋友都知道,如果要使用他人開發的 dll 元件,可以利用 DllImport 來使用該元件,簡單的範例如下:
/// <summary>
/// 元件初始化
/// </summary>
/// <param name="login_id">帳號</param>
/// <param name="login_pass">密碼</param>
/// <param name="dll_path">元件所在路徑</param>
/// <returns></returns>
[DllImport(@"c:\永豐期貨API\t4.dll")]
public static extern string init_t4(string login_id, string login_pass,string dll_path);
/// <summary>
/// 登入期貨帳戶
/// </summary>
/// <param name="branch">分公司代號</param>
/// <param name="account">帳號</param>
/// <param name="acc_id">用戶ID</param>
/// <param name="acc_ca_path">CA憑證路徑</param>
/// <param name="acc_ca_pass">CA密碼</param>
/// <returns></returns>
[DllImport(@"c:\永豐期貨API\t4.dll")]
public static extern string add_acc_ca(string branch, string account, string acc_id, string acc_ca_path, string acc_ca_pass);
/// <summary>
/// 驗證下單帳號密碼
/// </summary>
/// <param name="branch">分公司代號</param>
/// <param name="account">帳號</param>
/// <returns></returns>
[DllImport(@"c:\永豐期貨API\t4.dll")]
public static extern string verify_ca_pass(string branch, string account);
/// <summary>
/// 期貨下單
/// </summary>
/// <param name="buy_or_sell">B或S</param>
/// <param name="branch">分公司代號</param>
/// <param name="account">帳號</param>
/// <param name="code">期貨代號</param>
/// <param name="price">價格</param>
/// <param name="amount">口數</param>
/// <param name="price_type">MKT:市價單、LMT:限價單</param>
/// <param name="ordtype">IOC、ROD、FOK</param>
/// <param name="octtype">倉別 "0" = 新倉、"1" = 平倉、" "= 自動、"6"= 當沖</param>
/// <returns></returns>
[DllImport(@"c:\永豐期貨API\t4.dll")]
public static extern string future_order(string buy_or_sell, string branch, string account, string code, string price, string amount, string price_type, string ordtype, string octtype);
/// <summary>
/// 期權委託查詢,用來查詢已下單的狀況
/// </summary>
/// <param name="branch">分公司代號</param>
/// <param name="acct">帳號</param>
/// <param name="code">商品代號</param>
/// <param name="ord_match_flag">成交類別 0:全部明細 1:未成交 3:委託失敗 5:委託彙總</param>
/// <param name="ord_type">商品類別 0:全部商品 1:期貨 2:選擇權 3:美元計價</param>
/// <param name="oct_type">倉別.定為"0"</param>
/// <param name="is_daily">0:當日 1:歷史</param>
/// <param name="start_date">歷史查詢起始日</param>
/// <param name="end_date">歷史查詢終止日</param>
/// <param name="preorder">' ' = 僅查預約單, 'N' = 所有</param>
/// <returns></returns>
[DllImport(@"c:\永豐期貨API\t4.dll")]
public static extern string fo_order_qry(string branch, string acct, string code, string ord_match_flag, string ord_type, string oct_type, string is_daily, string start_date, string end_date, string preorder);
上頭是期貨交易會用到的函式,其實這個 API 還有其他功能,例如證券、國外期貨、選擇權的下(刪)單…等功能,這個我就不介紹了,需要的人可以自己研究,並不難的(和找出交易聖杯相較起來…容易太多了),簡單的來說,在進行下單的動作前,要先進行下列三個函式的初始化才行,依序如下:
(1) init_t4
(2) add_acc_ca
(3) verify_ca_pass
待上述三個函式皆正常執行完畢之後,表示已經可以下單了,而期貨下單的函式請使用 future_order 這個函式,至於怎麼下單就視個人的策略囉,應該大多數的人都是用市價單來下單吧(我一廂情願的猜…),下單之後可以呼叫 fo_order_qry 來查詢剛剛下單的成交狀況,至於執行函式之回傳值代表什麼…抱歉!我很懶^^"…請自行參考 API 裡面的說明檔…至於怎麼刪單我就沒有介紹了,因為我用市價單一丟出就成交,根本沒有刪單的需求@@......
最後不知道大家會把程式交易用來做什麼用途,小弟個人是有正常工作,而這個程式則是在我上班時,在家裡的電腦默默的執行我賦予的工作,偶而從公司連線回家看看是否有正常在進行交易,強烈建議利用 TeamViewer 之類的遠端連線軟體監控,千萬不要用Windows的遠端桌面連線,遠端桌面連線不僅流量大,且如果發生網路塞車的話連帶會影響在家裡電腦的網路連線(很怪異吧…不過這是實情,我因為這樣吃過虧),希望這三篇可以幫助到有興趣的人了解程式交易的其中一種方式,也祝大家都可以找到交易聖杯囉……

不好意思, 小爺大, 我也是最近開始要用C#撰寫呼叫永豐API的小小初學者, 我用WinForm試著寫了一段code來照上面的方式初始化元件, 用一個string去收init_t4, 結果會造成整個WinForm關掉, 下一行都執行不到. 可是我去dll的logs資料夾中是有看到log的, 還煩請小爺大告訴小弟的錯誤在哪... 感恩 附上最後兩段code: string msg = init_t4(txbID.Text, txbPwd.Text, string.Empty); //執行完這行就會把WinForm關閉了 MessageBox.Show(msg); //還看不到msg的內容
第三個參數要設定 api 的目錄,你再試試看…希望有幫到忙^^ --------------------- string a = FutureAPI.init_t4(身份證字號, 密碼, @"C:\永豐期貨API"); if (!a.Contains("成功")) MessageBox.Show("登入失敗"); else MessageBox.Show("登入成功");
先感謝小爺大的回應. 小弟還是沒試成功, 可能最進小弟人品不太好吧... Orz 小弟的環境設置: Windows 7 sp1, VS2012 update3, .Net Framework 4.0, 專案平台設為x86平台, WinForm專案, 除原來預設的namespace外, 額外只有為了dll import增加using System.Runtime.InteropServices; 其他WinForm也只有設置一個按鈕來觸發Event, code如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string path = @"C:\VBA DLL"; string msg = FutureAPI.init_t4("555555", "5464878", path); //開debug執行完這行, 就會自動把WinForm關閉 if (!msg.Contains("成功")) //總是進不了這行, 看不到string msg的內容 MessageBox.Show("登入失敗"); else MessageBox.Show("登入成功"); } } public class FutureAPI { [DllImport(@"C:\VBA DLL\t4.dll")] public static extern string init_t4(string login_id, string login_pass, string dll_path); [DllImport(@"C:\VBA DLL\t4.dll")] public static extern string add_acc_ca(string branch, string account, string acc_id, string acc_ca_path, string acc_ca_pass); [DllImport(@"C:\VBA DLL\t4.dll")] public static extern string verify_ca_pass(string branch, string account); [DllImport(@"C:\VBA DLL\t4.dll")] public static extern string future_order(string buy_or_sell, string branch, string account, string code, string price, string amount, string price_type, string ordtype, string octtype); [DllImport(@"C:\VBA DLL\t4.dll")] public static extern string fo_order_qry(string branch, string acct, string code, string ord_match_flag, string ord_type, string oct_type, string is_daily, string start_date, string end_date, string preorder); } 以上, 謝謝小爺大的指教...
我和你唯一不一樣的就是我是VS2010,方案平台我也是設定X86....硬要說差別的話,我是把整個登入程序丟到 Thread 中執行,不過這也不會有什麼差別才是…
小爺大, 我試成功了, 原來我好傻好天真, 不能直接用string的方式去接API回來的訊息, 應該要宣告成 IntPtr, 最後再用Marshal.PtrToStringAnsi 轉回string來看訊息 以上 謝謝
呵…你試成功了真棒,不過我覺得奇怪的是…我並沒有利用 IntPtr 承接再再轉型,我是真的直接用 string 承接 init_t4 的回傳訊息,因為 Interface 就是如此宣告的,不過沒關係…成功了就是好事 ^^…
請問一下 小爺大, ELEADER API 有一個函數 fo_unsettled_qry (期權未平倉查詢) 如果程式每秒鐘讀取一次來判斷 期權未平倉查詢.成交均價 是否超過 N 點 來執行停損/停利 結果都是失敗的. 所以請教小爺大 要如何設計函數才可以正確執行 停損/停利呢 ?
抱歉,我不是很能理解你的問題: (1)如果想要的目的是查詢成交均價的話,我是建議用 fo_order_qry 來查詢已經成交的記錄,而 fo_unsettled_qry 只能查到目前未平倉的記錄。 (2)如果要停損/停利的話,兩種方式,最簡單的方式當然就是自己的程式在每筆成交時記錄成交狀況,自行統計目前的損益,第二種方式就是利用重複呼叫 fo_unsettled_qry 來取得未平倉狀況,然後已平倉狀況的資料當然還是得利用 fo_order_qry 來查詢。兩種方式我個人是採取第一種,因為只要呼叫 fo_order_qry 這個 API 就行了,未平倉的部份自己的程式進行即時的監控,而不用透過 fo_unsettled_qry 來取得資訊。 (3)其實我不太懂所謂的停損/停利失敗是什麼意思耶?
恭喜今日收紅~~感謝小爺大的回覆 關於停損/停利失敗就是 當程式一進場就已經設定 停損30點/停利50點 但是一到設定的價格應該要執行停損/停利 程式就是沒有去執行 因為我目前就是透過 fo_unsettled_qry (期權未平倉查詢) 來管理我目前手上的部位所以我透過每一秒就去讀取目前未平倉的成交價格與目前期貨的成交價格作價差計算當[買進]未平倉的成交價格出現虧損超過30點 應該要直接平倉 卻沒有執行... 就會造成虧損過大...需要透過手動平倉才能止血...所以才會想跟小爺大請教一下...要如何設計停損/停利的函數呢... 因為每秒直接讀取未平倉的成交價格與期貨的成交價作價差計算是沒有任何的作用....
謝謝…^^… (1)我比較建議的方式是自己管理損益值,舉個例子來說,假設程式都是正常執行的話,每秒會去向 eleader 索取目前未平倉的損益,這邊就會有個當出現快速盤的話,一秒鐘差一二十點都是可能的,利用 API 查詢時所需要的時間為:電腦→永豐Server→電腦→(如果達停利/停損)→永豐Server→期交所下單,此時你的滑價就會非常可怕。 (2)另外我還有一事不明白,利用 fo_unsettled_qry 理論上應該可以得到正確的損益資料,所以怎麼會有到了停損/停利點卻沒有執行的狀況,請問這個環節出了什麼問題?怎麼會需要用到手動平倉? (3)我的作法是利用 fo_order_qry 取得實際的成交價格,再利用目前從 DDE 取得的價格自己換算,程式隨時知道目前的損益狀況,如果到了停損/停利點的話,程式就發出指令執行,不用再透過重複查詢來得知目前損益狀況。
感謝小爺大的回覆 關於第二點的部分:利用 fo_unsettled_qry 的確可以得到正確的損益資料 但是,如果每一秒鐘都去跟ELEADER 索取未平倉的資料,就會要不到資料...就會造成無法判斷是否到達 停損/停利 的點數[會得到空字串] 為什麼要使用 fo_unsettled_qry 是因為如果留倉到隔日[隔日沖]只能透過這個函數來取得目前手上未平倉的部位,以及成交價格 方便計算目前交易方向/成本 。 因為小爺大是當沖不留倉的,所以沒有留倉計算的困擾...我個人是使用30分K留倉 所以才會出現無法停損停利的狀況 ....
了解,不過我比較建議的方式是如果倉位沒有變動的話,查詢一次後,把狀態記下來,然後利用目前的即時報價,自行計算當前的損益,這樣一來就可以免除掉每隔一秒去要資料而要不到資料的困擾。
小爺大您好: 最近在考慮改作當沖~ 想聽聽您個人在做當沖的建議~ 畢竟當沖的困難度比我想像中的還難上許多...
當沖其實並不難,先撇開是否能找到獲利模式不說,我認為一定要有的機制如下: (1)停損機制:就是今天賠到一定的數字,當天不管如何就不要再進場了。 (2)停利機制:如果當天最大獲利達一定的數字,回檔至最大獲利到一定的比例時就要進行停利,然後再伺機進場或是今天就休息了。 (3)嚴禁人為干涉:既然都利用回測找到可以獲利的模型,就要相信這個模型,不管如何絕不人為干涉,除非程式異常。 而我在找尋獲利模型我覺得最難的是:怎麼規避掉會被洗的盤(這部份我做的不好…),因為大賠的天數少,就表示賺錢的機會多。
請問小爺大,你取得的報價資訊,是從DDE取得還是永豐的API呢? 遇到快市的時候會發生掉資料的狀況嗎,先感謝回答!!
(1)是用 DDE 喔…其實 DDE 也是從永豐的 eleader 取得資料的。 (2)另外…永豐的 API 沒有接收資料的用途喔(至少我是這麼理解)。 (3)掉資料的問題我覺得並不特別明顯(快市的時候),我接收的資料我都會寫成log檔記錄下來,然後和期交所的資料進行回測比對,沒有多大的差別(不過當然期交所的資訊比較細)。
請教一下 我用兩台電腦分別用 OFFICE 2003 OFFICE2010 已照說明把檔案拷到C:\VBA DLL 下,但按初始化出現找不到T4.DLL , 明明T4.DLL 在C:\VBA DLL 下 為何找不到呢???
您好… 我剛剛自己嘗試了一下,一切都很正常耶,請確定「C:\VBA DLL」沒有拼錯嗎?或是已經是最新版本了呢?我的Office也是2010... 如果要找問題的話,也可以開啟Excel 裡的 VBA 編輯器,直接看裡頭的程式碼,然後直接看為什麼他找不到「C:\VBA DLL」這個資料夾裡的T4.DLL...
c:\vba dll 沒拼錯,我試過用大寫也不行,查了一下網路,有可能是 vba 編輯器--工具--設定引用項目有少?? 我的裡面有6個打勾 viisual basic for applications microsoft exel 11.0 objectlibrary OLE automation microsoft office 11.0 objectlibrary microsoft form 2.0 objectlibrary ref edit control 可否麻煩您看一下你的有打幾個勾,我有漏那一個?
沒錯…基本上就這是6個,只是我的 excel 是 2010,所以我的是 14.0 版的差別而已…
偵錯停在 x = init_t4(Cells(3, 2).Value, TextBox1.Text, "")
你可以試試看將放元件的目錄改成「C:\MyDLL」,然後將這句改成下句: x = init_t4(Cells(3, 2).Value, TextBox1.Text, "C:\MyDLL") 再試試看…
很邪門,還是一樣 ........
B2儲存格 的路徑改也沒用,一樣還是出現錯誤 #53 找不到C:\vba dll\T4.DLL
1.請問有安裝「微軟VC++ 2010 可轉散發套件(x86)」這個元件嗎?(雖然我覺得沒安裝的話,應該不是這個錯誤訊息...) 2.還是先將這句改回原本的:x = init_t4(Cells(3, 2).Value, TextBox1.Text, "")... 3.重新下載最新版本的套件試試…(也想不到別招了…) 4.你之前有說…你有兩台電腦,但都是一樣的狀況是嗎?那應該是環境的問題,先試試安裝「微軟VC++ 2010 可轉散發套件(x86)」... 5.再不行的話…那就星期一打客服了…@@
真的感謝,可以了耶! 我想永豐這元件原本是在vc++ 開發的吧? 再轉成vb ??
是的!他的 API 是在 vc++ 開發的,不過他並沒轉成 VB 喔,這個 Excel 檔只是一怎麼使用的範例而已。
加入憑證清單,長度錯誤??
先要確定兩件事喔: 1.憑證是否正確。(透過 eleader 來確定) 2.你有申請交易 API 嗎?這要透過營業員特別申請才可以用喔!
eleader 沒成交金額沒有使用權限 我用網頁下單沒問題,憑證6月申請的 我開戶就申請API交易了
因為我的憑證是透過 eleader 申請下載的,或許可以試試從 eleader 重新下載一次憑證試試。
請問憑證密碼在那輸入??
憑證問題已解決,可下單了 但要取銷單子 郤出現 無原委託內容 網路單號 有 委託書號 是空的
關於這個部份可能就要問永豐的 API 電商了,因為我的使用方式並非是透過 Excel 來下單的(我是自己寫程式呼叫 API 下單),所以這個部份就比較不熟悉囉...Sorry...
我請我要將 [a13]買入賣出的選項,用vb 改為賣出的語法是??
只要將執行下行的程式碼就行了… cbFBuy.ListIndex = 1
cbFBuy 這變數只用在自已的工作表( private) 想在別的工作表裡的程式碼改變它的值?如何做?
在別的工作表裡執行下行的程式碼就行了 Sheet1.cbFBuy.ListIndex = 1
我改為 cbFBuy.Value = "賣出" 有差嗎?
是一樣的喔!
每一次開啟都要重新加入憑證清單 ,才能下單?
這個我就比較不清楚,因為我非是利用 Excel 下單的。
如何得知遠月商品代號?
遠月商品代號是有公式的…你可以自行google一下,例如:TXFA4就是台指期的2014年1月份的代號,以此類推TXFB4、TXFC4、TXFD4...TXFL4,指的是2014年的2月至12月。
執行 future_order 巨集,等於按下國內期貨下單?
是的…
謝謝您熱心指導,目前剩下無法刪單的問題,昨天已求助永豐客服,永豐客服又推給分行,說會回我電話, 至今未回 :-(
呵,不用客氣^^,沒回應的話就再打電話確認囉,因我都是用市價進出,所以不會有刪單的問題…應該直接找你的營業員比較快啦,像我之前在摸索階段時遇到系統上的問題都是直接找營業員囉!營業員也會幫你追進度的…
我遇到跟可樂大大同樣問題 string path = @"C:\VBA DLL"; string msg = FutureAPI.init_t4("555555", "5464878", path); //開debug執行完這行, 就會自動把WinForm關閉 可是 我看不懂 可樂大大後來的解決方式 請問您知道嗎? 或者可以幫我轉問可樂大大嗎? 謝謝 garrychang@hotmail.com 不能直接用string的方式去接API回來的訊息, 應該要宣告成 IntPtr, 最後再用Marshal.PtrToStringAnsi 轉回string來看訊息
應該指的是像下列的宣告方式: [DllImport(@"C:\VBA DLL\t4.dll")] public static extern IntPtr init_t4(string login_id, string login_pass, string dll_path); 用法如下: IntPtr tempStr = init_t4("aa","bb",@"C:\VBA DLL\t4.dll"); string want = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(tempStr);
謝謝您熱心指導 真沒想到是永豐的使用說明錯了 照您所提示 已可順利登入 再次謝謝
呵…不用客氣,也祝您賺大錢喔~~~ ^^
我在叫用future_order()出現"參數長度錯誤" 您知道是哪裡出錯嗎? code = "MXFK4"; future_order("B", "F002000", "0967777", code, intTFX.ToString(), listBoxDealVol.ToString(), "LMT", "IOC", " "); Thanks
上述問題已解決 我讀istBox有問題 Thanks
^^...不用客氣,沒幫上忙...
您說您 "呼叫 fo_order_qry 來查詢剛剛下單的成交狀況" (現在改用qry2) 但這是個很大的STRING 您是一一去讀出最近的一筆紀錄? 這個函式可以PO出參考嗎? 謝謝
裡頭有一些我程式的變數…呵…將就點看囉! public string 期貨委託查詢() { string result = FutureAPI.fo_order_qry("F002000", StaticTools.User期貨帳號, 期貨代號, "0", "1", "0", "0", DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("yyyyMMdd"), "N"); if (result.Length < 160) return ""; int 筆數 = 0; try { 筆數 = Convert.ToInt32(result.Substring(40, 3)); } catch { return ""; } int startp; int flag = 0; for (int i = 0; i < 筆數; i++) { startp = result.IndexOf("F002000", flag); flag = startp + 10; string tmpStr = result.Substring(startp, 181); string[] items = new string[21]; items[0] = tmpStr.Substring(0, 14);//帳號 items[1] = tmpStr.Substring(14, 6);//網路單號 items[2] = tmpStr.Substring(20, 6);//委託單號 items[3] = tmpStr.Substring(26, 8);//委託日期 items[4] = tmpStr.Substring(34, 8);//預約委託日期 items[5] = tmpStr.Substring(42, 6);//委託時間 items[6] = tmpStr.Substring(48, 6);//成交時間 items[7] = tmpStr.Substring(54, 10);//商品代碼 items[8] = tmpStr.Substring(64, 1);//買/賣 items[9] = tmpStr.Substring(65, 3);//ordknd items[10] = tmpStr.Substring(68, 6);//原委託 items[11] = tmpStr.Substring(74, 6);//取消 items[12] = tmpStr.Substring(80, 6);//已成交 items[13] = tmpStr.Substring(86, 12);//委託價 items[14] = tmpStr.Substring(98, 12);//成交均價 items[15] = tmpStr.Substring(110, 53);//狀態 items[16] = tmpStr.Substring(163, 1);//委託來源 items[17] = tmpStr.Substring(164, 3);//ord_type items[18] = tmpStr.Substring(167, 1);//倉別 items[19] = tmpStr.Substring(168, 1);//預約單 items[20] = tmpStr.Substring(169, 12);//CHG_PRICE bool myExist = false; for (int j = 0; j < StaticTools.期貨單列表.Count; j++) { if (StaticTools.期貨單列表[j].網路單號 == items[1]) { myExist = true; } } if (!myExist) { 期貨單 myNew = new 期貨單(); myNew.網路單號 = items[1]; myNew.委託書號 = items[2].Trim(); myNew.委託口數 = Convert.ToInt32(items[10].Trim()); myNew.買進賣出 = items[8] == "B" ? true : false; StaticTools.期貨單列表.Add(myNew); } for (int j = 0; j < StaticTools.期貨單列表.Count; j++) { if (StaticTools.期貨單列表[j].網路單號 == items[1] && !StaticTools.期貨單列表[j].已寄發通知信) { if (items[15].Contains("完全成交")) { string 成交時間 = items[6].Insert(4, ":"); 成交時間 = 成交時間.Insert(2, ":"); double 成交價 = Convert.ToDouble(items[14].Insert(9, ".")); StaticTools.期貨單列表[j].成交時間 = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd ") + 成交時間); StaticTools.SendMail(new string[] { StaticTools.期貨單列表[j].成交時間.ToString("yyyy-MM-dd HH:mm:ss") + " " + StaticTools.目前交易策略 + " 口數:" + StaticTools.期貨單列表[j].委託口數 + " Price:" + 成交價.ToString("0.0") + (StaticTools.期貨單列表[j].買進賣出 == true ? "買進" : "賣出"), "" }); StaticTools.期貨單列表[j].已寄發通知信 = true; if (StaticTools.AccountUp.未平倉.Count > 0 && StaticTools.AccountUp.未平倉.Peek().網路單號 == items[1]) StaticTools.AccountUp.未平倉.Peek().實際成交價 = 成交價; if (StaticTools.AccountDown.未平倉.Count > 0 && StaticTools.AccountDown.未平倉.Peek().網路單號 == items[1]) StaticTools.AccountDown.未平倉.Peek().實際成交價 = 成交價; for (int k = 0; k < StaticTools.AccountUp.交易記錄.Count; k++) { if (StaticTools.AccountUp.交易記錄[k].網路單號 == items[1]) StaticTools.AccountUp.交易記錄[k].實際成交價 = 成交價; } for (int k = 0; k < StaticTools.AccountDown.交易記錄.Count; k++) { if (StaticTools.AccountDown.交易記錄[k].網路單號 == items[1]) StaticTools.AccountDown.交易記錄[k].實際成交價 = 成交價; } } //else if (StaticTools.期貨單列表[j].查詢次數 > 3) //{ // StaticTools.當日達停止交易條件 = true; //} StaticTools.期貨單列表[j].查詢次數++; try { string tradefileName = StaticTools.交易查詢明細路徑 + DateTime.Now.ToString("yyyy年MM月dd日") + ".txt"; FileStream fs = new FileStream(tradefileName, FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); string lineStr = DateTime.Now.ToString("HH:mm:ss") + " 單號:" + StaticTools.期貨單列表[j].網路單號 + " 查詢次數:" + StaticTools.期貨單列表[j].查詢次數 + " " + items[15] + " 總單數:" + StaticTools.期貨單列表.Count.ToString(); sw.WriteLine(lineStr); sw.Close(); fs.Close(); } catch { } } } } return result; }
大大 無限感恩!
不用客氣....^^
您好,我也打算自己寫程式串永豐API 但目前對永豐能提供的不太熟悉 1. 請問永豐API是否只提供下單功能? 2. 如果是,要如何自己寫程式取得報價呢? 3. 還有自己寫程式有辦法回測歷史資料嗎? 謝謝
1.對的,永豐 API 只提供下單功能,應該說絕大多數的 API 都只提供下單功能。 2.取得報價資訊,大致區分成三類:(1)DDE (2)RTD (3)報價API,我是採用 DDE 的接收方式,而 DDE 的訊息是接收自券商的看盤軟體,如果是永豐的話就是 e-leader。 3.可以的,但是首先你要先取得歷史資料,期交所有提供近一個月內的 tick 資料,再往前的資料就要向期交所買了。
感謝!我再研究看看
不用客氣…^^
你好,我在用java實作load t4.dll的過程中,發現永豐的api是32bit但我的系統是64bit,在load的時候會出現 Caused by: java.lang.UnsatisfiedLinkError: Unable to load library 't4': Can't obtain InputStream for win32-x86/t4.dll 這個錯誤,不知道你環境怎麼設定?是否有遇過呢?
我不確定 Java 是否可以指定程式要以 32 bit 方式來執行,而 .net 是可以指定在x86模式下執行的,我就是指定成x86模式下執行才可以(x64的確會有問題),其實有許多元件都是需要如此喔!
我也出現可樂之前的問題 執行完string msg = init_t4(txbID.Text, txbPwd.Text, string.Empty); //執行完這行就會把WinForm關閉了 不知有何解
請問有詳細的錯誤訊息嗎?Debug如果看不到,嘗試用系統的事件檢視器看一下…
您好 我試著串接永豐的dll, 發現可以使用, 但是回傳是亂碼 我用的語言是Java, 不知道版主是否有遇過?
我並沒有遇過亂碼的狀況喔,請問您是使用哪個 function 回傳是亂碼?
初始的三隻都會
解決了...在初始的時候加上 System.setProperty("jna.encoding", "big5"); 就可以了 謝謝
不客氣…預祝您賺錢錢^^
小爺你好,又來請教 丟市價單你是設IOC還是FOK呢? 假如今天我買了10口,到了某個價格就是要10口全部平倉,不論滑價與否 那這樣我要選IOC還是FOK呢? 另外,既然丟的type是設市價單,那指定價格還有必要嗎? 謝謝
丟市價單就是 IOC 囉!(其實FOK也可以,因為市場上永遠有單可以讓你成交,但我是設IOC)市價單不需要指定價格,其實指定了也沒差,因為他不會去參考這個價格喔!
我了解了 謝謝你這麼迅速又詳細的回覆!
呵…不用客氣^^,大家互相交流囉!
小爺大您好, 目前手邊有些想法,但是沒有能力codeing 出來.想問是否有機會合作? 如果您有意願,信箱如下. 我們可以討論一下 我的信箱:paytonhsu@gmail.com 謝謝
已回覆囉!