Example #1
0
 public static TradePointInfo[] ToTradePointInfo(Data.TradePoints tradePoints)
 {
     TradePointInfo[] tradePointInfos = new TradePointInfo[tradePoints.Count];
     for (int idx = 0; idx < tradePoints.Count; idx++)
     {
         tradePointInfos[idx] = (TradePointInfo)tradePoints[idx];
     }
     return(tradePointInfos);
 }
Example #2
0
 public TradeAlertItem(string stockCode, string strategy, AppTypes.TimeScale timeScale, DateTime onDateTime,
                       double price, double volume, TradePointInfo tradePoint)
 {
     this.StockCode  = stockCode;
     this.TimeScale  = timeScale;
     this.Strategy   = strategy;
     this.OnDateTime = onDateTime;
     this.Price      = price;
     this.Volume     = volume;
     this.TradePoint = tradePoint;
 }
Example #3
0
        //[ServiceKnownType(typeof(TradePointInfo[]))]
        public TradePointInfo[] Analysis(string dataKey, string strategyCode)
        {
            TradePointInfo[] tradePointList = new TradePointInfo[0];
            AnalysisData     data           = GetAnalysisData(dataKey);

            if (data == null)
            {
                return(tradePointList);
            }
            application.Strategy.Meta meta = application.Strategy.Libs.FindMetaByCode(strategyCode);
            if (meta == null)
            {
                return(tradePointList);
            }
            return(application.Strategy.Libs.ToTradePointInfo(application.Strategy.Libs.Analysis(data, meta)));
        }
Example #4
0
        /// <summary>
        /// Tim tradepointInfo cua Pointidx
        /// </summary>
        /// <param name="pointIdx">diem tren do thi</param>
        /// <returns></returns>
        private TradePointInfo findTradePointInfo(int pointIdx)
        {
            TradePointInfo info = null;

            if (tradePoints == null)
            {
                return(null);
            }
            //Array.BinarySearch(tradePoints,
            for (int i = 0; i < tradePoints.Length; i++)
            {
                if ((tradePoints[i].DataIdx == pointIdx) && (tradePoints[i].isValid))
                {
                    return(tradePoints[i]);
                }
            }
            return(info);
        }
Example #5
0
        /// <summary>
        /// The hien thong tin tren moi diem ve
        /// </summary>
        /// <param name="curve"></param>
        /// <param name="pointIdx"></param>
        /// <returns></returns>
        private string PointValueEventPrice(CurveItem curve, int pointIdx)
        {
            if (!Settings.sysChartShowDescription)
            {
                return(null);
            }
            if (pointIdx >= myData.Open.Values.Length)
            {
                return(null);
            }

            DateTime dt     = DateTime.FromOADate(curve[pointIdx].X);
            string   retVal = "";

            switch (this.ChartTimeScale.Type)
            {
            case AppTypes.TimeScaleTypes.RealTime:
            case AppTypes.TimeScaleTypes.Minnute:
            case AppTypes.TimeScaleTypes.Hour: retVal = Languages.Libs.GetString("time") + " : " + dt.ToString(); break;

            case AppTypes.TimeScaleTypes.Day:  retVal = Languages.Libs.GetString("date") + " : " + dt.ToShortDateString(); break;

            case AppTypes.TimeScaleTypes.Week: retVal = Languages.Libs.GetString("week") + " : " + common.dateTimeLibs.WeekOfYear(dt).ToString() + "/" + dt.Year.ToString(); break;

            case AppTypes.TimeScaleTypes.Month: retVal = Languages.Libs.GetString("month") + " : " + dt.Month.ToString() + "/" + dt.Year.ToString(); break;

            case AppTypes.TimeScaleTypes.Year: retVal = Languages.Libs.GetString("year") + " : " + dt.Year.ToString(); break;
            }
            retVal += common.Consts.constCRLF + Languages.Libs.GetString("openPrice") + " : " + myData.Open.Values[pointIdx].ToString(Settings.sysMaskPrice) +
                      common.Consts.constCRLF + Languages.Libs.GetString("highPrice") + " : " + myData.High.Values[pointIdx].ToString(Settings.sysMaskPrice) +
                      common.Consts.constCRLF + Languages.Libs.GetString("lowPrice") + " : " + myData.Low.Values[pointIdx].ToString(Settings.sysMaskPrice) +
                      common.Consts.constCRLF + Languages.Libs.GetString("closePrice") + " : " + myData.Close.Values[pointIdx].ToString(Settings.sysMaskPrice) +
                      common.Consts.constCRLF + Languages.Libs.GetString("volume") + " : " + myData.Volume.Values[pointIdx].ToString(Settings.sysMaskQty);
            TradePointInfo info = findTradePointInfo(pointIdx);

            if (info != null)
            {
                retVal += common.Consts.constCRLF + Languages.Libs.GetString("targetPrice") + " : " + info.BusinessInfo.Short_Target +
                          common.Consts.constCRLF + Languages.Libs.GetString("resistance") + " : " + info.BusinessInfo.Short_Resistance +
                          common.Consts.constCRLF + Languages.Libs.GetString("support") + " : " + info.BusinessInfo.Short_Support;
            }
            return(retVal);
        }
