/// <summary> /// 获取指定品种指定日期前历史主力合约。 /// </summary> /// <param name="varieties"></param> /// <param name="settlementDate"></param> /// <returns></returns> private List <string> GetHistoryMainContract(USeProduct varieties, DateTime settlementDate) { string cmdText = string.Format(@"select m.main_contract from {0}.main_contract m left join {0}.contracts c on m.main_contract = c.contract where m.varieties = '{1}' and m.exchange = '{2}' and m.settlement_date < '{3:yyyy-MM-dd}' and c.is_trading = 1 order by settlement_date desc;", m_alpahDBName, varieties.ProductCode, varieties.Market.ToString(), settlementDate); DataTable table = new DataTable(); using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); MySqlDataAdapter adapter = new MySqlDataAdapter(cmdText, connection); adapter.Fill(table); adapter.Dispose(); } List <string> histroyMainContractList = new List <string>(); if (table != null && table.Rows.Count > 0) { foreach (DataRow row in table.Rows) { histroyMainContractList.Add(row["main_contract"].ToString()); } } return(histroyMainContractList); }
/// <summary> /// 保存连续合约。 /// </summary> /// <param name="varieties">品种。</param> /// <param name="settlementDate">结算日。</param> /// <param name="serialContractList">连续合约。</param> private void SaveSerialContract(USeProduct varieties, DateTime settlementDate, List <string> serialContractList) { using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); string cmdText = GetSerialContractUpdateSql(); MySqlCommand command = new MySqlCommand(cmdText, connection); command.Parameters.AddWithValue("@varieties", varieties.ProductCode); command.Parameters.AddWithValue("@exchange", varieties.Market.ToString()); command.Parameters.AddWithValue("@settlement_date", settlementDate.Date); for (int i = 1; i <= 12; i++) { string key = string.Format("@serial_contract{0}", i); string value = i <= serialContractList.Count ? serialContractList[i - 1] : ""; command.Parameters.AddWithValue(key, value); } int result = command.ExecuteNonQuery(); if (result < 1) { command.CommandText = GetSerialContractInsertSql(); result = command.ExecuteNonQuery(); Debug.Assert(result == 1); } } }
/// <summary> /// 修改-下单参数 /// </summary> /// <param name="argument"></param> public ArbitrageOrderCreateForm(ArbitrageArgument argument, USeProduct product) { InitializeComponent(); m_product = product; m_arbitrageArgument = argument; }
private void SetMarketPanelButton(Panel panel, USeProduct product) { foreach (Control subControl in panel.Controls) { if ((subControl is Button) == false) { continue; } Button btn = subControl as Button; Debug.Assert(btn != null); if (btn.Tag == null) { continue; } Debug.Assert(btn.Tag != null && (btn.Tag is USeProduct)); if ((btn.Tag as USeProduct).ProductCode == product.ProductCode) { btn.BackColor = System.Drawing.Color.LawnGreen; btn.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); btn.ForeColor = System.Drawing.Color.Purple; btn.UseVisualStyleBackColor = false; } else { btn.BackColor = SystemColors.Control; btn.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); btn.ForeColor = System.Drawing.SystemColors.ControlText; btn.UseVisualStyleBackColor = false; } } }
/// <summary> /// 获取指定品种指定日期成交量最大的合约。 /// </summary> /// <param name="varities"></param> /// <param name="settlementDate"></param> /// <returns></returns> private string GetMaxVolumeInstrument2(USeProduct varities, DateTime settlementDate) { string cmdText = string.Format(@"select dk.contract,dk.date_time,dk.openinterest from {0}.day_kline dk left join {0}.contracts c on dk.contract = c.contract where dk.date_time = '{1:yyyy-MM-dd}' and c.varieties = '{2}' and c.exchange = '{3}' order by dk.openinterest desc,dk.contract asc limit 1;", m_alpahDBName, settlementDate, varities.ProductCode, varities.Market.ToString()); DataTable table = new DataTable(); using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); MySqlDataAdapter adapter = new MySqlDataAdapter(cmdText, connection); adapter.Fill(table); adapter.Dispose(); } if (table != null && table.Rows.Count > 0) { Debug.Assert(table.Rows.Count == 1); return(table.Rows[0]["contract"].ToString()); } else { return(string.Empty); } }
/// <summary> /// 寻找并选中 /// </summary> /// <param name="product"></param> private void FindButtonProduct(USeProduct product) { GetMarketPanelButton(this.panelSFE, product); GetMarketPanelButton(this.panelDCE, product); GetMarketPanelButton(this.panelCFFE, product); GetMarketPanelButton(this.panelCZCE, product); }
/// <summary> /// 获取K线生成器。 /// </summary> /// <param name="instrument"></param> /// <returns></returns> private List <KLineFactory> GetIndexKLineFactory(USeInstrument instrument) { Debug.Assert(instrument.Market != USeMarket.Unknown); string varieties = USeTraderProtocol.GetVarieties(instrument.InstrumentCode); List <KLineFactory> factoryList = null; if (m_indexkLineFactoryDic.TryGetValue(varieties, out factoryList) == false) { USeProduct product = m_productManager.GetPruduct(varieties); factoryList = new List <KLineFactory>(); DayTradeRange tradeRange = m_tradeRangeManager.CreateTradeRange(varieties); DateTime tradeDay = tradeRange.GetTradeDay(DateTime.Now); USeInstrument indexInstrument = USeTraderProtocol.GetVarietiesIndexCode(product); USeKLine dayKLine = GetDayKLine(tradeDay, indexInstrument); List <USeInstrument> instrumentList = m_instrumentManager.GetAllInstruments(varieties, product.Market); IndexDayKLineFactory dayFactory = new IndexDayKLineFactory(product, instrumentList, dayKLine, m_dayKLinePublishInterval, m_kLinePublisher, tradeRange, m_eventLogger, m_instrumentManager); factoryList.Add(dayFactory); IndexMinKLineFactory min1Factory = new IndexMinKLineFactory(product, instrumentList, USeCycleType.Min1, m_kLinePublisher, tradeRange, m_eventLogger, m_instrumentManager); factoryList.Add(min1Factory); m_indexkLineFactoryDic.Add(varieties, factoryList); } Debug.Assert(factoryList != null && factoryList.Count == 2); return(factoryList); }
public void ProductListButtonDoubleClickHandler(object sender, EventArgs e) { m_product = this.selectProductControl1.SelectedProduct; this.DialogResult = DialogResult.Yes; this.Close(); }
/// <summary> /// 初始化方法。 /// </summary> public void Initialize() { string strSel = string.Format(@"select * from {0}.varieties where exchange in ({1});", m_alphaDBName, USeTraderProtocol.GetInternalFutureMarketSqlString()); DataTable table = MySQLDriver.GetTableFromDB(m_dbConnStr, strSel); List <USeProduct> productList = new List <USeProduct>(); foreach (DataRow row in table.Rows) { string exchange = row["exchange"].ToString(); USeProduct product = new USeProduct() { ProductCode = row["code"].ToString(), Market = (USeMarket)Enum.Parse(typeof(USeMarket), exchange), ShortName = row["short_name"].ToString(), LongName = row["long_name"].ToString(), VolumeMultiple = Convert.ToDecimal(row["volume_multiple"]), PriceTick = Convert.ToDecimal(row["price_tick"]) }; productList.Add(product); } m_varietiesDic.Clear(); foreach (USeProduct product in productList) { m_varietiesDic.Add(product.ProductCode, product); } }
private void btnOK_Click(object sender, EventArgs e) { m_product = this.selectProductControl1.SelectedProduct; this.DialogResult = DialogResult.Yes; this.Close(); }
/// <summary> /// 获取所有品种信息。 /// </summary> /// <returns></returns> private List <USeProduct> GetAllVarieties() { string cmdText = string.Format(@"select* from {0}.varieties where exchange in ({1});", m_alpahDBName, GetInternalExchanges()); DataTable table = new DataTable(); using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); MySqlDataAdapter adapter = new MySqlDataAdapter(cmdText, connection); adapter.Fill(table); adapter.Dispose(); } List <USeProduct> varieties = new List <USeProduct>(); if (table != null) { foreach (DataRow row in table.Rows) { USeProduct product = new USeProduct() { ProductCode = row["code"].ToString(), Market = (USeMarket)Enum.Parse(typeof(USeMarket), row["exchange"].ToString()) }; varieties.Add(product); } } return(varieties); }
private void InitializeUserControl() { this.orderBookListControl1.Initialize(); this.tradeBookListControl1.Initialize(); this.positionListControl1.Initialize(); this.arbitrageOrderListControl1.Initialize(); this.arbitrageLogViewControl1.Initialize(); this.arbitrageRunStateControl1.Initialize(); this.bottomStateControl1.Initialize(); this.investorFundControl1.Initialize(); this.alarmNoticeViewControl1.Initialize(); this.bottomStateControl1.OnSelectedProduct += BottomStateControl1_OnSelectedProduct; //this.arbitrageQuoteListControl1.OnSelectCombineInstrumentChanged += QuoteListControl1_OnSelectInstrumentChanged; UserDefineSetting userSetting = USeManager.Instance.SystemConfigManager.GetUserDefineSetting(); Debug.Assert(userSetting != null); this.arbitrageQuoteListControl1.Initialize(); this.arbitrageQuoteListControl1.OnSelectCombineInstrumentChanged += ArbitrageQuoteListControl1_OnSelectCombineInstrumentChanged; USeProduct defaultProduct = new USeProduct() { ProductCode = userSetting.LastSelectProduct, ShortName = userSetting.LastSelectProductName }; this.bottomStateControl1.SetDefaultProduct(defaultProduct); SetDefaultProduct(defaultProduct); }
/// <summary> /// 更换品种。 /// </summary> /// <param name="product"></param> private void ChangegProduct(USeProduct product) { if (string.IsNullOrEmpty(product.ProductCode)) { return; } try { m_instrumentDetailList.Clear(); m_instrumentList.Clear(); List <USeInstrumentDetail> instrumentDetailList = USeManager.Instance.OrderDriver.QueryInstrumentDetail(product.ProductCode); if (instrumentDetailList == null) { return; } foreach (USeInstrumentDetail instrumentDetail in instrumentDetailList) { m_instrumentDetailList.Add(instrumentDetail); USeInstrument instrument = instrumentDetail.Instrument; m_instrumentList.Add(instrument); } m_product = product; } catch (Exception ex) { Debug.Assert(false, ex.Message); } }
private void SetSelectVarieties(USeProduct product) { SetMarketPanelButton(this.panelSFE, product); SetMarketPanelButton(this.panelDCE, product); SetMarketPanelButton(this.panelCFFE, product); SetMarketPanelButton(this.panelCZCE, product); }
/// <summary> /// 新增-行情组合合约 /// </summary> /// <param name="combineInstrument"></param> public ArbitrageOrderCreateForm(ArbitrageCombineInstrument combineInstrument, USeProduct product) { InitializeComponent(); m_combineInstrument = combineInstrument; m_product = product; }
/// <summary> /// 获取指定品种指定日期合约列表(按日期排序) /// </summary> /// <param name="varieties"></param> /// <param name="settlementDate"></param> /// <returns></returns> private List <string> GetTodaySerialInstrument(USeProduct varieties, DateTime settlementDate) { string cmdText = string.Format(@"select contract from {0}.contracts where varieties = '{1}' and exchange='{2}' and open_date <= '{3:yyyy-MM-dd}' and expire_date >= '{3:yyyy-MM-dd}' order by contract;", m_alpahDBName, varieties.ProductCode, varieties.Market.ToString(), settlementDate); DataTable table = new DataTable(); using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); MySqlDataAdapter adapter = new MySqlDataAdapter(cmdText, connection); adapter.Fill(table); adapter.Dispose(); } List <string> serialList = new List <string>(); if (table != null && table.Rows.Count > 0) { foreach (DataRow row in table.Rows) { serialList.Add(row["contract"].ToString()); } } return(serialList); }
/// <summary> /// 获取指定品种指定日期成交量最大的合约。[hanyu]2017//11/03修正为持仓量最大 /// </summary> /// <param name="varieties"></param> /// <param name="settlementDate"></param> /// <returns></returns> private string GetMaxVolumeInstrument(USeProduct varieties, DateTime settlementDate) { string cmdText = string.Format(@"select dk.contract,dk.date_time,dk.openinterest from {0}.day_kline dk where dk.date_time = '{1:yyyy-MM-dd}' and dk.contract like '{2}%' and dk.exchange = '{3}' order by dk.openinterest desc,dk.contract asc;", m_alpahDBName, settlementDate, varieties.ProductCode, varieties.Market.ToString()); DataTable table = new DataTable(); using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); MySqlDataAdapter adapter = new MySqlDataAdapter(cmdText, connection); adapter.Fill(table); adapter.Dispose(); } if (table != null && table.Rows.Count > 0) { USeInstrument mainContractCode = USeTraderProtocol.GetMainContractCode(varieties.ProductCode, varieties.Market); USeInstrument indexCode = USeTraderProtocol.GetVarietiesIndexCode(varieties.ProductCode, varieties.Market); int maxOpeninterest = 0; string mainContract = string.Empty; foreach (DataRow row in table.Rows) { string contract = row["contract"].ToString(); string constractVarieties = USeTraderProtocol.GetVarieties(contract); if (constractVarieties == varieties.ProductCode) { if (contract == mainContractCode.InstrumentCode || contract == indexCode.InstrumentCode) { //过滤掉指数编码和主力合约编码 string text = string.Format("{0}@{1:yyyy-MM-dd}计算主力合约被过滤的指数编码和主力合约,{2}", varieties.ProductCode, settlementDate, contract); Debug.WriteLine(text); m_logger.WriteInformation(text); continue; } else { if (Convert.ToInt32(row["openinterest"]) > maxOpeninterest) { maxOpeninterest = Convert.ToInt32(row["openinterest"]); mainContract = row["contract"].ToString(); } } } } return(mainContract); } else { return(string.Empty); } }
private void ArbitrageQuoteListControl1_OnSelectCombineInstrumentChanged(ArbitrageCombineInstrument combineInstrument) { USeProduct product = USeManager.Instance.OrderDriver.QueryProduct(combineInstrument.ProductID); Debug.Assert(product != null); ArbitrageOrderCreateForm form = new ArbitrageOrderCreateForm(combineInstrument, product); form.Show(this); }
private void ProductButton_DoubleClick(object sender, EventArgs e) { USeProduct product = (sender as Button).Tag as USeProduct; m_selectedProduct = product; SetSelectVarieties(product); if (DoubleClickEvent != null) { DoubleClickEvent(sender, e); } }
/// <summary> /// 获取产品信息。 /// </summary> /// <param name="productId">品种代码。</param> /// <returns></returns> public USeProduct GetPruduct(string productId) { USeProduct product = null; if (m_varietiesDic.TryGetValue(productId, out product) == false) { Debug.Assert(false); } return(product); }
/// <summary> /// 产品Combox更改 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ComBoxProduct_SelectedIndexChanged(object sender, EventArgs e) { USeProduct product = ((ProductViewAlisa)this.comboBox_Product.SelectedItem).Product; //更改产品 ChangegProduct(product); //填充两个腿列表 FillInstrumentListBox(); //填充套利组合约列表 FillCombineInstrumentListBox(); }
private void SetArbitrageArgument() { ArbitrageArgument argument = m_autoTrader.GetArgument(); Debug.Assert(argument != null); USeProduct product = USeManager.Instance.OrderDriver.QueryProduct(argument.ProductID); Debug.Assert(product != null); ArbitrageOrderCreateForm form = new ArbitrageOrderCreateForm(argument, product); form.ShowDialog(); }
public void SetDefultProduct() { ProductViewAlisa defultProduct = new ProductViewAlisa(); defultProduct.Product = m_product; //[hanyu]默认选中defult选项 foreach (object o in this.comboBox_Product.Items) { USeProduct product = o as USeProduct; if (product == m_product) { this.comboBox_Product.SelectedItem = defultProduct.Product; } } }
/// <summary> /// 触发产品变更事件。 /// </summary> /// <param name="product">产品。</param> private void SafeFireSelectedProductChanged(USeProduct product) { SelectedProductChangeEventHandle handle = this.OnSelectedProduct; if (handle != null) { try { handle(product); } catch (Exception ex) { Debug.Assert(false, ex.Message); } } }
public static LogFileInfo ParseLogFile(FileInfo fileInfo, USeProductManager productManager) { string[] items = fileInfo.Name.Split(new char[] { '-', '.' }); if (items.Length != 3 && items[2].ToLower() != "csv") { throw new Exception("Undistinguish fileName:" + fileInfo.Name); } USeCycleType cycle = USeCycleType.Unknown; string cycleValue = items[0].ToLower(); string instrumentCode = items[1]; if (cycleValue == "1min") { cycle = USeCycleType.Min1; } else if (cycleValue == "5min") { cycle = USeCycleType.Min5; } else if (cycleValue == "1day") { cycle = USeCycleType.Day; } else { throw new Exception("Undistinguish cycel:" + cycleValue); } string productCode = USeTraderProtocol.GetVarieties(instrumentCode); USeProduct product = productManager.GetPruduct(productCode); if (product == null) { throw new Exception("Undistinguish cycel:" + cycleValue); } LogFileInfo logInfo = new LogFileInfo(); logInfo.InstrumentCode = GetOfficeInstrumentCode(instrumentCode, product.Market); logInfo.Market = product.Market; logInfo.Cycle = cycle; logInfo.FileInfo = fileInfo; return(logInfo); }
private void ProductButton_Click(object sender, EventArgs e) { TimeSpan span = DateTime.Now - m_clickTime; if (span.TotalMilliseconds < SystemInformation.DoubleClickTime) { ProductButton_DoubleClick(sender, e); return; } m_clickTime = DateTime.Now; USeProduct product = (sender as Button).Tag as USeProduct; m_selectedProduct = product; SetSelectVarieties(product); }
private void BottomStateControl1_OnSelectedProduct(USeProduct product) { SetDefaultProduct(product); m_product = product; UserDefineSetting userSetting = USeManager.Instance.SystemConfigManager.GetUserDefineSetting(); userSetting.LastSelectProduct = product.ProductCode; userSetting.LastSelectProductName = product.ShortName; try { USeManager.Instance.SystemConfigManager.SaveUserDefineSetting(userSetting); } catch (Exception ex) { Debug.Assert(false, ex.Message); } }
/// <summary> /// 获取指定品种指定日期合约列表(按日期排序) /// </summary> /// <param name="varieties"></param> /// <param name="settlementDate"></param> /// <returns></returns> private List <string> GetHistorySerialInstrument(USeProduct varieties, DateTime settlementDate) { string cmdText = string.Format(@"select * from {0}.day_kline where date_time = '{1:yyyy-MM-dd}' and exchange= '{2}' and contract like '{3}%' order by contract;", m_alpahDBName, settlementDate, varieties.Market.ToString(), varieties.ProductCode); DataTable table = new DataTable(); using (MySqlConnection connection = new MySqlConnection(m_dbConnStr)) { connection.Open(); MySqlDataAdapter adapter = new MySqlDataAdapter(cmdText, connection); adapter.Fill(table); adapter.Dispose(); } List <string> serialList = new List <string>(); if (table != null && table.Rows.Count > 0) { string mainContractCode = USeTraderProtocol.GetMainContractCode(varieties.ProductCode, varieties.Market).InstrumentCode; string indexCode = USeTraderProtocol.GetVarietiesIndexCode(varieties.ProductCode, varieties.Market).InstrumentCode; foreach (DataRow row in table.Rows) { string contract = row["contract"].ToString(); string constractVarieties = USeTraderProtocol.GetVarieties(contract); if (constractVarieties == varieties.ProductCode) // 同品种 { if (contract == mainContractCode || contract == indexCode) { //过滤掉指数编码和主力合约编码 continue; } else { serialList.Add(contract); } } } } return(serialList); }
private void InitializeVarietiesPanel(Panel panel, List <USeProduct> products, USeMarket market) { panel.Controls.Clear(); List <USeProduct> productList = (from i in products where i.Market == market select i).ToList(); if (productList == null || productList.Count <= 0) { return; } int x = 19; int y = 8; int xOffset = 103; int yOffset = 40; for (int i = 0; i < productList.Count; i++) { USeProduct product = productList[i]; int xPos = x + ((i % VARIETIES_ITEM_COUNT) * xOffset); int yPos = y + ((i / VARIETIES_ITEM_COUNT) * yOffset); Button button = new System.Windows.Forms.Button(); button.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); button.ForeColor = System.Drawing.SystemColors.ControlText; button.Location = new System.Drawing.Point(xPos, yPos); button.Name = "button2"; button.Size = new System.Drawing.Size(95, 35); button.TabIndex = 3; button.Text = product.ShortName; button.Tag = product; button.UseVisualStyleBackColor = true; button.Click += ProductButton_Click; panel.Controls.Add(button); } }
private List <USeInstrumentDetail> m_insDetailList = null; //合约的信息列表 #endregion #region construction /// <summary> /// 构造方法。 /// </summary> /// <param name="product">品种。</param> /// <param name="publisher">发布者。</param> /// <param name="tradeRange">交易时段。</param> /// <param name="publishInterval">发布间隔。</param> public IndexDayKLineFactory(USeProduct product, List <USeInstrument> instrumentList, USeKLine initKLine, TimeSpan publishInterval, IKLinePublisher publisher, DayTradeRange tradeRange, IAppLogger eventLogger, USeTradingInstrumentManager instrumentManager) : base(USeTraderProtocol.GetVarietiesIndexCode(product), publisher, tradeRange, eventLogger) { Debug.Assert(product.PriceTick > 0); Debug.Assert(instrumentList != null && instrumentList.Count > 0); m_publishInterval = publishInterval; m_nextPublishTime = DateTime.Now.AddTicks(publishInterval.Ticks); m_product = product; m_componentDic = new Dictionary <string, USeMarketData>(); foreach (USeInstrument instrument in instrumentList) { m_componentDic.Add(instrument.InstrumentCode, null); } if (initKLine != null) { Debug.Assert(initKLine.InstrumentCode == USeTraderProtocol.GetVarietiesIndexCode(product).InstrumentCode); m_kLine = initKLine; } else { m_kLine = CreateDefaultKLine(); } //获取该数据库下的合约详细信息 try { Debug.Assert(instrumentManager != null); m_insDetailList = instrumentManager.GetAllInstrumentDetails(); } catch (Exception ex) { throw new Exception("IndexDayKLineFactory 获取全部合约详细信息异常:" + ex.Message); } }