Exemple #1
0
        private void saveData()
        {
            if (m_sName == "NO_NAME")
            {
                return;
            }
            if (!CFATManager.isOnlineMode())
            {
                return;
            }

            string sFile = getStoreFileName();

            if (File.Exists(sFile))
            {
                File.Delete(sFile);
            }

            var xs = new XmlSerializer(typeof(CCacheData));

            using (TextWriter sw = new StreamWriter(sFile))
            {
                xs.Serialize(sw, this);
            }

            CFATLogger.output_proc("File saved : " + sFile);
            m_dtLastSavedTime = DateTime.Now;
        }
        private void check3Times_loss()
        {
            if (!CFATManager.isOnlineMode())
            {
                return;
            }

            m_dLastProfit = m_tradeHistory.getProfit(0);

            if (ex_nIsNewOrder <= 0)
            {
                return;
            }

            if (m_tradeHistory.getTradeCount() < 3)
            {
                return;
            }

            double dProfit = 0;

            for (int i = 0; i < 3; i++)
            {
                dProfit = m_tradeHistory.getProfit(i);
                if (dProfit > 0)
                {
                    return;
                }
            }

            CFATLogger.output_proc(m_sLogicID + " : 3 times loss, ex_nIsNewOrder will be 0.");
            setParam_newOrder(0);// continuously 3 times loss, stop trading.
        }
        private bool isPositionMatch()
        {
            if (CFATManager.m_nRunMode != ERUN_MODE.REALTIME)
            {
                return(true);
            }

            foreach (CProduct product in m_products)
            {
                if (!product.isPositionMatch())
                {
                    return(false);
                }
            }

            // If there is different virtual lots with first site and second site.
            //Here is problem when using multi position with ex_dAddLots !!!!!!!!!!
            if (Math.Abs(m_products[_FIRST].getPosLots_Total_vt() + m_products[_SECOND].getPosLots_Total_vt()) > ex_dAddLots + CFATCommon.ESP)
            {
                return(false);
            }

            // IF there is different real lots with first site and second site
            if (Math.Abs(m_products[_FIRST].getPosLots_Total_real() + m_products[_SECOND].getPosLots_Total_real()) > ex_dAddLots + CFATCommon.ESP)
            {
                return(false);
            }

            CFATLogger.output_proc(string.Format("Position matched! sym1={0},real lots = {1}, sym2={2}, real lots = {3}",
                                                 m_products[_FIRST].getSymbol(), m_products[_FIRST].getPosLots_Total_real(),
                                                 m_products[_SECOND].getSymbol(), m_products[_SECOND].getPosLots_Total_real()));

            return(true);
        }
Exemple #4
0
        private void publishToMQ()
        {
            if (!CFATManager.isOnlineMode())
            {
                return;
            }

            if ((DateTime.Now - m_dtLastPublish).TotalSeconds < 2) //every 2 seconds publish message
            {
                return;
            }
            try
            {
                //parameters :
                publishParams();

                //variables : logic_id@name1,val1@name2,val2@name3,val3.....
//                 string sTxt = string.Format("{0}@isNeedCheckPosition,{1}@sh_ask,{2}@sh_bid,{3}@ld_ask,{4}@ld_bid,{5}@g_dOpen_London,{6}@m_dExpectTp,{7}@posCnt,{8}@real lots,{9}@ex_nIsNewOrder,{10}@lastPosType,{11}@lastPosTime,{12}@m_nOpen_Ticks,{13}",
//                     m_sLogicID,
//                     m_bIsNeedCheckPosition,
//                     m_dAsk_Shanghai, m_dBid_Shanghai,
//                     m_dAsk_London, m_dBid_London,
//                     g_dOpen_London, m_dExpectTp,
//                     m_products[ID_SHANGHAI].getPosCount(), m_products[ID_SHANGHAI].getPosLots_real(),
//                     ex_nIsNewOrder, lastPosType, lastPosTime, m_nOpen_Ticks);
//
//                 CMQClient.publish_msg(sTxt, CFATCommon.MQ_TOPIC_VARS);
                m_dtLastPublish = DateTime.Now;
            }
            catch
            {
                CFATLogger.output_proc("CLogic_gold_latencyV2 : publishToMQ error!");
            }
        }
