private void dataGridViewStopOrders_DoubleClick(object sender, EventArgs e) { var MouseEvent = (MouseEventArgs)e; var dataGrid = (DataGridView)sender; dataGrid.ClearSelection(); if (MouseEvent.Button == MouseButtons.Right) { var hti = dataGrid.HitTest(MouseEvent.X, MouseEvent.Y); int index = hti.RowIndex; if (index >= 0) { DataGridViewRow row = dataGrid.Rows[index]; row.Selected = true; Common.Ext.NewThread(() => { decimal number = Convert.ToDecimal(row.Cells[1].Value.ToString()); var sec = this.SearchSecurity(row.Cells[2].Value.ToString()); if (sec != null) { Trader.CancelStopOrder(sec, number); } }); } } }
/// <summary> /// Инициализация панели с контроля сделки /// </summary> private void InitPanelControl() { numericUpDownMCPriceLastTrade.InitSecurity(Securities); numericUpDownMCStopTiks.InitWheelDecimal(0, 1000, 1, 0); numericUpDownMCTakeProfitTiks.InitWheelDecimal(0, 1000, 1, 0); //Получаем сохраненные данные numericUpDownMCStopTiks.Value = SettingsDepth.Get("TiksControlStop"); numericUpDownMCTakeProfitTiks.Value = SettingsDepth.Get("TiksControlTake"); numericUpDownMCStopTiks.ValueChanged += (s, e) => { SettingsDepth.Set("TiksControlStop", (int)numericUpDownMCStopTiks.Value); }; numericUpDownMCTakeProfitTiks.ValueChanged += (s, e) => { SettingsDepth.Set("TiksControlTake", (int)numericUpDownMCTakeProfitTiks.Value); }; //ВЫставляем флажок на сохраненном проценте foreach (var percent in PERCENT) { var objRadio = GetRadioButtonByPercent(percent); if (objRadio.NotIsNull()) { if (percent == SettingsDepth.Get("PercentTakeOut")) { objRadio.Checked = true; } objRadio.CheckedChanged += (s, e) => { SettingsDepth.Set("PercentTakeOut", percent); }; } } buttonMCClose.Click += (s, e) => { var sOrders = GetStopOrdersForControl(); foreach (var sOrd in sOrders) { Trader.CancelStopOrder(sOrd); } }; buttonMCReset.Click += (s, e) => { LoopControl(true); }; buttonACPriceUp.Click += (s, e) => { numericUpDownMCStopTiks.Value++; numericUpDownMCTakeProfitTiks.Value = numericUpDownMCTakeProfitTiks.Value > 0 ? numericUpDownMCTakeProfitTiks.Value - 1 : 0; }; buttonACPriceDown.Click += (s, e) => { numericUpDownMCStopTiks.Value = numericUpDownMCStopTiks.Value > 0 ? numericUpDownMCStopTiks.Value - 1 : 0; numericUpDownMCTakeProfitTiks.Value++; }; }
public void LoopControl(bool ReCalculate = false) { if (checkBoxMCActivate.Checked) { var pos = GetPositionForControl(); if (pos.NotIsNull() && pos.CurrentVolume > 0) { var sOrders = GetStopOrdersForControl(); if (ReCalculate || !CheckStopOrdersForControls(sOrders)) { foreach (var sOrd in sOrders) { Trader.CancelStopOrder(sOrd); } return; } if (sOrders.NotIsNull() && sOrders.Count() == 0) ///*&& (!CheckStopOrdersForControls(sOrders)*/) { //Защита от большого числа заявок if (sOrders.Count() > 2) { ShowTransReply("Контроль риска. Стоп-заявки не снимаются."); return; } var lastMyTrade = GetLastMyTradeForControl(pos.Data.CurrentNet); decimal Price = 0; if (lastMyTrade.NotIsNull()) { //Если выбран, то берем цену из поля цены if (checkBoxMCSetPrice.Checked) { Price = numericUpDownMCPriceLastTrade.Value; } else { Price = numericUpDownMCPriceLastTrade.Value = lastMyTrade.Trade.Price; } } else { ShowTransReply("Контроль риска. Не удалось получить последнюю сделку."); return; } if (Price > 0 && numericUpDownMCStopTiks.Value > 0 && numericUpDownMCTakeProfitTiks.Value > 0) { var newStopOrder = GetStopOrderControl(pos.Data.CurrentNet, Price); var takePos = getCurrectPosByPercent(pos); var newTakeProfit = GetTakeProfitOrderControl(pos.Data.CurrentNet, takePos, Price); if (newStopOrder.NotIsNull() && checkBoxMCStopLoss.Checked) { Trader.CreateStopOrder(newStopOrder, StopOrderType.StopLimit); } if (newTakeProfit.NotIsNull() && checkBoxMCTakeProfit.Checked) { Trader.CreateStopOrder(newTakeProfit, StopOrderType.TakeProfit); } } else { ShowTransReply("Контроль риска. Одно из значений равно 0."); return; } } } else { var sOrders = GetStopOrdersForControl(); foreach (var sOrd in sOrders) { Trader.CancelStopOrder(sOrd); Trader.CancelAllOrder(Securities); Trader.CancelAllStopOrder(Securities); } //Снимаем флаг фиксации цены, чтобы при последующих ордерах не выставлялось не корректно. checkBoxMCSetPrice.Checked = false; } } }