private void OnTradeGetStatus(object sender, COM_STATUS staus, byte[] msg) { TaiFexCom com = (TaiFexCom)sender; if (this.InvokeRequired) { Smart.OnGetStatus_EventHandler d = new Smart.OnGetStatus_EventHandler(OnTradeGetStatus); this.Invoke(d, new object[] { sender, staus, msg }); return; } // OnGetStatusUpdateUI(sender, staus, msg); }
public TFComController() { var credential = _configuration.GetCredential(); var server = _configuration.GetServerInfo(); _tfcom = new TaiFexCom(server.Item1, server.Item2, "API"); Console.WriteLine(@"Initialization for TaiFexCom version {0}", _tfcom.version); _tfcom.OnRcvMessage += OnRcvMessage_EventHandler; _tfcom.OnGetStatus += OnGetStatus_EventHandler; _tfcom.OnRcvServerTime += OnRcvServerTime_EventHandler; _tfcom.OnRecoverStatus += OnRecoverStatus_EvenHandler; _tfcom.LoginDirect(server.Item1, server.Item2, credential.Item1, credential.Item2, ' '); }
static void Main(string[] args) { quotecom = new Intelligence.QuoteCom(host, port, SID, Token); //接收證券行情物件 quotecom.SourceId = SID; quotecom.OnRcvMessage += OnQuoteRcvMessage; quotecom.OnGetStatus += OnQuoteGetStatus; quotecom.OnRecoverStatus += OnRecoverStatus; tfcom = new Smart.TaiFexCom(host, port, SID); // 券證下單物件 tfcom.OnRcvMessage += OntfcomRcvMessage; //資料接收事件 tfcom.OnGetStatus += OntfcomGetStatus; //狀態通知事件 //tfcom.OnRcvServerTime += OntfcomRcvServerTime; //接收主機時間 //tfcom.OnRecoverStatus += OntfcomRecoverStatus; //回補狀態通知 tfcom.LoginDirect(host, port, id, pwd, ' '); tfcom.AutoSubReportSecurity = true; tfcom.AutoRecoverReport = true; Console.ReadLine(); quotecom.Connect2Quote(host, port, id, pwd, area, ""); Console.ReadLine(); quotecom.SubQuotesDepth("6223"); quotecom.SubQuotesMatch("6223"); Console.ReadLine(); TradeBotBase tb = new TradeBotQA("6223", brokerid, account, 1, quotecom, tfcom, 1.5, 109, 100, BuyMode.Auto, StopLossMode.Auto, LockGainMode.Auto); tb.StatusChange += ShowChanges; tb.Start(); //AddInfo(tfcom.Accounts); //Console.WriteLine(brokerid); //Console.WriteLine(account); Console.ReadLine(); tb.BuyStock(); Console.ReadLine(); tb.SellStock(); //quotecom.SubQuotesDepth("2317"); //quotecom.SubQuotesMatch("2317"); //Console.ReadLine(); //TradeBot tb2 = new TradeBot("2317", brokerid, account, 1, quotecom, tfcom,1.5); //tb2.StatusChange += ShowChanges; //tb2.Start(); }
public Form1() { InitializeComponent(); #region Comfup Add InitializeComfup(); #endregion quoteCom = new Intelligence.QuoteCom(cbHostStk.Text, 8000, tbSID.Text, tbToken.Text); quoteCom.OnRcvMessage += OnQuoteRcvMessage; quoteCom.OnGetStatus += OnQuoteGetStatus; quoteCom.OnRecoverStatus += OnRecoverStatus; quoteCom.QDebugLog = false; quoteCom.FQDebugLog = false; this.Text = "QuoteCom 範例程式 FOR 證券 [ Version : " + quoteCom.version + " ]"; //2014.6.19 ADD //先Create , 尚未正式連線, IP 在正式連線時再輸入即可 ; tfcom = new TaiFexCom("10.4.99.71", 8000, "API"); tfcom.OnRcvMessage += OnTradeRcvMessage; //資料接收事件 tfcom.OnGetStatus += OnTradeGetStatus; //狀態通知事件 tfcom.OnRcvServerTime += OnRcvServerTime; //接收主機時間 tfcom.OnRecoverStatus += OnRecoverStatus; //回補狀態通知 }
public static void OntfcomRecoverStatus(object sender, string Topic, RECOVER_STATUS status, uint RecoverCount) { TaiFexCom com = (TaiFexCom)sender; switch (status) { case RECOVER_STATUS.RS_DONE: //回補資料結束 if (RecoverCount == 0) { AddInfo(String.Format("結束回補 Topic:[{0}]", Topic)); } else { AddInfo(String.Format("結束回補 Topic:[{0} 筆數:{1}]", Topic, RecoverCount)); } break; case RECOVER_STATUS.RS_BEGIN: //開始回補資料 AddInfo(String.Format("開始回補 Topic:[{0}]", Topic)); break; } }
public TradeBotLong(string stockid, string brokerid, string account, ushort BuyQty, QuoteCom quotecom, TaiFexCom taifexcom, int amountthreshold, BuyMode buymode, StopLossMode stoplossmode, LockGainMode lockgainmode) : base(stockid, brokerid, account, BuyQty, quotecom, taifexcom, amountthreshold, buymode, stoplossmode, lockgainmode) { }
public StockEditor(DataTable table, QuoteCom quotecom, TaiFexCom tfcom, string brokerid, string account, string StockHistoryFile) { InitializeComponent(); this.StockTable = table; this.quotecom = quotecom; this.tfcom = tfcom; this.brokerid = brokerid; this.account = account; this.StockHistoryFile = StockHistoryFile; //建立下拉選單表格 BuyModeTable.Columns.Add("BuyMode", typeof(string)); BuyModeTable.Columns.Add("BuyMode_Text", typeof(string)); BuyModeTable.Rows.Add("Auto", "自動"); BuyModeTable.Rows.Add("Notify", "手動"); BindingSource bindingBuyMode = new BindingSource(); bindingBuyMode.DataSource = BuyModeTable; StatusTable.Columns.Add("Status", typeof(string)); StatusTable.Columns.Add("Status_Text", typeof(string)); StatusTable.Rows.Add("StandBy", "待命中"); StatusTable.Rows.Add("WaitingBuySignal", "等待買入訊號"); StatusTable.Rows.Add("WaitingBuy", "等待買入"); StatusTable.Rows.Add("ConfirmBuyOrder", "確認委托買單"); StatusTable.Rows.Add("ConfirmBuyMatch", "確認買單成交"); StatusTable.Rows.Add("WaitingSellSignal", "等待賣出訊號"); StatusTable.Rows.Add("WaitingSell", "等待賣出"); StatusTable.Rows.Add("ConfirmSellOrder", "確認委托賣單"); StatusTable.Rows.Add("ConfirmSellMatch", "確認賣單成交"); StatusTable.Rows.Add("Stop", "中止流程"); StatusTable.Rows.Add("Error", "錯誤"); BindingSource bindingStatus = new BindingSource(); bindingStatus.DataSource = StatusTable; StopLossModeTable.Columns.Add("StopLossMode", typeof(string)); StopLossModeTable.Columns.Add("StopLossMode_Text", typeof(string)); StopLossModeTable.Rows.Add("Auto", "自動"); StopLossModeTable.Rows.Add("Manual", "手動"); BindingSource bindingStopLossMode = new BindingSource(); bindingStopLossMode.DataSource = StopLossModeTable; LockGainModeTable.Columns.Add("LockGainMode", typeof(string)); LockGainModeTable.Columns.Add("LockGainMode_Text", typeof(string)); LockGainModeTable.Rows.Add("Auto", "自動"); LockGainModeTable.Rows.Add("Manual", "手動"); BindingSource bindingLockGainMode = new BindingSource(); bindingLockGainMode.DataSource = LockGainModeTable; //增加欄位名稱 dgv_StockEditor.Columns.Add("StockID", "代號"); dgv_StockEditor.Columns["StockID"].DataPropertyName = "StockID"; dgv_StockEditor.Columns["StockID"].ReadOnly = true; DataGridViewComboBoxColumn StatusCol = new DataGridViewComboBoxColumn(); StatusCol.ValueMember = "Status"; StatusCol.DisplayMember = "Status_Text"; StatusCol.DataSource = bindingStatus; StatusCol.Name = "Status"; StatusCol.DataPropertyName = "Status"; StatusCol.HeaderText = "狀態"; StatusCol.ReadOnly = true; StatusCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; StatusCol.SortMode = DataGridViewColumnSortMode.Automatic; dgv_StockEditor.Columns.Add(StatusCol); dgv_StockEditor.Columns.Add("AmountThreshold", "成交量門檻"); dgv_StockEditor.Columns["AmountThreshold"].DataPropertyName = "AmountThreshold"; dgv_StockEditor.Columns["AmountThreshold"].ToolTipText = "前五分鐘成交量門檻"; //dgv_StockEditor.Columns["AmountThreshold"].ReadOnly = true; DataGridViewComboBoxColumn BuyModeCol = new DataGridViewComboBoxColumn(); BuyModeCol.ValueMember = "BuyMode"; BuyModeCol.DisplayMember = "BuyMode_Text"; BuyModeCol.DataSource = bindingBuyMode; BuyModeCol.Name = "BuyMode"; BuyModeCol.DataPropertyName = "BuyMode"; BuyModeCol.HeaderText = "買入模式"; //BuyModeCol.ReadOnly = true; BuyModeCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton; BuyModeCol.SortMode = DataGridViewColumnSortMode.Automatic; dgv_StockEditor.Columns.Add(BuyModeCol); DataGridViewComboBoxColumn StopLossModeCol = new DataGridViewComboBoxColumn(); StopLossModeCol.ValueMember = "StopLossMode"; StopLossModeCol.DisplayMember = "StopLossMode_Text"; StopLossModeCol.DataSource = bindingStopLossMode; StopLossModeCol.Name = "StopLossMode"; StopLossModeCol.DataPropertyName = "StopLossMode"; StopLossModeCol.HeaderText = "停損模式"; //StopLossModeCol.ReadOnly = true; StopLossModeCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton; StopLossModeCol.SortMode = DataGridViewColumnSortMode.Automatic; dgv_StockEditor.Columns.Add(StopLossModeCol); DataGridViewComboBoxColumn LockGainModeCol = new DataGridViewComboBoxColumn(); LockGainModeCol.ValueMember = "LockGainMode"; LockGainModeCol.DisplayMember = "LockGainMode_Text"; LockGainModeCol.DataSource = bindingLockGainMode; LockGainModeCol.Name = "LockGainMode"; LockGainModeCol.DataPropertyName = "LockGainMode"; LockGainModeCol.HeaderText = "停利模式"; //LockGainModeCol.ReadOnly = true; LockGainModeCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton; LockGainModeCol.SortMode = DataGridViewColumnSortMode.Automatic; dgv_StockEditor.Columns.Add(LockGainModeCol); //DataGridViewComboBoxColumn BuyQtyCol = new DataGridViewComboBoxColumn(); //BuyQtyCol.Items.AddRange(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); //BuyQtyCol.Name = "BuyQty"; //BuyQtyCol.DataPropertyName = "BuyQty"; //BuyQtyCol.HeaderText = "設定買量"; //dgv_StockList.Columns.Add(BuyQtyCol); dgv_StockEditor.Columns.Add("BuyQty", "設定買量"); dgv_StockEditor.Columns["BuyQty"].DataPropertyName = "BuyQty"; //dgv_StockEditor.Columns["BuyQty"].ReadOnly = true; BindingSource bs = new BindingSource(); bs.DataSource = StockTable; dgv_StockEditor.DataSource = bs; ////隱藏不顯示欄位 dgv_StockEditor.Columns["TradeBot"].Visible = false; dgv_StockEditor.Columns["BuyAvgPrice"].Visible = false; dgv_StockEditor.Columns["MatchBuyQty"].Visible = false; dgv_StockEditor.Columns["SellAvgPrice"].Visible = false; dgv_StockEditor.Columns["MatchSellQty"].Visible = false; dgv_StockEditor.Columns["ROI"].Visible = false; dgv_StockEditor.Columns["ClosePrice"].Visible = false; dgv_StockEditor.Columns["OpenPrice"].Visible = false; dgv_StockEditor.Columns["MatchTime"].Visible = false; dgv_StockEditor.Columns["MatchPrice"].Visible = false; dgv_StockEditor.Columns["MatchQty"].Visible = false; dgv_StockEditor.Columns["TotalQty"].Visible = false; dgv_StockEditor.Columns["AH"].Visible = false; dgv_StockEditor.Columns["NH"].Visible = false; dgv_StockEditor.Columns["NL"].Visible = false; dgv_StockEditor.Columns["AL"].Visible = false; //設定下拉選單預設值 cb_BuyMode.SelectedIndex = 0; cb_StopLossMode.SelectedIndex = 0; cb_LockGainMode.SelectedIndex = 0; }
public static void initial() { msg trademsg = new msg(); while (Login.kgitrade_test_mode == 2) Thread.Sleep(1000); if (Login.kgitrade_test_mode == 1) { Console.WriteLine("Study mode.\nDon't connect to Kgi server."); while (true) Thread.Sleep(1000); } else if (Login.kgitrade_test_mode == 0) // Real Trade { tfcom = new TaiFexCom(Login.Srv("T"), Login.Port, "API", false); tfcom.ConnectTimeout = 5000; //連線time out 時間 1/1000 秒 tfcom.AutoRetriveProductInfo = false; tfcom.AutoSubReport = false; tfcom.AutoRecoverReport = false; tfcom.AutoRecoverReportForeign = false; tfcom.OnRcvMessage += trademsg.OnRcvMessage; //資料接收事件 tfcom.OnGetStatus += trademsg.OnGetStatus; //狀態通知事件 tfcom.OnRcvServerTime += trademsg.OnRcvServerTime; //接收主機時間 tfcom.OnRecoverStatus += trademsg.OnRecoverStatus; //回補狀態通知 tfcom.LoginDirect(Login.Srv("T"), Login.Port, Login.ID, Login.PW(), ' '); while (msg.kgitradesrv == false) { msg.kgitradesrv_wdg = true; Thread.Sleep(1000); } Console.WriteLine("Check Qty"); checkqty(); //確認庫存 RequestId = tfcom.GetRequestId(); //取得送單序號 Console.WriteLine("Get Trade licence : " + RequestId.ToString()); fullsymbol = Login.tradeobj;// tfcom.GenFutSymbol(Login.tradeobj, Login.YM, ""); Console.WriteLine("Trade Obj : "+ fullsymbol); while (true) { while (msg.kgitradesrv == false) { tfcom.LoginDirect(Login.Srv("T"), Login.Port, Login.ID, Login.PW(), ' '); Console.WriteLine("Kgi Trade srv try con."); Thread.Sleep(3000); if (msg.kgitradesrv == true) { msg.kgitradesrv_wdg = true; Console.WriteLine("Kgi Trade srv connected"); } } Thread.Sleep(1000); while (msg.kgitradesrv_wdg) { msg.kgitradesrv_wdg = false; tfcom.GetAccountList(); Thread.Sleep(26000); } msg.kgitradesrv = false; Console.WriteLine("Kgi trade srv WDG false"); Thread.Sleep(1000); } } }
public static void OntfcomGetStatus(object sender, COM_STATUS staus, byte[] msg) { TaiFexCom com = (TaiFexCom)sender; string smsg = null; switch (staus) { case COM_STATUS.LOGIN_READY: //登入成功 AddInfo("登入成功:" + com.Accounts); break; case COM_STATUS.LOGIN_FAIL: //登入失敗 AddInfo(String.Format("登入失敗:[{0}]", encoding.GetString(msg))); break; case COM_STATUS.LOGIN_UNKNOW: //登入狀態不明 AddInfo(String.Format("登入狀態不明:[{0}]", encoding.GetString(msg))); break; case COM_STATUS.CONNECT_READY: //連線成功 smsg = "伺服器" + tfcom.ServerHost + ":" + tfcom.ServerPort + Environment.NewLine + "伺服器回應: [" + encoding.GetString(msg) + "]" + Environment.NewLine + "本身為" + ((tfcom.isInternal) ? "內" : "外") + "部 IP:" + tfcom.MyIP; AddInfo(smsg); break; case COM_STATUS.CONNECT_FAIL: //連線失敗 smsg = encoding.GetString(msg); AddInfo("連線失敗:" + smsg + " " + tfcom.ServerHost + ":" + tfcom.ServerPort); break; case COM_STATUS.DISCONNECTED: //斷線 smsg = encoding.GetString(msg); AddInfo("斷線:" + smsg); break; case COM_STATUS.AS400_CONNECTED: AddInfo("AS400 連線成功:" + encoding.GetString(msg)); break; case COM_STATUS.AS400_CONNECTFAIL: AddInfo("AS400 連線失敗:" + encoding.GetString(msg)); break; case COM_STATUS.AS400_DISCONNECTED: AddInfo("AS400 連線斷線:" + encoding.GetString(msg)); break; case COM_STATUS.SUBSCRIBE: com.WriterLog("msg.Length=" + msg.Length); smsg = encoding.GetString(msg); com.WriterLog(String.Format("註冊:[{0}]", smsg)); AddInfo(String.Format("註冊:[{0}]", smsg)); break; case COM_STATUS.UNSUBSCRIBE: smsg = encoding.GetString(msg); AddInfo(String.Format("取消註冊:[{0}]", smsg)); break; case COM_STATUS.ACK_REQUESTID: //下單或改單第一次回覆 long RequestId = BitConverter.ToInt64(msg, 0); byte status = msg[8]; //***TEST AddInfo("序號回覆: " + RequestId + " 狀態=" + ((status == 1) ? "收單" : "失敗")); break; } }
private string MatchLogFolder = ""; //買入賣出成交紀錄 public TradeBotQA(string stockid, string brokerid, string account, ushort BuyQty, QuoteCom quotecom, TaiFexCom taifexcom, int amountthreshold, BuyMode buymode, StopLossMode stoplossmode, LockGainMode lockgainmode) : base(stockid, brokerid, account, BuyQty, quotecom, taifexcom, amountthreshold, buymode, stoplossmode, lockgainmode) { //初始化成交明細下載目錄 this.MatchLogFolder = Path.Combine(Directory.GetCurrentDirectory(), DateTime.Now.ToString("yyyyMMdd")); //建立目錄 if (!Directory.Exists(this.MatchLogFolder)) { Directory.CreateDirectory(this.MatchLogFolder); } Console.WriteLine(MatchLog); }