Exemple #5
0
 public override bool OnInit()
 {
     CFATLogger.output_proc("Price_record init :");
     loadParams();
     CFATLogger.output_proc("Price_record param done! :");
     return(base.OnInit());
 }
Exemple #6
0
        private void saveRates_forLog()
        {
            if (m_products[ID_SHANGHAI].getPosCount_vt() == 0)
            {
                return;
            }
            if (CFATManager.m_nRunMode != ERUN_MODE.BACKTEST)
            {
                return;
            }
            string sRates = m_products[ID_SHANGHAI].getTickTime().ToString("yyyy/MM/dd HH:mm:ss.fff");

            string sLogFolder = "Test\\" + m_products[ID_SHANGHAI].getHistoryCount_vt().ToString();

            if (m_sPrevRatesFolder != sLogFolder)
            {//Write prev 100 ticks
                m_sPrevRatesFolder = sLogFolder;
                for (int i = 100; i > 0; i--)
                {
                    sRates  = m_products[ID_SHANGHAI].getTick(i).m_dtTime.ToString("yyyy/MM/dd HH:mm:ss.fff");
                    sRates += string.Format(",{0},{1},{2},{3},{4}", m_products[ID_SHANGHAI].getTick(i).dBid, m_products[ID_SHANGHAI].getTick(i).dAsk,
                                            m_products[ID_LONDON].getTick(i).dBid, m_products[ID_LONDON].getTick(i).dAsk, m_dTrailingStop_ld);
                    CFATLogger.record_rates(sLogFolder, sRates);
                }
            }
            sRates  = m_products[ID_SHANGHAI].getTickTime().ToString("yyyy/MM/dd HH:mm:ss.fff");
            sRates += string.Format(",{0},{1},{2},{3},{4},{5},{6}", m_dBid_Shanghai, m_dAsk_Shanghai, m_dBid_London, m_dAsk_London, m_dTrailingStop_ld, m_dMaxVal, m_dAlpha);
            CFATLogger.record_rates(sLogFolder, sRates);
        }
Exemple #7
0
        private void loadData()
        {
            if (m_sName == "NO_NAME")
            {
                return;
            }
            if (!CFATManager.isOnlineMode())
            {
                return;
            }

            string sFile = getStoreFileName();

            if (!File.Exists(sFile))
            {
                CFATLogger.output_proc("File don't exist: " + sFile);
                return;
            }

            var xs = new XmlSerializer(typeof(CCacheData));

            using (var sr = new StreamReader(sFile))
            {
                var tempObject = (CCacheData)xs.Deserialize(sr);
                m_tickData  = tempObject.m_tickData;
                m_minData   = tempObject.m_minData;
                m_renkoData = tempObject.m_renkoData;

                m_nCurPos_tick  = tempObject.m_nCurPos_tick;
                m_nCurPos_min   = tempObject.m_nCurPos_min;
                m_nCurPos_renko = tempObject.m_nCurPos_renko;
            }

            CFATLogger.output_proc("File loaded : " + sFile);
        }