Example #6
0
        //public static int CreateTradeAlert()
        //{
        //    CreateTradeAlert(null, null, null);
        //}
        public static int CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc)
        {
            DateTime frDate = common.Consts.constNullDate;
            DateTime toDate = DateTime.Now;

            //Run all strategy analysis for all stocks.
            databases.tmpDS.stockCodeDataTable stockCodeTbl = new databases.tmpDS.stockCodeDataTable();
            databases.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable);

            application.AnalysisData data = new application.AnalysisData();
            data.DataTimeRange = AppTypes.TimeRanges.None;
            data.DataMaxCount  = Settings.sysGlobal.AlertDataCount;

            TradeAlertItem[] tradeAlertList = new TradeAlertItem[0];
            StringCollection strategyList   = new StringCollection();

            for (int idx = 0; idx < StrategyData.MetaList.Values.Length; idx++)
            {
                application.Strategy.StrategyMeta meta = (application.Strategy.StrategyMeta)StrategyData.MetaList.Values[idx];
                if (meta.Type != AppTypes.StrategyTypes.Strategy)
                {
                    continue;
                }
                strategyList.Add(((application.Strategy.StrategyMeta)StrategyData.MetaList.Values[idx]).Code);
            }

            if (onStartFunc != null)
            {
                onStartFunc(stockCodeTbl.Count);
            }

            DateTime alertDate;
            DateTime alertFrDate = toDate.Date;
            DateTime alertToDate = toDate;

            for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++)
            {
                if (onProcessItemFunc != null)
                {
                    if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code))
                    {
                        break;
                    }
                }

                //foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales) //???
                AppTypes.TimeScale timeScale = AppTypes.TimeScaleFromType(AppTypes.TimeScaleTypes.Day);
                {
                    data.DataStockCode = stockCodeTbl[stockCodeIdx].code;
                    data.DataTimeScale = timeScale;
                    data.LoadData();
                    for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++)
                    {
                        StrategyData.ClearCache();
                        TradePoints advices = application.Strategy.StrategyLibs.AnalysisStrategy(data, strategyList[strategyIdx].Trim());

                        if ((advices == null) || (advices.Count == 0))
                        {
                            continue;
                        }

                        //Only check the last advices for alert
                        TradePointInfo tradeInfo = (TradePointInfo)advices[advices.Count - 1];
                        alertDate = DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]);

                        //Ignore alerts that out of date range.
                        if (alertDate < alertFrDate || alertDate > alertToDate)
                        {
                            continue;
                        }
                        Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1);

                        tradeAlertList[tradeAlertList.Length - 1] = new TradeAlertItem(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(),
                                                                                       timeScale, alertDate,
                                                                                       data.Close[tradeInfo.DataIdx],
                                                                                       data.Volume[tradeInfo.DataIdx], tradeInfo);
                    }
                }
            }
            //Create alerts in the day
            int noAlertCreated = CreateTradeAlert(tradeAlertList);

            //Save last lun date
            //SaveLastRunTime(toDate);
            if (onEndFunc != null)
            {
                onEndFunc();
            }
            stockCodeTbl.Dispose();
            return(noAlertCreated);
        }
