示例#1
0
        /// <summary>
        /// Process CSVModels
        /// </summary>
        /// <param name="records"></param>
        /// <returns>List of Percent Models</returns>
        internal List <PercentModel> ProcessCSVModels(List <CSVModel> records)
        {
            var listOfPercents     = new List <PercentModel>();
            var specificDateFormat = CommonFunctions.GetApplicationSettingValue(Constants.DateFormat);
            var dateFormat         = !string.IsNullOrEmpty(specificDateFormat) ? specificDateFormat : "dd.MM.yyyy";
            var culture            = CultureInfo.InvariantCulture;
            var dateStyle          = DateTimeStyles.None;
            var doubleStyle        = NumberStyles.Any;

            foreach (var record in records)
            {
                var isValidRecord = true;
                var item          = new PercentModel
                {
                    Id = record.Id
                };
                var isDateParsed = DateTime.TryParseExact(record.BeginDate, dateFormat, culture, dateStyle, out var beginDate);

                if (isDateParsed)
                {
                    item.BeginDate = beginDate;
                }
                else
                {
                    isValidRecord = false;
                    Errors.Add($"Incorrect date {record.BeginDate} on row {record.Id}");
                }

                var isValueParsed = double.TryParse(record.IRR_ACB, doubleStyle, culture, out var irrResult);
                if (isValueParsed)
                {
                    item.IRR_ACB = irrResult;
                }
                else
                {
                    isValidRecord = false;
                    Errors.Add($"Incorrect value {record.IRR_ACB} on row {record.Id}");
                }

                if (isValidRecord)
                {
                    listOfPercents.Add(item);
                }
            }
            listOfPercents.Sort();

            ValidateForDuplicationOfDate(listOfPercents);

            CalculatePercents(listOfPercents);

            return(listOfPercents);
        }
        public ActionResult GetPercentages(int sprintId)
        {
            List <PercentModel> Joy     = new List <PercentModel>();
            List <PercentModel> Passion = new List <PercentModel>();
            List <PercentModel> Gb      = new List <PercentModel>();

            var sprint = db.Sprints.Find(sprintId);

            if (sprint != null)
            {
                var joy = sprint.SprintActivities.Where(a => a.Activity.Category.Name == "Joy");
                foreach (var j in joy)
                {
                    PercentModel obj = new PercentModel()
                    {
                        actId      = j.Id,
                        percentage = j.Progresses.Count
                    };
                    Joy.Add(obj);
                }
                var passion = sprint.SprintActivities.Where(a => a.Activity.Category.Name == "Passion");
                foreach (var p in passion)
                {
                    PercentModel obj = new PercentModel()
                    {
                        actId      = p.Id,
                        percentage = p.Progresses.Count
                    };
                    Passion.Add(obj);
                }
                var gb = sprint.SprintActivities.Where(a => a.Activity.Category.Name == "Giving Back");
                foreach (var g in gb)
                {
                    PercentModel obj = new PercentModel()
                    {
                        actId      = g.Id,
                        percentage = g.Progresses.Count
                    };
                    Gb.Add(obj);
                }
            }
            var Percentages =
                new
            {
                Joy     = Json(Joy),
                Passion = Json(Passion),
                Gb      = Json(Gb)
            };

            return(Json(new { Percentages = Percentages }, JsonRequestBehavior.AllowGet));
        }
示例#3
0
        private void btnset_Click(object sender, EventArgs e)
        {
            var percent = new PercentModel();

            percent.Start   = startdatapicke.Value;
            percent.End     = enddatatpicke.Value;
            percent.Percent = decimal.Parse(txtProfitPercent.Text) / 100;
            double days = (enddatatpicke.Value - startdatapicke.Value).TotalDays;

            percent.CurrentProfit  = decimal.Parse(txtDepositAmount.Text) * percent.Percent;
            percent.EverydayProfit = percent.CurrentProfit / (decimal)days;
            percents.Add(percent);
            int index = dataGridViewdata.Rows.Add();

            dataGridViewdata.Rows[index].Cells["colstart"].Value         = startdatapicke.Value.ToString();
            dataGridViewdata.Rows[index].Cells["colend"].Value           = enddatatpicke.Value.ToString();
            dataGridViewdata.Rows[index].Cells["colprofit"].Value        = txtProfitPercent.Text;
            dataGridViewdata.Rows[index].Cells["coleveryday"].Value      = percent.EverydayProfit.ToString();
            dataGridViewdata.Rows[index].Cells["colcurrentprofit"].Value = percent.CurrentProfit.ToString();
        }