Exemple #8
0
        public frmMain()
        {
            InitializeComponent();


            CFATLogger.registerForm(this);
        }
        // added by cmh
        public void requestFirstSiteOrder()
        {
            double dReqPrice_first = 0;
            double dLots           = ex_dLots;

            if (ex_nUseRandomLots == 1)
            {
                dLots = getRandomLots(dLots);
            }

            dLots += ex_dAddLots;

            int           nProfit_calc_01 = 0;
            EFILLED_STATE nRet;

            if ((m_nCmd4Thread == ETRADER_OP.BUY || m_nCmd4Thread == ETRADER_OP.SELL) && m_products[_FIRST].getPosCount_vt() == 0)
            {
                setParam_newOrder(ex_nIsNewOrder - 1);
            }

            if (m_nCmd4Thread == ETRADER_OP.BUY_CLOSE || m_nCmd4Thread == ETRADER_OP.SELL_CLOSE)
            {
                dLots = Math.Abs(m_products[_FIRST].getPosLots_vt(0));
            }

            if (dLots < CFATCommon.ESP)
            {
                CFATLogger.output_proc("*** Invalid Lots !!!, pls check virtual position!!!!");
                dLots = ex_dLots;
            }

            if (m_nCmd4Thread == ETRADER_OP.BUY || m_nCmd4Thread == ETRADER_OP.SELL_CLOSE)
            {
                dReqPrice_first = m_products[_FIRST].m_dAsk;
                nProfit_calc_01 = -1;
            }

            if (m_nCmd4Thread == ETRADER_OP.SELL || m_nCmd4Thread == ETRADER_OP.BUY_CLOSE)
            {
                dReqPrice_first = m_products[_FIRST].m_dBid;
                nProfit_calc_01 = 1;
            }

            nRet = m_products[_FIRST].reqOrder(m_nCmd4Thread, ref dLots, ref dReqPrice_first, EORDER_TYPE.MARKET);//First Order
            if (nRet == EFILLED_STATE.FULL)
            {
                m_tradeHistory.pushHistory(dReqPrice_first * nProfit_calc_01);
                dLots = getSecondLots(dLots);
            }
            else
            {
                CFATLogger.output_proc("first order failed!");
            }

            // setState(ELOGIC_STATE.NEED_CHECK_POSITION_MATCH);
            m_dtLastFilledTime   = DateTime.Now;
            m_bIsFirstThreadLive = false;
            m_products[_FIRST].m_site.setStatus(Site.CSite.SITE_STATUS.NONE);
        }
Exemple #10
0
 public virtual void OnDeInit()
 {
     CFATLogger.output_proc(string.Format("Site DeInit : {0} <------", m_sSiteName));
     foreach (KeyValuePair <string, CCacheData> entry in m_rates_cache)
     {
         entry.Value.OnDeInit();
     }
 }
Exemple #11
0
        public void OnDeInit()
        {
            m_rates.OnDeInit();
            if (m_bUseRenko)
            {
                m_product_A_rk.OnDeInit();
                m_product_B_rk.OnDeInit();
            }

            CFATLogger.record_reates_done();
        }
Exemple #12
0
 public void setState(ELOGIC_STATE nState)
 {
     m_stState.m_nState        = nState;
     m_stState.m_dtUpdatedTime = DateTime.Now;
     //HSM???
     if (CFATManager.isOnlineMode())
     {
         CFATLogger.output_proc(string.Format("{0},{1} : Change State -> {2}",
                                              CFATCommon.m_dtCurTime, m_sLogicID, m_stState.m_nState));
     }
 }
 private void matchPosReal2Virtual()
 {
     m_products[_FIRST].updateRealPositions();
     m_products[_SECOND].updateRealPositions();
     CFATLogger.output_proc(string.Format("matchPosReal2Virtual : {0}, {1}", m_products[_FIRST].getPosLots_Total_real(), m_products[_SECOND].getPosLots_Total_real()));
     if (Math.Abs(m_products[_FIRST].getPosLots_Total_real() + m_products[_SECOND].getPosLots_Total_real()) < CFATCommon.ESP + ex_dAddLots)
     {
         m_products[_FIRST].matchPosReal2Virtual();
         m_products[_SECOND].matchPosReal2Virtual();
     }
 }
Exemple #14
0
 private void process_event()
 {
     //Parameter changed
     if (CEvent_ParamChanged.g_bChanged)
     {
         CFATLogger.output_proc("Request : parameter change");
         CEvent_ParamChanged.g_bChanged = false;
         changeLogicParams();
     }
     //----------------
 }
