/// <summary> /// 填充郑州商品交易所数据 /// </summary> /// <param name="dateTime"></param> private void FillDataZZ(DateTime dateTime) { Dispatcher.Invoke(new FormControlInvoker(() => { _loading.Visibility = System.Windows.Visibility.Visible; zz = false; })); decimal bl = 0; try { Dispatcher.Invoke(new FormControlInvoker(() => { bl = Decimal.Parse(_textBox倍率.Text.Trim()); })); } catch (Exception) { Dispatcher.Invoke(new FormControlInvoker(() => { _loading.Visibility = System.Windows.Visibility.Hidden; })); MessageBox.Show("倍率必须为有效的小数或整数。"); return; } try { List <Settement> settements = new List <Settement>(); var result = GetDataZZ(dateTime); string name = ""; bool inn = false; if (result.Contains("无交易记录!")) { MessageBox.Show("交易所不存在[" + dateTime.ToShortDateString() + "]的数据。"); return; } result = result.Substring(result.IndexOf("平今手续费减半")); result = result.Substring(0, result.IndexOf("</table>")); while (true) { Settement settement = new Settement(); result = result.Substring(result.IndexOf("<td>") + 4); string item = result.Substring(0, result.IndexOf("</td>")); settement.InstrumentId = item; result = result.Substring(result.IndexOf("\">") + 2); string price = result.Substring(0, result.IndexOf("</td>")); settement.SettlementPrice = Decimal.Parse(price); result = result.Substring(result.IndexOf("\">") + 2); result = result.Substring(result.IndexOf("\">") + 2); result = result.Substring(result.IndexOf("\">") + 2); string buyMargin = result.Substring(0, result.IndexOf("</td>")); settement.LongMarginRatio = Decimal.Parse(buyMargin) / 100; result = result.Substring(result.IndexOf("\">") + 2); string saleMargin = result.Substring(0, result.IndexOf("</td>")); settement.ShortMarginRatio = Decimal.Parse(saleMargin) / 100; result = result.Substring(result.IndexOf("\">") + 2); string fee = result.Substring(0, result.IndexOf("</td>")); settement.TradeFeeUnit = Decimal.Parse(fee) * bl; settement.FeeMark = true; settement.RationColor = "Black"; settement.UnitColor = "Red"; AutoSettement(settement); if (!name.Equals(settement.Commodity)) { inn = !inn; name = settement.Commodity; } settement.BGMark = inn; result = result.Substring(result.IndexOf("\">") + 2); result = result.Substring(result.IndexOf("\">") + 2); string pingjin = result.Substring(0, result.IndexOf("</td>")); if (pingjin.Equals("Y")) { settement.DiscountRate = 0.5m; } else { settement.DiscountRate = 1m; } settements.Add(settement); if (result.IndexOf("<tr>") < 0) { break; } else { result = result.Substring(result.IndexOf("<tr>") + 2); } } Dispatcher.Invoke(new FormControlInvoker(() => { var order = settements.GroupBy(m => m.Commodity).OrderBy(m => m.Min(n => n.TotalTodayTradeFeeRation)); List <Settement> source = new List <Settement>(); foreach (var or in order) { var comm = or.Last().Commodity; if (!name.Equals(comm)) { inn = !inn; name = comm; } var setts = settements.Where(m => m.Commodity.Equals(comm)).OrderBy(m => m.InstrumentId); foreach (var st in setts) { st.BGMark = inn; } source.AddRange(setts); } _dataGridZZ.ItemsSource = source; })); } catch (Exception ex) { if (ex.Message.Contains("(404) 未找到")) { Dispatcher.Invoke(new FormControlInvoker(() => { _dataGridZZ.ItemsSource = null; })); MessageBox.Show("交易所不存在[" + dateTime.ToShortDateString() + "]的数据。"); } else { MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace); } } finally { Dispatcher.Invoke(new FormControlInvoker(() => { zz = true; if (sh && zz && dl) { _loading.Visibility = System.Windows.Visibility.Hidden; } })); } }
private void AutoSettement(Settement settement) { // 得到品种 string it = settement.InstrumentId.Substring(0, 2); switch (it) { case "cu": settement.Commodity = "铜"; settement.Worth = settement.SettlementPrice * 5; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "al": settement.Commodity = "铝"; settement.Worth = settement.SettlementPrice * 5; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "zn": settement.Commodity = "锌"; settement.Worth = settement.SettlementPrice * 5; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "pb": settement.Commodity = "铅"; settement.Worth = settement.SettlementPrice * 5; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "ru": settement.Commodity = "橡胶"; settement.Worth = settement.SettlementPrice * 10; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "fu": settement.Commodity = "燃油"; settement.Worth = settement.SettlementPrice * 50; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "rb": settement.Commodity = "螺纹"; settement.Worth = settement.SettlementPrice * 10; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "wr": settement.Commodity = "线材"; settement.Worth = settement.SettlementPrice * 10; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "au": settement.Commodity = "黄金"; settement.Worth = settement.SettlementPrice * 1000; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "ag": settement.Commodity = "白银"; settement.Worth = settement.SettlementPrice * 15; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "bu": settement.Commodity = "沥青"; settement.Worth = settement.SettlementPrice * 10; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "hc": settement.Commodity = "热卷"; settement.Worth = settement.SettlementPrice * 10; //settement.TradeFeeUnit = settement.Worth * settement.TradeFeeRation / 10000; break; case "ni": settement.Commodity = "镍"; settement.Worth = settement.SettlementPrice; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "sn": settement.Commodity = "锡"; settement.Worth = settement.SettlementPrice; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "CF": settement.Commodity = "棉花"; settement.Worth = settement.SettlementPrice * 5; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "FG": settement.Commodity = "玻璃"; settement.Worth = settement.SettlementPrice * 20; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "JR": settement.Commodity = "粳稻"; settement.Worth = settement.SettlementPrice * 20; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "LR": settement.Commodity = "晚籼"; settement.Worth = settement.SettlementPrice * 20; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "MA": settement.Commodity = "甲醇"; settement.Worth = settement.SettlementPrice * 10; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "OI": settement.Commodity = "菜油"; settement.Worth = settement.SettlementPrice * 10; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "PM": settement.Commodity = "普麦"; settement.Worth = settement.SettlementPrice * 50; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "RI": settement.Commodity = "早籼"; settement.Worth = settement.SettlementPrice * 20; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "RM": settement.Commodity = "菜粕"; settement.Worth = settement.SettlementPrice * 10; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "RS": settement.Commodity = "菜籽"; settement.Worth = settement.SettlementPrice * 10; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "SF": settement.Commodity = "硅铁"; settement.Worth = settement.SettlementPrice * 5; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "SM": settement.Commodity = "锰硅"; settement.Worth = settement.SettlementPrice * 5; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "SR": settement.Commodity = "白糖"; settement.Worth = settement.SettlementPrice * 10; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "TA": settement.Commodity = "PTA"; settement.Worth = settement.SettlementPrice * 5; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "TC": settement.Commodity = "动力煤"; settement.Worth = settement.SettlementPrice * 200; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "WH": settement.Commodity = "强麦"; settement.Worth = settement.SettlementPrice * 20; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; case "ZC": settement.Commodity = "动力煤"; settement.Worth = settement.SettlementPrice * 100; settement.TradeFeeRation = settement.TradeFeeUnit / settement.Worth; break; } }
/// <summary> /// 填充上海商品交易所数据 /// </summary> /// <param name="dateTime"></param> private void FillDataSH(DateTime dateTime) { Dispatcher.Invoke(new FormControlInvoker(() => { _loading.Visibility = System.Windows.Visibility.Visible; sh = false; })); decimal bl = 0; try { Dispatcher.Invoke(new FormControlInvoker(() => { bl = Decimal.Parse(_textBox倍率.Text.Trim()); })); } catch (Exception) { Dispatcher.Invoke(new FormControlInvoker(() => { _loading.Visibility = System.Windows.Visibility.Hidden; })); MessageBox.Show("倍率必须为有效的小数或整数。"); return; } try { List <Settement> settements = new List <Settement>(); var json = JObject.Parse(GetDataSH(dateTime)); var array = json.GetValue("Settlement"); string name = ""; bool inn = false; for (int i = 0; i < array.Count(); i++) { Settement settement = new Settement(); JObject data = array[i] as JObject; // 合约代码 var instrumentId = data.GetValue("INSTRUMENTID"); settement.InstrumentId = instrumentId.ToString().Trim(); // 结算价 var settlementPrice = data.GetValue("SETTLEMENTPRICE"); if (String.IsNullOrEmpty(settlementPrice.ToString())) { throw new Exception("(404) 未找到"); } settement.SettlementPrice = Decimal.Parse(settlementPrice.ToString()); // 交易手续费率 var tradeFeeRation = data.GetValue("TRADEFEERATION"); var aaa = Decimal.Parse(tradeFeeRation.ToString()); if (aaa != 0) { settement.TradeFeeRation = aaa * bl; settement.FeeMark = false; settement.RationColor = "Red"; settement.UnitColor = "Black"; } // 交易手续费额(元/手) var tradeFeeUnit = data.GetValue("TRADEFEEUNIT"); var bbb = Decimal.Parse(tradeFeeUnit.ToString()); if (bbb != 0) { settement.TradeFeeUnit = bbb * bl; settement.FeeMark = true; settement.RationColor = "Black"; settement.UnitColor = "Red"; } // 自动配置 AutoSettement(settement); // 交割手续费 var commoditydeLiveryFeeUnit = data.GetValue("COMMODITYDELIVERYFEEUNIT"); settement.CommoditydeLiveryFeeUnit = Decimal.Parse(commoditydeLiveryFeeUnit.ToString()); // 投机买保证金率 var longMarginRatio = data.GetValue("LONGMARGINRATIO"); settement.LongMarginRatio = Decimal.Parse(longMarginRatio.ToString()); // 投机卖保证金率 var shortMarginRatio = data.GetValue("SHORTMARGINRATIO"); settement.ShortMarginRatio = Decimal.Parse(shortMarginRatio.ToString()); // 套保买保证金率 var spec_longMarginRatio = data.GetValue("SPEC_LONGMARGINRATIO"); settement.SpecLongMarginRatio = Decimal.Parse(spec_longMarginRatio.ToString()); // 套保卖保证金率 var spec_shortMarginRatio = data.GetValue("SPEC_SHORTMARGINRATIO"); settement.SpecShortMarginRatio = Decimal.Parse(spec_shortMarginRatio.ToString()); // 平今折扣率 var discountRate = data.GetValue("DISCOUNTRATE"); settement.DiscountRate = Decimal.Parse(discountRate.ToString()); //var commodityDeliveryFeeRation = data.GetValue("COMMODITYDELIVERYFEERATION"); //var tradingDay = data.GetValue("TRADINGDAY"); //var updateDate = data.GetValue("UPDATE_DATE"); //var id = data.GetValue("id"); settements.Add(settement); } Dispatcher.Invoke(new FormControlInvoker(() => { var order = settements.GroupBy(m => m.Commodity).OrderBy(m => m.Min(n => n.TotalTodayTradeFeeRation)); List <Settement> source = new List <Settement>(); foreach (var or in order) { var comm = or.Last().Commodity; if (!name.Equals(comm)) { inn = !inn; name = comm; } var setts = settements.Where(m => m.Commodity.Equals(comm)).OrderBy(m => m.InstrumentId); foreach (var st in setts) { st.BGMark = inn; } source.AddRange(setts); } _dataGridSH.ItemsSource = source; })); } catch (Exception ex) { if (ex.Message.Contains("(404) 未找到")) { Dispatcher.Invoke(new FormControlInvoker(() => { _dataGridSH.ItemsSource = null; })); MessageBox.Show("交易所不存在[" + dateTime.ToShortDateString() + "]的数据。"); } else { MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace); } } finally { Dispatcher.Invoke(new FormControlInvoker(() => { sh = true; if (sh && zz && dl) { _loading.Visibility = System.Windows.Visibility.Hidden; } })); } }