Example #7
0
 private static void CreateTradeAlert(databases.baseDS.tradeAlertDataTable tradeAlertTbl, string portfolioCode,
                                      string stockCode, string strategy, AppTypes.TimeScale timeScale, TradePointInfo info, DateTime onTime, string msg)
 {
     databases.baseDS.tradeAlertRow row = tradeAlertTbl.NewtradeAlertRow();
     databases.AppLibs.InitData(row);
     row.onTime      = onTime;
     row.portfolio   = portfolioCode;
     row.stockCode   = stockCode;
     row.timeScale   = timeScale.Code;
     row.strategy    = strategy;
     row.status      = (byte)AppTypes.CommonStatus.New;
     row.tradeAction = (byte)info.TradeAction;
     row.subject     = info.TradeAction.ToString();
     row.msg         = msg;
     tradeAlertTbl.AddtradeAlertRow(row);
 }
Example #8
0
        public void PlotStrategyTradepoints(application.Strategy.StrategyMeta meta, bool showEstimation, EstimateTradePointFunc estimateFunc)
        {
            int idx;

            ShowMessage("");
            EstimateOptions estOption = new EstimateOptions();

            databases.tmpDS.tradeEstimateDataTable tbl        = new databases.tmpDS.tradeEstimateDataTable();
            application.StrategyStatistics         statistics = new StrategyStatistics();
            //TradePointInfo[]
            tradePoints = DataAccess.Libs.GetTradePointWithEstimationDetail(myData.myDataParam, myData.DataStockCode, meta.Code,
                                                                            estOption, out tbl, out statistics);
            /// Estimate trade points and set tradepoint's [isValid] property to mark whether a tradepoint is valid or not.
            for (idx = 0; idx < tradePoints.Length; idx++)
            {
                tradePoints[idx].isValid = !tbl[idx].ignored;
            }

            for (idx = tradePoints.Length - 1; idx > 0; idx--)
            {
                if (tradePoints[idx].isValid)
                {
                    break;
                }
            }

            TradePointInfo tpiTradePointInfo = (TradePointInfo)tradePoints[idx];
            BusinessInfo   biLastTrade       = tpiTradePointInfo.BusinessInfo;
            BusinessInfo   biLastPoint       = tradePoints[tradePoints.Length - 1].BusinessInfo;

            double price = myData.Close[myData.Close.Count - 1];
            double risk  = (biLastPoint.Short_Resistance - price) / (price - biLastPoint.Short_Support);

            //string sResult = "Close price=" + price+
            //                 "Target="+biLastTrade.Short_Target+
            //                 "Resistance=" + biLastPoint.Short_Resistance +
            //                 " Support=" + biLastPoint.Short_Support +
            //                 " Risk return=" +risk+
            //                 " Winning Percentage:"+ String.Format("{0:P2}",statistics.dWinningPercentagePerTrade)+
            //                 " Max %Win Per Trade:" +  String.Format("{0:P2}",statistics.dMaxWinningPercentage)+
            //                 " Max %Lose Per Trade" + String.Format("{0:P2}", statistics.dMaxLosingPercentage)+
            //                 " Average %Win Per Trade" + String.Format("{0:P2}", statistics.dAverageWinningPercentage)+
            //                 " Average %Lose Per Trade" + String.Format("{0:P2}", statistics.dAverageLosingPercentage); ;

            PlotStrategyTradepoints(application.Strategy.StrategyLibs.ToTradePoints(tradePoints), pricePanel);



            //MessageBox.Show(sResult);
            //Show form
            Tools.Forms.TradeStatistics formStatistic = new Tools.Forms.TradeStatistics();
            formStatistic.AddStatisticInfo("Close price", price);
            formStatistic.AddStatisticInfo("Target", biLastTrade.Short_Target);
            formStatistic.AddStatisticInfo("Resistance", biLastPoint.Short_Resistance);
            formStatistic.AddStatisticInfo("Support", biLastPoint.Short_Support);
            formStatistic.AddStatisticInfo("Risk return", risk);
            formStatistic.AddStatisticInfo("Winning Percentage", String.Format("{0:P2}", statistics.dWinningPercentagePerTrade));
            formStatistic.AddStatisticInfo("Max %Win Per Trade", String.Format("{0:P2}", statistics.dMaxWinningPercentage));
            formStatistic.AddStatisticInfo("Max %Lose Per Trade", String.Format("{0:P2}", statistics.dMaxLosingPercentage));
            formStatistic.AddStatisticInfo("Average %Win Per Trade", String.Format("{0:P2}", statistics.dAverageWinningPercentage));
            formStatistic.AddStatisticInfo("Average %Lose Per Trade", String.Format("{0:P2}", statistics.dAverageLosingPercentage));

            formStatistic.Show(this.DockPanel, DockState.DockRightAutoHide);

            //Call estimation handler if any.
            if (showEstimation && estimateFunc != null)
            {
                estimateFunc(this, meta.Code, estOption, tbl);
            }
        }