Exemple #15
0
        private void log_reqOrders()
        {
            string sLog = "";

            foreach (TReqOrder reqOrderItem in m_lstReqOrders)
            {
                sLog = string.Format("{0},{1},cmd={2},reqLots={3}, excLots = {4}, processed = {5}, orderResult = {6}",
                                     reqOrderItem.m_sLogicID, reqOrderItem.m_product.m_sSymbol, reqOrderItem.m_nCmd,
                                     reqOrderItem.m_dLots_req, reqOrderItem.m_dLots_exc, reqOrderItem.m_bProcessed, reqOrderItem.m_nOrderResult);
                CFATLogger.output_proc(sLog);
            }
        }
Exemple #16
0
 public int getSignal_unitTest()
 {
     for (int i = 0; i < m_lstUnitTest_signal.Count; i++)
     {
         if (m_lstUnitTest_signal[i].m_dtTime == CFATCommon.m_dtCurTime)
         {
             CFATLogger.output_proc(string.Format("unitTest signal : {0},{1}", m_sLogicID, m_lstUnitTest_signal[i].m_sCmd));
             return((int)TRADER.string2Cmd(m_lstUnitTest_signal[i].m_sCmd));
         }
     }
     return((int)ETRADER_OP.NONE);
 }
Exemple #17
0
 public void matchPosReal2Virtual(string sSymbol, string sLogicID)
 {
     CFATLogger.output_proc(string.Format("matchPosReal2Virtual : {0}, real pos cnt = {1}", m_sSiteName, m_lstPos_real.Count));
     foreach (TPosItem posItem in m_lstPos_real)
     {
         if (posItem.m_sSymbol == sSymbol)// && Math.Abs(getSymbolLots_real(sSymbol)) > CFATCommon.ESP)
         {
             CFATLogger.output_proc(string.Format("Real->Virtual position : posItemSymbol={0}, symbol = {1}, logicID = {2}", posItem.m_sSymbol, sSymbol, sLogicID));
             posItem.m_sLogicID = sLogicID;
             m_lstPos_vt.Add(posItem);
         }
     }
 }
        private void checkForClose()
        {
            // added by cmh
            if (m_bIsFirstThreadLive || m_bIsSecondThreadLive)
            {
                return;
            }

            if (m_products[_FIRST].m_site.getStatus() == Site.CSite.SITE_STATUS.PROCESSING || m_products[_SECOND].m_site.getStatus() == Site.CSite.SITE_STATUS.PROCESSING)
            {
                return;
            }
            // ---
            if (m_products[_FIRST].getPosCount_vt() == 0)
            {
                return;
            }

            if ((DateTime.Now - m_dtLastFilledTime).TotalSeconds < ex_nPosHoldTimeSec)
            {
                return;
            }


            int        nSignal = getSignal();
            ETRADER_OP nCmd    = m_products[_FIRST].getPosCmd_vt(0);

            double dLots = ex_dLots;

            if (nCmd == ETRADER_OP.BUY && TRADER.isContain(nSignal, (int)ETRADER_OP.BUY_CLOSE))
            {
                if (CFATManager.isOnlineMode())
                {
                    CFATLogger.output_proc("close buy !");
                }
                requestOrder(ETRADER_OP.BUY_CLOSE);
                check3Times_loss();
                return;
            }

            if (nCmd == ETRADER_OP.SELL && TRADER.isContain(nSignal, (int)ETRADER_OP.SELL_CLOSE))
            {
                if (CFATManager.isOnlineMode())
                {
                    CFATLogger.output_proc("close sell !");
                }
                requestOrder(ETRADER_OP.SELL_CLOSE);
                check3Times_loss();
                return;
            }
        }
