/// <summary> /// ่ฎพ็ฝฎๅธฎๅฉไฟกๆฏ(่ฟ้ๅฝๆฐ้่ฆๅจPresenterๅๅงๅๅฎๆไนๅ่ฐ็จ) /// </summary> /// <param name="modelInfo"></param> public void SetHelperInfo(HelperModel modelInfo) { if (modelInfo != null) { Model = modelInfo; // ้ๆฐๆๅๆฐๆฎ ViewLogic.LayoutView(modelInfo); // ๅทๆฐ็้ข } }
public void SetTip(HZHDialogModel modelInfo) { if (modelInfo != null) { Model = modelInfo; // ้ๆฐๆๅๆฐๆฎ ViewLogic.ShowTip(modelInfo); // ๅทๆฐ็้ข } }
public ActionResult Search(int id, string search) { ViewLogic log = new ViewLogic(); var data = log.SearchView(id, search); ViewBag.Id = id; ViewBag.Search = search; return(View(data.Tables[0])); }
public void SwitchCaseTest_InDiv_X45_Y0_OutMean0() { string arg = "/"; double x = 45; double y = 0; double mean; Assert.IsFalse(ViewLogic.SwitchCase(arg, x, y, out mean)); }
public void SwitchCaseTest_InPlus_XMinValu_YMinValu_OutMean0() { string arg = "+"; double x = double.MinValue; double y = double.MinValue; double mean; Assert.IsFalse(ViewLogic.SwitchCase(arg, x, y, out mean)); }
public void SwitchCaseTest_InMulti_X343_Y30_OutMeanResul() { string arg = "*"; double x = -343; double y = -30; double mean; Assert.IsTrue(ViewLogic.SwitchCase(arg, x, y, out mean)); Assert.AreNotEqual(0, mean); }
public void SwitchCaseTest_InDiv_X0_Y56_OutMean0() { string arg = "/"; double x = 0; double y = 56; double mean; Assert.IsTrue(ViewLogic.SwitchCase(arg, x, y, out mean)); Assert.AreEqual(0, mean); }
public CommonResponse AutoFilter() { if (WebOperationContext.Current.IncomingRequest.Headers == null) { throw new Exception("Can not get current WebOpreationContext."); } var viewLogic = new ViewLogic(); var result = new CommonResponse(); viewLogic.AutoFilter(); return(result); }
public CommonResponse ViewExecute(ViewExecuteReq req) { if (WebOperationContext.Current.IncomingRequest.Headers == null) { throw new Exception("Can not get current WebOpreationContext."); } var result = new CommonResponse(); var jsonObj = new JsonObject(new KeyValuePair <string, JsonValue>("name", req.name), new KeyValuePair <string, JsonValue>("member_id", req.member_id)); var viewLogic = new ViewLogic(); result.code = "200"; result.message = viewLogic.Execute(jsonObj); return(result); }
public CommonResponse AutoAnalysis(string period, string state, string name) { if (WebOperationContext.Current.IncomingRequest.Headers == null) { throw new Exception("Can not get current WebOpreationContext."); } var viewLogic = new ViewLogic(); var result = new CommonResponse(); try { result.code = "200"; var stock_list = name == null ? new List <string>() : name.Split(',').ToList(); result.message = viewLogic.AutoAnalysis(period == null ? string.Empty : period.ToLower(), "avg", stock_list); } catch (Exception ex) { result.code = "400"; Console.WriteLine(ex.ToString()); } return(result); }
public void Receive(Dictionary <string, string> paylaod) { var text = paylaod["text"]; var user_id = paylaod["user_id"]; var user_name = paylaod["user_name"]; var words = text.Split(' ').ToList <string>(); var date_param = DateTime.Now; var parameters = new List <string>(); var keyword = new List <string>(); foreach (var word in words) { if (word.Contains("๋น ์ค์ธ ")) { continue; } if (word.Contains("๋ถ์")) { keyword.Add("๋ถ์"); } else if (word.Contains("์ถ์ฒ")) { keyword.Add("์ถ์ฒ"); } else if (word.Contains("๋ฑ๋ก")) { keyword.Add("๋ฑ๋ก"); } else if (word.Contains("๊ฐ์")) { keyword.Add("๊ฐ์"); } else { try { var test = DateTime.Parse(word); date_param = test; } catch { parameters.Add(word); } } } var respond_cnt = 0; foreach (var key in keyword) { var message = new JsonObject(); if (key == "์ถ์ฒ") { var recommaned_report = new StringBuilder(); var query = string.Empty; if (parameters.Contains("ํ๋ฝ")) { message.Add("text", "*" + date_param.ToString("yyyy-MM-dd") + " ๋น ์ค์ธ ์๊ทธ๋ ์ถ์ฒ ์ข ๋ชฉ*"); query = "SELECT CONCAT(current.์ต๊ทผ๊ฐฏ์, ' ๋จ๊ณ ํ๋ฝ ์ข ๋ชฉ') as `title`, GROUP_CONCAT(current.์ข ๋ชฉ๋ช ) as `text`" + " FROM (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + (date_param.DayOfWeek == DayOfWeek.Monday ? date_param.AddDays(-3).ToString("yyyy-MM-dd") : date_param.AddDays(-1).ToString("yyyy-MM-dd")) + "' AND unixtime <= '" + date_param.ToString("yyyy-MM-dd") + "' ) as result1 WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = 'ํ๋ฝ')" + " AND ํ์ฌ์ํ = 'ํ๋ฝ' AND ์ข ๊ฐ >= `20ํ๊ท ๊ฐ`) as prev," + " (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + date_param.ToString("yyyy-MM-dd") + "' AND unixtime <= '" + date_param.AddDays(1).ToString("yyyy-MM-dd") + "' ) as result2" + " WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = '์์น')" + " AND ํ์ฌ์ํ = 'ํ๋ฝ' AND ์ข ๊ฐ >= `20ํ๊ท ๊ฐ`) as current" + " WHERE prev.category = current.category GROUP BY current.์ต๊ทผ๊ฐฏ์"; } else if (parameters.Contains("์์น")) { message.Add("text", "*" + date_param.ToString("yyyy-MM-dd") + " ๋น ์ค์ธ ์๊ทธ๋ ์ถ์ฒ ์ข ๋ชฉ*"); query = "SELECT CONCAT(current.์ต๊ทผ๊ฐฏ์, ' ๋จ๊ณ ์์น ์ข ๋ชฉ') as `title`, GROUP_CONCAT(current.์ข ๋ชฉ๋ช ) as `text`" + " FROM (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + (date_param.DayOfWeek == DayOfWeek.Monday ? date_param.AddDays(-3).ToString("yyyy-MM-dd") : date_param.AddDays(-1).ToString("yyyy-MM-dd")) + "' AND unixtime <= '" + date_param.ToString("yyyy-MM-dd") + "' ) as result1 WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = 'ํ๋ฝ')" + " AND ํ์ฌ์ํ = '์์น' AND ์ข ๊ฐ >= `20ํ๊ท ๊ฐ`) as prev," + " (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + date_param.ToString("yyyy-MM-dd") + "' AND unixtime <= '" + date_param.AddDays(1).ToString("yyyy-MM-dd") + "' ) as result2" + " WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = '์์น')" + " AND ํ์ฌ์ํ = '์์น' AND ์ข ๊ฐ >= `20ํ๊ท ๊ฐ`) as current" + " WHERE prev.category = current.category GROUP BY current.์ต๊ทผ๊ฐฏ์"; } else if (parameters.Contains("์ ํ")) { message.Add("text", "*" + date_param.ToString("yyyy-MM-dd") + " ๋น ์ค์ธ ์๊ทธ๋ ์ถ์ฒ ์ข ๋ชฉ*"); query = "SELECT CONCAT(current.์ต๊ทผ๊ฐฏ์, ' ๋จ๊ณ ์ ํ ์ข ๋ชฉ') as `title`, GROUP_CONCAT(current.์ข ๋ชฉ๋ช ) as `text`" + " FROM (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + (date_param.DayOfWeek == DayOfWeek.Monday ? date_param.AddDays(-3).ToString("yyyy-MM-dd") : date_param.AddDays(-1).ToString("yyyy-MM-dd")) + "' AND unixtime <= '" + date_param.ToString("yyyy-MM-dd") + "' ) as result1 WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = 'ํ๋ฝ')" + " AND ํ์ฌ์ํ = 'ํ๋ฝ' AND ์ข ๊ฐ >= `20ํ๊ท ๊ฐ`) as prev," + " (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + date_param.ToString("yyyy-MM-dd") + "' AND unixtime <= '" + date_param.AddDays(1).ToString("yyyy-MM-dd") + "' ) as result2" + " WHERE (์ ์ฒด์ํ = '์์น')" + " AND ํ์ฌ์ํ = '์์น' AND ์ข ๊ฐ >= `20ํ๊ท ๊ฐ`) as current" + " WHERE prev.category = current.category GROUP BY current.์ต๊ทผ๊ฐฏ์"; } else { message.Add("text", "*" + date_param.ToString("yyyy-MM-dd") + " ์ ๊ท ์ถ์ฒ ์ข ๋ชฉ*"); query = "SELECT CONCAT(current.์ต๊ทผ๊ฐฏ์, ' ๋จ๊ณ ์์น ์ข ๋ชฉ') as `title`, GROUP_CONCAT(current.์ข ๋ชฉ๋ช ) as `text`" + " FROM (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + (date_param.DayOfWeek == DayOfWeek.Monday ? date_param.AddDays(-3).ToString("yyyy-MM-dd") : date_param.AddDays(-1).ToString("yyyy-MM-dd")) + "' AND unixtime <= '" + date_param.ToString("yyyy-MM-dd") + "' ) as result1 WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = 'ํ๋ฝ')" + " AND ํ์ฌ์ํ = '์์น' AND ์ต๊ทผ๊ฐฏ์ > 1 AND ๊ณผ๊ฑฐ๊ฐฏ์ > 1 AND ์ข ๊ฐ > `20ํ๊ท ๊ฐ`) as prev," + " (" + " SELECT *" + " FROM (SELECT category, column_get(rawdata, '์ข ๋ชฉ๋ช ' as char) as `์ข ๋ชฉ๋ช `," + " column_get(rawdata, '์ข ๊ฐ' as double) as `์ข ๊ฐ`," + " column_get(rawdata, '20ํ๊ท ๊ฐ' as double) as `20ํ๊ท ๊ฐ`," + " column_get(rawdata, '60ํ๊ท ๊ฐ' as double) as `60ํ๊ท ๊ฐ`," + " column_get(rawdata, '์ ์ฒด์ํ' as char) as `์ ์ฒด์ํ`," + " column_get(rawdata, 'ํ์ฌ์ํ' as char) as `ํ์ฌ์ํ`," + " column_get(rawdata, 'Vํจํด_๋น์จ' as double) as `Vํจํด`," + " column_get(rawdata, 'Aํจํด_๋น์จ' as double) as `Aํจํด`," + " column_get(rawdata, '๊ฐ๋' as double) as `๊ฐ๋`," + " column_get(rawdata, '์ต๊ทผ๊ฐฏ์' as double) as `์ต๊ทผ๊ฐฏ์`," + " column_get(rawdata, '๊ณผ๊ฑฐ๊ฐฏ์' as double) as `๊ณผ๊ฑฐ๊ฐฏ์`" + " FROM past_stock WHERE unixtime >= '" + date_param.ToString("yyyy-MM-dd") + "' AND unixtime <= '" + date_param.AddDays(1).ToString("yyyy-MM-dd") + "' ) as result2" + " WHERE (์ ์ฒด์ํ = 'ํก๋ณด' OR ์ ์ฒด์ํ = 'ํ๋ฝ')" + " AND ํ์ฌ์ํ = '์์น' AND ์ต๊ทผ๊ฐฏ์ > 1 AND ๊ณผ๊ฑฐ๊ฐฏ์ > 1 AND ์ข ๊ฐ > `20ํ๊ท ๊ฐ`) as current" + " WHERE prev.category = current.category GROUP BY current.์ต๊ทผ๊ฐฏ์"; } var down_recommaned = MariaDBConnector.Instance.GetJsonArray("DynamicQueryExecuter", query); message.Add("attachments", down_recommaned); this.SendMessage(message.ToString()); respond_cnt++; } else if (key == "๋ถ์" || key == "๋ฑ๋ก") { foreach (var param in parameters) { message = new JsonObject(); if (key == "๋ถ์") { var search_result = stock_list.FirstOrDefault(p => p.Value["name"].ReadAs <string>().Contains(param) || p.Value["code"].ReadAs <string>().Contains(param)); if (search_result.Key != null) { var period = "day"; if (parameters.Find(p => p.Contains("์ฃผ๊ฐ")) != null) { period = "week"; } var view_instance = new ViewLogic(); var resultArr = JsonObject.Parse(view_instance.AutoAnalysis(period, "avg", new List <string>() { search_result.Value["code"].ReadAs <string>() }, null, date_param.AddDays(1).ToString("yyyy-MM-dd"), false)); if (resultArr.Count > 0) { var result = resultArr[0]; #region ์ฃผ๊ฐ ๋ถ์ ๋ ํฌํธ var price = result["์ข ๊ฐ"].ReadAs <double>(); var highest = result["์ต๊ณ ๊ฐ"].ReadAs <double>(); var lowest = result["์ต์ ๊ฐ"].ReadAs <double>(); var life_price = result["์๋ช ์ "].ReadAs <double>(); var price_location = Math.Round(result["์ฃผ๊ฐ์์น"].ReadAs <double>(), 2); var price_analysis_report = new StringBuilder(); price_analysis_report.AppendFormat("```ํ์ฌ ๊ฐ๊ฒฉ์ {0}์์ด๋ฉฐ, ์๋ช ๊ฐ๊ฒฉ์ธ {1}์ {2}์ ์์นํด ์์ต๋๋ค.\n", price.ToString(), life_price.ToString(), life_price <= price ? "์" : "์๋"); price_analysis_report.AppendFormat("์ต์ ๊ฐ {0}์, ์ต๊ณ ๊ฐ๋ {1}์์ผ๋ก {2}%๋ก {3} ์์น์ ๋๋ฌํด ์์ต๋๋ค.```", lowest.ToString(), highest.ToString(), price_location.ToString(), price_location < 30 ? "๋ฎ์" : (price_location < 70 ? "์ค๊ฐ" : "๋์")); #endregion #region ๊ฑฐ๋๋ ๋ถ์ ๋ ํฌํธ var amount = result["์์ฅ์ฃผ์์"].ReadAs <double>(); var volume = result["๊ฑฐ๋๋"].ReadAs <double>(); var volume_oscillator = Math.Round(result["VOLUME_OSCILLATOR"].ReadAs <double>(), 2); var volume_analysis_report = new StringBuilder(); volume_analysis_report.AppendFormat("```{0}์ฒ์ฃผ ๋๋น ํ์ฌ ๊ฑฐ๋๋๋ ์ฃผ์์๋ {1}์ฒ์ฃผ๋ก {2}%์ ๊ฑฐ๋๊ฐ ์ด๋ฃจ์ด์ง๊ณ ์๊ณ ,\n", Math.Round(amount / 1000, 2).ToString(), Math.Round(volume / 1000, 2).ToString(), Math.Round(volume / amount * 100, 2).ToString()); volume_analysis_report.AppendFormat("5์ผ ๊ฑฐ๋๋ ๋๋น 20์ผ ๊ฑฐ๋๋ ๋น๊ตํ์๋, {0}%๋งํผ {1}ํ์์ต๋๋ค.```", volume_oscillator.ToString(), volume_oscillator > 0 ? "์ฆ๊ฐ" : "๊ฐ์"); #endregion #region ์ถ์ธ ๋ถ์ ๋ ํฌํธ var rsi = result["RSI"].ReadAs <double>(); var rsi_state = Math.Round(rsi) <= 30 ? "๊ณผ๋งค๋" : (Math.Round(rsi) >= 70 ? "๊ณผ๋งค์" : "์ ํญ/์ง์ง"); var total_state = result["์ ์ฒด์ํ"].ReadAs <string>(); var current_state = result["ํ์ฌ์ํ"].ReadAs <string>(); var current_count = result["ํ์ฌ์ํ_์ ์งํ์"].ReadAs <int>(); var past_count = result["๊ณผ๊ฑฐ์ํ_์ ์งํ์"].ReadAs <int>(); var trend_analysis_report = new StringBuilder(); trend_analysis_report.AppendFormat("```ํ์ฌ {0} ์ค์ด๋ฉฐ, ์ ์ฒด์ ์ผ๋ก๋ {1}์ ์ ์งํ๊ณ ์์ต๋๋ค.\n", current_state, total_state); trend_analysis_report.AppendFormat("{0} ๋จ๊ณ๋งํผ {1}ํ์๊ณ , ๊ณผ๊ฑฐ์๋ {2} ๋จ๊ณ๋งํผ {3}ํ์์ต๋๋ค.\n", current_count.ToString(), current_state, past_count, current_state == "์์น" ? "ํ๋ฝ" : "์์น"); trend_analysis_report.AppendFormat("์ต๊ทผ 14์ผ ๋์ RSI๊ฐ {0}์ธ ๊ฒ์ผ๋ก ๋ณด์, {1} ์ํ๋ก ํ๋จ๋์ด ์ง๋๋ค.```", Math.Round(rsi, 2).ToString(), rsi_state); #endregion #region ์ ํญ๊ณผ ์ง์ง ๋ฐ ์ข ํฉ ๋ถ์ ๋ ํฌํธ var v_pattern = result["Vํจํด_๋น์จ"].ReadAs <double>(); var a_pattern = result["Aํจํด_๋น์จ"].ReadAs <double>(); var va_pretext = new StringBuilder(); va_pretext.AppendFormat("`Vํจํด : {0}%` `Aํจํด : {1}%`", Math.Round(v_pattern, 2), Math.Round(a_pattern, 2)); var total_support = new List <int>(); var total_resistance = new List <int>(); if (result.ContainsKey("๋ฐ์ ์ง์ง")) { foreach (var item in JsonArray.Parse(result["๋ฐ์ ์ง์ง"].ReadAs <string>())) { var test = item.Value.ReadAs <int>(); var length = item.Value.ReadAs <int>().ToString().Length - 3; if (length > 0) { var sampling = int.Parse(Math.Pow(10, length).ToString()); test = test / sampling * sampling; } if (!total_support.Contains(test)) { total_support.Add(test); } } } if (result.ContainsKey("์ค์ ์ง์ง")) { foreach (var item in JsonArray.Parse(result["์ค์ ์ง์ง"].ReadAs <string>())) { var test = item.Value.ReadAs <int>(); var length = item.Value.ReadAs <int>().ToString().Length - 3; if (length > 0) { var sampling = int.Parse(Math.Pow(10, length).ToString()); test = test / sampling * sampling; } if (!total_support.Contains(test)) { total_support.Add(test); } } } if (result.ContainsKey("๋ฐ์ ์ ํญ")) { foreach (var item in JsonArray.Parse(result["๋ฐ์ ์ ํญ"].ReadAs <string>())) { var test = item.Value.ReadAs <int>(); var length = item.Value.ReadAs <int>().ToString().Length - 3; if (length > 0) { var sampling = int.Parse(Math.Pow(10, length).ToString()); test = test / sampling * sampling; } if (!total_resistance.Contains(test)) { total_resistance.Add(test); } } } if (result.ContainsKey("์ค์ ์ ํญ")) { foreach (var item in JsonArray.Parse(result["์ค์ ์ ํญ"].ReadAs <string>())) { var test = item.Value.ReadAs <int>(); var length = item.Value.ReadAs <int>().ToString().Length - 3; if (length > 0) { var sampling = int.Parse(Math.Pow(10, length).ToString()); test = test / sampling * sampling; } if (!total_resistance.Contains(test)) { total_resistance.Add(test); } } } var support_pretext = new StringBuilder("```์ง์ง ๊ฐ๊ฒฉ :"); foreach (var support in total_support.OrderByDescending(p => p)) { support_pretext.Append(" ").Append(support.ToString()).Append("์"); } var resistance_pretext = new StringBuilder("```์ ํญ ๊ฐ๊ฒฉ :"); foreach (var support in total_resistance.OrderBy(p => p)) { resistance_pretext.Append(" ").Append(support.ToString()).Append("์"); } if (result.ContainsKey("๋ฐ๋ฅ")) { support_pretext.Append("\n๋ฐ๋ฅ ๊ฐ๊ฒฉ :"); foreach (var bottom in result["๋ฐ๋ฅ"].ReadAs <JsonArray>()) { support_pretext.Append(" ").Append(bottom.ToString()); } } if (result.ContainsKey("์ฒ์ฅ")) { resistance_pretext.Append("\n์ฒ์ฅ ๊ฐ๊ฒฉ :"); foreach (var up in result["์ฒ์ฅ"].ReadAs <JsonArray>()) { resistance_pretext.Append(" ").Append(up.ToString()); } } support_pretext.Append("``` "); resistance_pretext.Append("``` "); var action_state = "๋งค์"; var total_analysis_report = new StringBuilder(); if (total_state == "์์น") { if (current_state == "์์น") { total_analysis_report.Append("๊ฐํ ์์น ์ค์ ๋๋ค."); action_state = "๋งค๋"; } else { total_analysis_report.Append("๊ณ ์ ํ์ธ ํ ์กฐ์ ๊ตฌ๊ฐ์ ๋๋ค."); action_state = "๋งค์"; } } else if (total_state == "ํ๋ฝ") { if (current_state == "์์น") { total_analysis_report.Append("์ ์ ํ์ธ ํ ๋ฐ๋ฅ ํ์ฑ ๊ตฌ๊ฐ์ ๋๋ค."); action_state = "๋งค์"; } else { total_analysis_report.Append("๊ฐํ ํ๋ฝ ์ค์ ๋๋ค."); action_state = "๊ด์ฌ"; } } else if (total_state == "ํก๋ณด") { if (current_state == "์์น") { total_analysis_report.Append("์์น ์ ํ ๊ตฌ๊ฐ์ ๋๋ค."); action_state = "๋งค์"; } else { total_analysis_report.Append("ํ๋ฝ ์ ํ ๊ตฌ๊ฐ์ ๋๋ค."); action_state = "๊ด์ฌ"; } } total_analysis_report.AppendFormat("\n๊ฑฐ๋๋ ๋ถ์({0}%๋งํผ {1})์ ๋ฐ๋ผ ํ์ฌ ์ํ์ ๋ํ ์ ๋ขฐ์ฑ์ด ๊ฒฐ์ ๋๊ณ ,\n" + "RSI({2})์ ๋ฐ๋ผ ๋งค์ํ์ด๋ฐ์ ํฌ์ฐฉํ์๊ธฐ ๋ฐ๋๋๋ค.\n" + "์ถ๊ฐ์ ์ผ๋ก ์ถ์ธ๋ถ์์์ ๋์จ ์์น/ํ๋ฝ์ ๋จ๊ณ์ ๋ฐ๋ผ ์ ํญ/์ง์ง ๊ฐ๊ฒฉ์ ๊ฒฐ์ ํ์๋ฉด ๋ฉ๋๋ค.", volume_oscillator.ToString(), volume_oscillator > 0 ? "์ฆ๊ฐ" : "๊ฐ์", rsi.ToString()); #endregion #region ์บ๋ค ๋ถ์ ๋ ํฌํธ var curr_start = result["curr_start"].ReadAs <double>(); var curr_end = result["curr_end"].ReadAs <double>(); var curr_high = result["curr_high"].ReadAs <double>(); var curr_low = result["curr_low"].ReadAs <double>(); var prev_start = result["prev_start"].ReadAs <double>(); var prev_end = result["prev_end"].ReadAs <double>(); var prev_high = result["prev_high"].ReadAs <double>(); var prev_low = result["prev_low"].ReadAs <double>(); // Single Candle Analysis var curr_candle_direct = curr_start > curr_end ? "์๋ด" : curr_start < curr_end ? "์๋ด" : "๋์ง"; var curr_candle_weight = Math.Abs(curr_start - curr_end); var curr_low_weight = Math.Abs((curr_start > curr_end ? curr_end : curr_start) - curr_low); var curr_high_weight = Math.Abs((curr_start > curr_end ? curr_start : curr_end) - curr_high); // Dual Candle Analysis var prev_candle_direct = prev_start > prev_end ? "์๋ด" : prev_start < prev_end ? "์๋ด" : "๋์ง"; var prev_candle_weight = Math.Abs(prev_start - prev_end); var prev_low_line_weight = Math.Abs((prev_start > prev_end ? prev_end : prev_start) - prev_low); var prev_high_line_weight = Math.Abs((prev_start > prev_end ? prev_start :prev_end) - prev_high); var total_range = prev_end * 0.6; var price_movement = curr_candle_weight + curr_low_weight + curr_high_weight; var candle_movement = Math.Round(price_movement / total_range * 100, 2); var high_per = ((curr_candle_direct == "์๋ด" ? curr_candle_weight : 0) + curr_high_weight) / price_movement * 100; var low_per = ((curr_candle_direct == "์๋ด" ? curr_candle_weight : 0) + curr_low_weight) / price_movement * 100; var candle_analysis_report = new StringBuilder(); candle_analysis_report.AppendFormat("```ํ์ฌ ์ฃผ๊ฐ๋ {0}%({1}์) ์ ๋์ฑ์ ๋ณด์ด๊ณ ์์ต๋๋ค.\n", candle_movement.ToString(), price_movement.ToString()); candle_analysis_report.AppendFormat("ํ์ฌ ์บ๋ค์ {0}({4}์) ํํ์ด๋ฉฐ, (์๊ผฌ๋ฆฌ:{1}% / ์๋๊ผฌ๋ฆฌ:{2}%)์ธ ๊ฒ์ผ๋ก ๋ณด์ {3}๊ฐ ์ฐ์์ ์์ต๋๋ค.\n", curr_candle_direct, Math.Round(high_per, 2), Math.Round(low_per, 2), low_per > high_per ? "๋งค์์ธ" : "๋งค๋์ธ", curr_end - curr_start); var test1 = curr_start - prev_end; var test2 = curr_end - curr_start; var test3 = prev_end - prev_start; if (test1 <= 0 && test2 < 0) { candle_analysis_report.Append(prev_candle_direct + " ํ ํ๋ฝ ์ถ์ธ ์บ๋ค" + (prev_candle_direct == "์๋ด" ? " (200%์ด์ ๋ถ์ )" : " (50%์ดํ ๋ถ์ )") + "\n"); } else if (test1 > 0 && test2 < 0) { candle_analysis_report.Append(prev_candle_direct + " ํ ํ๋ฝ ๋ฐ๊ฒฉ ์บ๋ค" + (prev_candle_direct == "์๋ด" ? " (100%์ด์ ๋ถ์ )" : " (50%์ดํ ๋ถ์ )") + "\n"); } else if (test1 >= 0 && test2 > 0) { candle_analysis_report.Append(prev_candle_direct + " ํ ์์น ์ถ์ธ ์บ๋ค" + (prev_candle_direct == "์๋ด" ? " (50%์ดํ ๊ธ์ )" :" (200%์ด์ ๊ธ์ )") + "\n"); } else if (test1 < 0 && test2 > 0) { candle_analysis_report.Append(prev_candle_direct + " ํ ์์น ๋ฐ๊ฒฉ ์บ๋ค" + (prev_candle_direct == "์๋ด" ? " (50%์ดํ ๊ธ์ )" : " (100%์ด์ ๊ธ์ )") + "\n"); } else { candle_analysis_report.Append(prev_candle_direct + " ํ ๋์ง ์บ๋ค\n"); } candle_analysis_report.AppendFormat("๊ฐ๋ : {1}์ ๋๋น {0}%", (test1 + test2 + test3) / test3 * 100, prev_candle_weight); candle_analysis_report.Append("```"); #endregion message.Add("text", "*" + date_param.ToString("yyyy-MM-dd") + " " + param + " ๋ถ์๊ฒฐ๊ณผ*"); message.Add("attachments", new JsonArray( new JsonObject( //new KeyValuePair<string, JsonValue>("color", "#00ff00"), //new KeyValuePair<string, JsonValue>("pretext", "pre_text"), new KeyValuePair <string, JsonValue>("title", "์ฃผ๊ฐ ๋ถ์"), new KeyValuePair <string, JsonValue>("text", price_analysis_report.ToString()), //new KeyValuePair<string, JsonValue>("fields", price_fields), new KeyValuePair <string, JsonValue>("mrkdwn_in", new JsonArray("text", "pretext", "fields")) ), new JsonObject( //new KeyValuePair<string, JsonValue>("color", "#ff0000"), //new KeyValuePair<string, JsonValue>("pretext", "pre_text"), new KeyValuePair <string, JsonValue>("title", "๊ฑฐ๋๋ ๋ถ์"), new KeyValuePair <string, JsonValue>("text", volume_analysis_report.ToString()), new KeyValuePair <string, JsonValue>("mrkdwn_in", new JsonArray("text", "pretext", "fields")) ), new JsonObject( //new KeyValuePair<string, JsonValue>("color", "#0000ff"), new KeyValuePair <string, JsonValue>("pretext", va_pretext.ToString()), new KeyValuePair <string, JsonValue>("title", "์ถ์ธ ๋ถ์"), new KeyValuePair <string, JsonValue>("text", trend_analysis_report.ToString()), new KeyValuePair <string, JsonValue>("mrkdwn_in", new JsonArray("text", "pretext", "fields")) ), new JsonObject( //new KeyValuePair<string, JsonValue>("color", "#0000ff"), new KeyValuePair <string, JsonValue>("title", "์บ๋ค ๋ถ์"), new KeyValuePair <string, JsonValue>("text", candle_analysis_report.ToString()), new KeyValuePair <string, JsonValue>("mrkdwn_in", new JsonArray("text", "pretext", "fields")) ), new JsonObject( //new KeyValuePair<string, JsonValue>("color", "#ffffff"), new KeyValuePair <string, JsonValue>("pretext", support_pretext.ToString() + resistance_pretext.ToString()), new KeyValuePair <string, JsonValue>("title", "์ข ํฉ ์๊ฒฌ"), new KeyValuePair <string, JsonValue>("text", "```" + total_analysis_report.ToString() + "```"), new KeyValuePair <string, JsonValue>("mrkdwn_in", new JsonArray("text", "pretext", "fields")) ))); } this.SendMessage(message.ToString()); respond_cnt++; } } else if (key.Contains("๋ฑ๋ก")) { var search_result = stock_list.FirstOrDefault(p => p.Value["name"].ReadAs <string>().Contains(param) || p.Value["code"].ReadAs <string>().Contains(param)); if (search_result.Key != null) { search_result.Value["state"] = true; var resultPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory); System.IO.File.WriteAllText(Path.Combine(resultPath, "stocklist.json"), stock_list.ToString()); message.Add("text", "*" + search_result.Value["name"].ReadAs <string>() + " ๋ฑ๋ก ์๋ฃ*"); this.SendMessage(message.ToString()); respond_cnt++; } } } } } if (respond_cnt == 0) { var message = new JsonObject(); message.Add("text", "์ ๊ฐ ์ดํดํ ์ ์๊ฒ ๋ช ๋ นํด์ฃผ์ธ์."); this.SendMessage(message.ToString()); message["text"] = ">>>1. ๋น ์ค์ธ (์ฃผ์๋ช ) ๋ถ์ํด\n2. ๋น ์ค์ธ (์์น,ํ๋ฝ,์ ํ,์ ๊ท) ์ถ์ฒํด๋ด"; this.SendMessage(message.ToString()); } }
/// <summary> /// ็้ข่ทๅ็ฆ็น /// </summary> public void Activate() { ViewLogic.Activate(); }
/// <summary> /// ๆพ็คบ็้ข /// </summary> public void Show() { ViewLogic.Show(); }
protected override void OnMessage(MessageEventArgs e) { var result = new JsonObject(); var reqInfo = JsonValue.Parse(e.Data); foreach (var item in reqInfo) { result.Add(new KeyValuePair <string, JsonValue>(item.Key, item.Value)); } JsonValue returnString = string.Empty; var target = reqInfo["target"].ReadAs <string>(); var method = reqInfo["method"].ReadAs <string>(); switch (target.ToLower()) { #region Member case "member": { var memberLogic = new MemberLogic(ref this.sendEvent, ref this.sendQueue); switch (method.ToLower()) { case "schema": { returnString = memberLogic.Schema(); break; } case "access": { returnString = memberLogic.Access(reqInfo["parameters"]); break; } case "getlist": { returnString = memberLogic.GetList(); break; } case "create": { returnString = memberLogic.Create(reqInfo["parameters"]); break; } case "modify": { returnString = memberLogic.Modify(reqInfo["parameters"]); break; } case "delete": { returnString = memberLogic.Delete(reqInfo["parameters"]); break; } } break; } #endregion #region Collection case "collection": { var collectionLogic = new CollectionLogic(ref this.sendEvent, ref this.sendQueue); switch (method.ToLower()) { case "schema": { returnString = collectionLogic.Schema(); break; } case "getlist": { returnString = collectionLogic.GetList(); break; } case "create": { returnString = collectionLogic.Create(reqInfo["parameters"]); break; } case "modify": { returnString = collectionLogic.Modify(reqInfo["parameters"]); break; } case "delete": { returnString = collectionLogic.Delete(reqInfo["parameters"]); break; } case "execute": { returnString = collectionLogic.Execute(reqInfo["parameters"]); break; } } break; } #endregion #region Analysis case "analysis": { var analysisLogic = new AnalysisLogic(ref this.sendEvent, ref this.sendQueue); switch (method.ToLower()) { case "schema": { returnString = analysisLogic.Schema(); break; } case "getlist": { returnString = analysisLogic.GetList(); break; } case "create": { returnString = analysisLogic.Create(reqInfo["parameters"]); break; } case "modify": { returnString = analysisLogic.Modify(reqInfo["parameters"]); break; } case "delete": { returnString = analysisLogic.Delete(reqInfo["parameters"]); break; } case "execute": { returnString = analysisLogic.Execute(reqInfo["parameters"]); break; } } break; } #endregion #region DataView case "view": { var viewLogic = new ViewLogic(ref this.sendEvent, ref this.sendQueue); switch (method.ToLower()) { case "schema": { returnString = viewLogic.Schema(reqInfo["parameters"]["privilege"].ReadAs <string>()); break; } case "getlist": { returnString = viewLogic.GetList(reqInfo["parameters"]); break; } case "create": { returnString = viewLogic.Create(reqInfo["parameters"]); break; } case "modify": { returnString = viewLogic.Modify(reqInfo["parameters"]); break; } case "delete": { returnString = viewLogic.Delete(reqInfo["parameters"]); break; } case "execute": { returnString = viewLogic.Execute(reqInfo["parameters"]); break; } case "execute_item": { returnString = viewLogic.ExecuteItem(reqInfo["parameters"]); break; } case "download": { returnString = viewLogic.Download(reqInfo["parameters"]); break; } } break; } #endregion #region Input case "input": { var inputLogic = new InputLogic(ref this.sendEvent, ref this.sendQueue); switch (method.ToLower()) { case "getlist": { returnString = inputLogic.GetList(reqInfo["parameters"]); break; } case "create": { returnString = inputLogic.Create(reqInfo["parameters"]); break; } case "modify": { returnString = inputLogic.Modify(reqInfo["parameters"]); break; } case "delete": { returnString = inputLogic.Delete(reqInfo["parameters"]); break; } } break; } #endregion #region Cluster case "cluster": { var clusterLogic = new ClusterLogic(ref this.sendEvent, ref this.sendQueue); switch (method.ToLower()) { case "schema": { break; } case "getlist": { returnString = clusterLogic.GetList(reqInfo["parameters"]); break; } case "gettab": { returnString = clusterLogic.GetTab(reqInfo["parameters"]); break; } case "getplayback": { returnString = clusterLogic.GetPlayback(reqInfo["parameters"]); break; } } break; } #endregion } result.Add(new KeyValuePair <string, JsonValue>("result", returnString)); this.Send(result.ToString()); }