示例#4
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            maxVolume = int.Parse(txtMaxVolume.Text);
            minVolume = int.Parse(txtMinVolume.Text);


            //计算每天盈利多少钱
            //TimeSpan timespan = dateTimePickerEnd.Value - dateTimePickerDeposit.Value;
            //decimal everydayProfit = decimal.Parse(txtProfit.Text) / (decimal)timespan.TotalDays;
            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    try
                    {
                        var simbly             = client.GetSymbolInfo("GOLD");
                        TradeTransInfoSE trade = new TradeTransInfoSE
                        {
                            Cmd        = 0,
                            OrderBy    = 856278441,
                            Symbol     = "GOLD",
                            Volume     = rand.Next(minVolume, maxVolume),
                            StopLoss   = 0,
                            TakeProfit = 0,
                            Price      = simbly.Ask
                        };
                        MT4OperResult result = client.TradeTranscationOpen(trade);
                        if (result.ErrorCode != -1)
                        {
                            MT4OperResult closeResult = client.TradeTranscationClose(result.ReturnValue, simbly.Bid);
                        }
                        Thread.Sleep(100);
                    }
                    catch (Exception)
                    {
                    }
                }
            });
            //var source = new CancellationTokenSource();
            //var token = source.Token;
            Task.Factory.StartNew(() =>
            {
                foreach (var item in symbols)
                {
                    Task.Factory.StartNew(() =>
                    {
                        //token.ThrowIfCancellationRequested();
                        string file   = Path.GetFileName(item);
                        string symbol = file.Substring(0, file.IndexOf("_"));
                        //symbol = symbol == "GOLD" ? "XAUUSD" : symbol;
                        List <Models.PriceModel> list = PriceModel.GetPrices(File.ReadAllLines(item)).OrderBy(p => p.Time).ToList();
                        DateTime openTime             = DateTime.Now;
                        DateTime closeTime            = DateTime.Now;
                        //bool isfirst = true;
                        foreach (PriceModel price in list)
                        {
                            if (price.Time <= dateTimePickerDeposit.Value)
                            {
                                continue;
                            }

                            openTime = price.Time.AddSeconds(rand.Next(1000, 1800));
                            //while (openTime < price.Time.AddHours(24))
                            _log.Debug(symbol + ":" + price.Time.ToString() + "开始插单");
                            DateTime currentTime = price.Time;
                            bool isbreak         = false;//是否进入下一天的开单操作
                            while (!isbreak)
                            {
                                try
                                {
                                    int isprofit        = 0;
                                    PercentModel pmodel = percents.Where(p => p.Start.AddDays((double)-1) <= price.Time && p.End >= price.Time).FirstOrDefault();
                                    if (pmodel == null)
                                    {
                                        _log.Error("PercentModel 对象查询为空....");
                                        break;
                                    }
                                    else
                                    {
                                        if (pmodel.Percent > 0)
                                        {
                                            isprofit = rand.Next(0, 3);//盈利几率大
                                        }
                                        else
                                        {
                                            isprofit = rand.Next(1, 4);//亏损几率大
                                        }
                                    }
                                    try
                                    {
                                        TradeRecordSE[] res = client.GetTradesRecordHistory(int.Parse(txtMT4Account.Text), currentTime, currentTime.AddHours(24));
                                        if (res.Length >= 0)
                                        {
                                            double sum = res.Where(r => r.Cmd != 6).Sum(t => t.Profit);
                                            if (pmodel.Percent > 0)
                                            {
                                                if ((decimal)sum > pmodel.EverydayProfit)
                                                {
                                                    isbreak = true;
                                                }
                                            }
                                            else
                                            {
                                                if (pmodel.EverydayProfit < 0 && (decimal)sum < pmodel.EverydayProfit)
                                                {
                                                    isbreak = true;
                                                }
                                            }
                                            WriteLog(currentTime.ToString() + ": sum:" + sum.ToString("f2"));
                                            //Thread.Sleep(5000);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        _log.Error(ex);
                                    }
                                    if (isbreak)//进入下一天的开仓
                                    {
                                        isbreak = false;
                                        break;
                                    }
                                    if (openTime > price.Time.AddHours(24))
                                    {
                                        openTime = price.Time;
                                    }
                                    openTime  = openTime.AddSeconds(rand.Next(1000, 1800));
                                    closeTime = openTime.AddSeconds(rand.Next(1000, 1800));

                                    //开仓价;平仓价;开仓时间;平仓时间
                                    //买卖方向;是否盈利
                                    //获取止损和获利
                                    int cmd = rand.Next(0, 2);

                                    int issetsltp     = rand.Next(0, 2);
                                    decimal openPrice = GetPrice(price.Low, price.High), closePrice = 0;
                                    int login         = int.Parse(txtMT4Account.Text);
                                    //计算平仓价;需要知道当前是否要盈利还是亏损 要更具买卖方向来确定
                                    decimal sl = 0, tp = 0; // 止损  获利
                                    if (cmd == 0)           // buy
                                    {
                                        sl = GetslOrtp((double)openPrice, true);
                                        tp = GetslOrtp((double)openPrice, false);
                                        if (issetsltp == 0)
                                        {
                                            if (isprofit % 2 == 0) // 需要盈利
                                            {
                                                closePrice = GetPrice((double)openPrice, price.High);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                            else
                                            {
                                                closePrice = GetPrice(price.Low, (double)openPrice);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if (isprofit % 2 == 0) // 需要盈利
                                            {
                                                closePrice = GetPrice((double)openPrice, price.High);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                            else
                                            {
                                                closePrice = GetPrice(price.Low, (double)openPrice);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                        }
                                    }
                                    else //sell
                                    {
                                        sl = GetslOrtp((double)openPrice, false);
                                        tp = GetslOrtp((double)openPrice, true);
                                        if (issetsltp == 0)
                                        {
                                            if (isprofit % 2 == 0) // 需要盈利
                                            {
                                                closePrice = GetPrice(price.Low, (double)openPrice);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                            else
                                            {
                                                closePrice = GetPrice((double)openPrice, price.High);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if (isprofit % 2 == 0) // 需要盈利
                                            {
                                                closePrice = GetPrice(price.Low, (double)openPrice);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                            else
                                            {
                                                closePrice = GetPrice((double)openPrice, price.High);
                                                if (openPrice == closePrice)
                                                {
                                                    closePrice = openPrice + (openPrice * (decimal)0.01);
                                                    _log.Info("重新生成平仓价(1):" + closePrice);
                                                }
                                            }
                                        }
                                    }

                                    //_log.InfoFormat(""openPrice + ":" + closePrice + ":" + openTime.ToString() + ":" + closeTime.ToString());
                                    _log.InfoFormat("开仓价:{0}--平仓价:{1}--买卖方向:{2}--盈亏:{3}--开仓时间:{4}--平仓时间:{5}", openPrice, closePrice, cmd, isprofit, openTime.ToString(), closeTime.ToString());
                                    int volume             = rand.Next(minVolume, maxVolume);
                                    TradeTransInfoSE trade = new TradeTransInfoSE
                                    {
                                        Cmd        = cmd,
                                        OrderBy    = login,
                                        Symbol     = symbol,
                                        Volume     = volume,
                                        StopLoss   = 0,
                                        TakeProfit = 0,
                                        Price      = (double)openPrice
                                    };

                                    //开仓
                                    MT4OperResult result = client.TradeTranscationOpen(trade);
                                    if (result.ErrorCode != -1)
                                    {
                                        while (true)
                                        {
                                            //平仓
                                            MT4OperResult closeResult = client.TradeTranscationClose(result.ReturnValue, (double)closePrice);
                                            if (closeResult.ErrorCode != -1)
                                            {
                                                MT4OperResult modifyResult = null;
                                                if (issetsltp == 0 && tp > 0 && sl > 0)
                                                {
                                                    MT4.TradeRecoredModifyModel model = new TradeRecoredModifyModel();
                                                    model.OrderTicket = result.ReturnValue;
                                                    model.OpenTime    = openTime;
                                                    model.CloseTime   = closeTime;
                                                    model.Sl          = (double)sl;
                                                    model.TP          = (double)tp;
                                                    if (cmd == 0)              //buy
                                                    {
                                                        if (isprofit % 2 == 0) //盈利
                                                        {
                                                            model.ClosePrice = (double)(closePrice > tp ? tp : closePrice);
                                                        }
                                                        else
                                                        {
                                                            model.ClosePrice = (double)(closePrice < sl ? sl : closePrice);
                                                        }
                                                    }
                                                    else //sell
                                                    {
                                                        if (isprofit % 2 == 0) //盈利
                                                        {
                                                            model.ClosePrice = (double)(closePrice < tp ? tp : closePrice);
                                                        }
                                                        else
                                                        {
                                                            model.ClosePrice = (double)(closePrice > sl ? sl : closePrice);
                                                        }
                                                    }
                                                    modifyResult = client.AdmTradeRecordModify(model);
                                                    if (modifyResult.ErrorCode == -1)
                                                    {
                                                        modifyResult = client.AdmTradeRecordModifyTime(result.ReturnValue, openTime, closeTime);
                                                    }
                                                }
                                                else
                                                {
                                                    //修改
                                                    modifyResult = client.AdmTradeRecordModifyTime(result.ReturnValue, openTime, closeTime);
                                                }
                                                if (modifyResult.ErrorCode == -1)
                                                {
                                                    _log.Error(string.Format("修改失败:login:{0} message:{1}:{2}", txtMT4Account.Text, modifyResult.ErrorDescription, result.ReturnValue));
                                                }

                                                break;//跳出平仓循环
                                            }
                                            else
                                            {
                                                _log.Error(string.Format("平仓失败:login:{0} message:{1}:{2}", txtMT4Account.Text, closeResult.ErrorDescription, result.ReturnValue));
                                            }
                                        }
                                        //整个交易完成
                                        _log.Fatal(string.Format("{0}:方向:{1} lots:{2} volume:{3}", txtMT4Account.Text, cmd == 1 ? "sell" : "buy", 0, trade.Volume));
                                    }
                                    else
                                    {
                                        _log.Error(string.Format("开仓失败:login:{0} message:{1}:{2}", txtMT4Account.Text, result.ErrorDescription, trade.Volume + ":" + openPrice + ":" + sl + ":" + tp + ":" + trade.Cmd));
                                        //_log.Error(string.Format("开仓失败:login:{0} message:{1}:{2}", txtMT4Account.Text, result.ErrorDescription, trade.Volume));
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.Error(ex);
                                }
                            }
                        }
                    });
                }
            });
        }