文字檔下單機是常用的自動下單接法,它一定不是最有效率的作法,但非常通用,不論是策略產生是由TS、MC、EXCEL或客製的程式,都可以在訊號產生時寫入文字檔,再由文字檔下單機處理委託送單。
網路上也有多種免費的文字檔下單機可以利用,或許之後可以請J再介紹一下,但套裝的總是有點用不順手,寫的太完整的感覺又很複雜,所以L就來紀錄文字檔下單機的設計架構,若有朋友嘗試自己設計一個文字檔下單機,也是個起步的參考。
設計程式一開始當然就是確認需求,還有定義好文字檔的格式。這格式設計有很多種,例如
- 方向,口數,價位 (“Buy”, ”1”, “8000”) (買一口8000)
- 方向結合口數,價位 (”2”, “8000”) (買兩口8000)、(“-1”, ”7950 ”) (賣一口7950)
- 方向結合口數 ,(“1”) (買一口)、(“-3”) (賣三口)
- 給部位OI ,(“1”) (調到買進一單位)、(“-1”)(調到賣出一單位)、(“0”)(調到無部位)
如果文字檔沒寫入價位,那麼下單機就要能收行情,不然就只能丟市價單很奇怪,另外依照不同的文字檔定義,下單機也要設計不同的判斷邏輯。資料給的越少,下單機要處理的事情就越多,那我們就來看給最少的第四種為範例,文字檔只寫策略現在是0、1、-1,這三種狀態。
繼續確認需求,這個下單機對於使用上的功能希望如下:
- 設定連結下單的帳號
- 設定文字檔所在路徑
- 設定讀取的文字檔
- 設定策略的口數倍數
- 設定下單的滑價點數
- 設定下單機開啟/關閉
- 目前策略狀態以燈號顯示
- 策略進出紀錄
內部要作到的功能如下:
- 登入帳號
- 收取行情並顯示
- 判斷文字檔後產生委託資料及送出
- 寫出訊號紀錄
以上,就先來刻介面,如下圖展示的範例:
介面各功能如需求所述就開始寫程式吧,唯一的按鈕[登入並啟動],要寫的程式大致是
private void buttonLogin_Click(object sender, EventArgs e)
{
FN1 = textBox1.Text;
Algo1 = System.IO.File.ReadAllText(@"L:\"+FN1+".txt");
changeColor();
Commodity = textBoxCommod.Text;
//登入並訂閱行情
api.login("XXXXX", "XXXXXX", "XXX.XX.X.XX");
if (api.loginStatusFlag == true)
{
labelLogin.Text = "登入成功";
api.regItem(Commodity);
}
else
{
labelLogin.Text = "登入失敗";
}
/*
這邊寫把行情顯示到介面的Label上
....
*/
//啟動新執行緒讀取文字檔動作
Thread ProcessPSTD = new Thread(ProcessPS);
ProcessPSTD.Start();
}
其中一開始的
FN1 = textBox1.Text;
Algo1 = System.IO.File.ReadAllText(@"L:\"+FN1+".txt");
就是先到設定路徑去讀取文字檔,所用到的方法是System.IO.File.ReadAllText,然後將文字檔的內容設定到Algo1這個字串(別忘了它只有可能是三種狀態0、1、-1),這是第一次讀取文字檔的狀態,之後文字檔的變動會要依據這個Alog1字串變數。