Example #9
0
        public static void CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc)
        {
            DateTime frDate = common.Consts.constNullDate;
            DateTime toDate = DateTime.Now;

            //Run all strategy analysis for all stocks.
            data.tmpDS.stockCodeDataTable stockCodeTbl = new data.tmpDS.stockCodeDataTable();
            application.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable);

            application.AnalysisData data = new application.AnalysisData();

            TradeAlert[]     tradeAlertList = new TradeAlert[0];
            StringCollection strategyList   = new StringCollection();

            for (int idx = 0; idx < application.Strategy.Data.MetaList.Values.Length; idx++)
            {
                application.Strategy.Meta meta = (application.Strategy.Meta)application.Strategy.Data.MetaList.Values[idx];
                if (meta.Type != AppTypes.StrategyTypes.Strategy)
                {
                    continue;
                }
                strategyList.Add(((application.Strategy.Meta)application.Strategy.Data.MetaList.Values[idx]).Code);
            }

            if (onStartFunc != null)
            {
                onStartFunc(stockCodeTbl.Count);
            }

            //Alert on last month data
            data.DataTimeRange = Settings.sysAlertTimeRange;;
            DateTime alertDate;
            DateTime alertFrDate = toDate.Date;
            DateTime alertToDate = toDate;

            for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++)
            {
                if (onProcessItemFunc != null)
                {
                    if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code))
                    {
                        break;
                    }
                }

                foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales) //??
                {
                    data.DataStockCode = stockCodeTbl[stockCodeIdx].code;
                    data.DataTimeScale = timeScale;
                    data.LoadData();
                    for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++)
                    {
                        application.Strategy.Data.ClearCache();
                        application.Strategy.Data.TradePoints advices = application.Strategy.Libs.Analysis(data, strategyList[strategyIdx].Trim());
                        if (advices == null)
                        {
                            continue;
                        }
                        for (int idx3 = 0; idx3 < advices.Count; idx3++)
                        {
                            TradePointInfo tradeInfo = (TradePointInfo)advices[idx3];
                            alertDate = DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]);
                            //Ignore alerts that out of date range.
                            if (alertDate < alertFrDate || alertDate > alertToDate)
                            {
                                continue;
                            }
                            Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1);

                            tradeAlertList[tradeAlertList.Length - 1] = new TradeAlert(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(),
                                                                                       timeScale, alertDate,
                                                                                       data.Close[tradeInfo.DataIdx],
                                                                                       data.Volume[tradeInfo.DataIdx], tradeInfo);
                        }
                    }
                }
            }
            stockCodeTbl.Dispose();

            //Create alerts in the day
            CreateTradeAlert(tradeAlertList);

            //Save last lun date
            SaveLastRunTime(toDate);
            if (onEndFunc != null)
            {
                onEndFunc();
            }
        }
