Beispiel #1
0
        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);
        }
Beispiel #2
0
        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, ' ');
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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;   //回補狀態通知
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
 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)
 {
 }
Beispiel #7
0
        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;
        }
Beispiel #8
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);
         }
     }
 }
Beispiel #9
0
        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;
            }
        }
Beispiel #10
0
 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);
 }