Exemple #19
0
        public override bool OnInit()
        {
            CFATLogger.output_proc("connecting to pipe : " + m_sPipServerName);
            //MT4 init
            if (!m_mt4ApiDLL.connectToMT4(m_sPipServerName))
            {
                CFATLogger.output_proc(string.Format("site = {0} : Cannot connect to PIP, pipe name = {1}, please check MT4 and parameters of EA!",
                                                     m_sSiteName, m_sPipServerName));
                return(false);
            }
            CFATLogger.output_proc("Connect to MT4 pipe OK! site = " + m_sSiteName);
            //FIX init
            string sConfigFile;

            sConfigFile = Path.Combine(Application.StartupPath, "Config\\Fix", m_sFixConfig_trade);
            CFATLogger.output_proc("loading : " + sConfigFile);
            m_fixApi_trade = new CFixAPI(sConfigFile);

            if (!m_fixApi_trade.fixLogin())
            {
                CFATLogger.output_proc(string.Format("Connect to fix trade server is fail! : site name = {0}", m_sSiteName));
                return(false);
            }

            sConfigFile = Path.Combine(Application.StartupPath, "Config\\Fix", m_sFixConfig_data);
            CFATLogger.output_proc("loading : " + sConfigFile);

            m_fixApi_data = new CFixAPI(sConfigFile);

            if (!m_fixApi_data.fixLogin())
            {
                CFATLogger.output_proc(string.Format("Connect to fix data server is fail! : site name = {0}", m_sSiteName));
                return(false);
            }
            CFATLogger.output_proc("Connect to Fix OK!");
            //subscrib rates
            TRateRange rateRange;

            foreach (KeyValuePair <string, string> entry in m_sSymbols_fix)
            {
                rateRange = m_rateRange_fix[entry.Key];
                m_fixApi_data.startSubscribe(entry.Value, entry.Key, rateRange.dMin, rateRange.dMax);

                Thread.Sleep(500);
            }



            return(base.OnInit());
        }
Exemple #20
0
        public CFATManager(ERUN_MODE nMode = ERUN_MODE.BACKTEST, string sMode = "")
        {
            m_configGeneral = new TGeneralInfo();
            CConfigMng.load_config_general(ref m_configGeneral);
            CMQClient.connectToMQ(m_configGeneral.sHost, m_configGeneral.sUser, m_configGeneral.sPwd);


            CFATLogger.output_proc(string.Format("######  Start Mode = {0} #######", sMode));
            CFATManager.m_nRunMode = nMode;
            m_lstLogics            = new List <CLogic>();

            m_configLogics    = new List <Dictionary <string, string> >();
            m_configSites     = new List <Dictionary <string, string> >();
            m_configWorkTimes = new List <TWorkTimeInterval>();
        }
Exemple #21
0
        public static void makeReport()
        {
            bool bFirstSite = true;

            foreach (KeyValuePair <string, CSite> entry in CSiteMng.g_allSites)
            {
                entry.Value.makeReport(bFirstSite);
                bFirstSite = false;
            }

            if (CFATManager.m_nRunMode == ERUN_MODE.OPTIMIZE)
            {
                CFATLogger.output_opt_newLine();
            }
        }
Exemple #22
0
 public void changeParams()
 {
     try
     {
         foreach (KeyValuePair <string, string> entry in CEvent_ParamChanged.g_params)
         {
             m_params.setVal(entry.Key, entry.Value);
         }
     }
     catch
     {
         CFATLogger.output_proc("Error : CLogic::changeParams ");
     }
     CFATLogger.output_proc(string.Format("Logic : {0}, parameter changed!", m_sLogicID));
 }
Exemple #23
0
        public override bool OnInit()
        {
            bool bRet = CSHGoldAPI.sg_login(m_sID, m_sPwd);

            if (bRet)
            {
                CFATLogger.output_proc("Shanghai gold Login Success!");
            }
            else
            {
                CFATLogger.output_proc("Shanghai gold Login Fail!");
            }

            return(base.OnInit());
        }