Example #10
0
        public static void CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc)
        {
            CultureInfo cultureInfo = new CultureInfo(Settings.sysCultureCode);
            DateTime    frDate      = common.Consts.constNullDate;
            DateTime    toDate      = DateTime.Now;

            //Run all strategy analysis for all stocks.
            data.tmpDS.stockCodeDataTable stockCodeTbl = new data.tmpDS.stockCodeDataTable();
            global::data.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable);

            application.Data data = new application.Data();

            TradeAlert[]     tradeAlertList = new TradeAlert[0];
            StringCollection strategyList   = new StringCollection();

            for (int idx = 0; idx < Strategy.Data.MetaList.Values.Length; idx++)
            {
                Strategy.Meta meta = (Strategy.Meta)Strategy.Data.MetaList.Values[idx];
                if (meta.Type != AppTypes.StrategyTypes.Strategy)
                {
                    continue;
                }
                strategyList.Add(((Strategy.Meta)Strategy.Data.MetaList.Values[idx]).Code);
            }

            if (onStartFunc != null)
            {
                onStartFunc(stockCodeTbl.Count);
            }

            for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++)
            {
                if (onProcessItemFunc != null)
                {
                    if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code))
                    {
                        break;
                    }
                }

                foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales)
                {
                    //Move date ahead to ensure that there are sufficient data need in analysis process
                    switch (timeScale.Type)
                    {
                    case AppTypes.TimeScaleTypes.RealTime:
                        frDate = toDate.AddHours(-1);
                        break;

                    case AppTypes.TimeScaleTypes.Hour:
                        frDate = toDate.Date;
                        break;

                    case AppTypes.TimeScaleTypes.Day:
                        frDate = toDate.Date;
                        break;

                    case AppTypes.TimeScaleTypes.Week:
                        frDate = common.dateTimeLibs.StartOfWeek(toDate, cultureInfo).AddSeconds(-1);
                        break;

                    case AppTypes.TimeScaleTypes.Month:
                        frDate = common.dateTimeLibs.MakeDate(1, toDate.Month, toDate.Year).AddSeconds(-1);
                        break;

                    case AppTypes.TimeScaleTypes.Year:
                        frDate = common.dateTimeLibs.MakeDate(1, 1, toDate.Year).AddSeconds(-1);
                        break;

                    default:
                        common.system.ThrowException("Invalid parametter in calling to LoadStockPrice()");
                        break;
                    }

                    data.Reload(stockCodeTbl[stockCodeIdx].code, timeScale, frDate, toDate);

                    for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++)
                    {
                        Strategy.Data.ClearCache();
                        Strategy.Data.TradePoints advices = Strategy.Libs.Analysis(data, strategyList[strategyIdx].Trim());
                        if (advices == null)
                        {
                            continue;
                        }
                        for (int idx3 = 0; idx3 < advices.Count; idx3++)
                        {
                            TradePointInfo tradeInfo = (TradePointInfo)advices[idx3];
                            Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1);
                            tradeAlertList[tradeAlertList.Length - 1] =
                                new TradeAlert(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(),
                                               timeScale, DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]),
                                               data.Close[tradeInfo.DataIdx],
                                               data.Volume[tradeInfo.DataIdx],
                                               tradeInfo);
                        }
                    }
                }
            }
            stockCodeTbl.Dispose();

            //Create alerts in the day
            CreateTradeAlert(tradeAlertList, toDate.Date, toDate);

            //Save last lun date
            SaveLastRunTime(toDate);
            if (onEndFunc != null)
            {
                onEndFunc();
            }
        }