Exemple #24
0
        public override void OnDeInit()
        {
            bool bRet = CSHGoldAPI.sg_logout();

            if (bRet)
            {
                CFATLogger.output_proc("Shanghai gold Logout Success!");
            }
            else
            {
                CFATLogger.output_proc("Shanghai gold Logout Fail!");
            }

            base.OnDeInit();
        }
Exemple #25
0
        public virtual bool OnInit()
        {
            CFATLogger.output_proc(string.Format("Logic Init : {0} ------>", m_sLogicName));
            string sParams = m_params.getString();

            CFATCommon.m_sOpt_param = sParams;
            setState(ELOGIC_STATE.NORMAL);
            CFATLogger.output_proc("Params : " + sParams);

            if (m_sMode == "unit_test")
            {
                load_unitTest();
            }

            return(true);
        }
Exemple #26
0
        public virtual bool OnInit()
        {
            CFATLogger.output_proc(string.Format("Site Init : {0} ------>", m_sSiteName));
            m_accInfo.init();
            m_report.init();
            m_lstPos_vt.Clear();
            m_lstPos_real.Clear();
            m_lstPosHistory_vt.Clear();
            m_status = SITE_STATUS.NONE;
            foreach (KeyValuePair <string, CCacheData> entry in m_rates_cache)
            {
                entry.Value.OnInit();
            }

            CFATLogger.output_proc("updateRealPositions : ");
            return(updateRealPositions());
        }
Exemple #27
0
 public bool OnInit()
 {
     if (!CSiteMng.OnInit())
     {
         return(false);
     }
     CFATLogger.output_proc("Logic init start!");
     foreach (CLogic objLogic in m_lstLogics)
     {
         if (!objLogic.OnInit())
         {
             return(false);
         }
     }
     CFATLogger.output_proc("Logic init OK!");
     return(true);
 }
Exemple #28
0
        public override bool OnInit()
        {
            CFATLogger.output_proc(string.Format("IB Init {0}, {1}, {2}--->", m_sHost, m_nPort, m_nClientID));
            if (!apiIB.connectToIB(m_sHost, m_nPort, m_nClientID))
            {
                CFATLogger.output_proc(string.Format("site = {0} : Cannot connect to IB= {1}", m_sSiteName));
                return(false);
            }
            Thread.Sleep(1000);

            foreach (string sSymbol in m_sSymbols)
            {
                CFATLogger.output_proc("IB subscribe : " + sSymbol);
                apiIB.subScribeMarketData(sSymbol);
            }
            Thread.Sleep(2000);
            return(base.OnInit());
        }
Exemple #29
0
        public override bool OnInit()
        {
            CFATLogger.output_proc("connecting to pipe : " + m_sPipServerName);
            if (!m_mt4ApiDLL.connectToMT4(m_sPipServerName))
            {
                CFATLogger.output_proc(string.Format("site = {0} : Cannot connect to PIP, pipe name = {1}, please check MT4 and parameters of EA!",
                                                     m_sSiteName, m_sPipServerName));
                return(false);
            }
            CFATLogger.output_proc("Connect to MT4 pipe OK! site = " + m_sSiteName);

            for (int i = 0; i < m_sSymbols.Count; i++)
            {
                m_mt4ApiDLL.mt4_registerSymbol(m_sSymbols[i]);
            }
            m_mt4ApiDLL.mt4_startSubscribe();
            return(base.OnInit());
        }
Exemple #30
0
        public override bool OnInit()
        {
            m_sBrokerID = "8000";
            m_sMDAddr   = "tcp://180.169.30.170:41213";

            if (!apiCnFt.createMDSpi(m_sBrokerID, m_sMDAddr))
            {
                CFATLogger.output_proc(string.Format("site = {0} : Cannot connect to China Future= {1}", m_sSiteName));
                return(false);
            }

            foreach (string sSymbol in m_sSymbols)
            {
                apiCnFt.addSymbol(sSymbol);
            }

            return(base.OnInit());
        }