Пример #1
0
 private void buttonAddSignVolume_Click(object sender, EventArgs e)
 {
     Qlog.CatchException(() =>
     {
         //if (LastSecSignal.IsNull()) return;
         int timeFrame = 1;
         if (comboBoxSignTimeFrame.SelectedItem is SelectorTimeFrame)
         {
             timeFrame = ((SelectorTimeFrame)comboBoxSignTimeFrame.SelectedItem).TimeFrame;
         }
         DateMarket date = new DateMarket(DateTime.Now);
         var newSign     = new SignalMarket()
         {
             Type           = SignalMarket.TypeSignal.ByVolume,
             SecClass       = LastSecSignal.ToString(),
             Volume         = Convert.ToInt64(numericUpDownSignVolume.Value),
             TimeFrame      = timeFrame,
             TimeAntiRepeat = date,
             Comment        = textBoxSignComment.Text,
             Infinity       = true
         };
         SignalView.GSMSignaler.AddSignal(newSign);
         textBoxSignComment.Text = "";
     });
 }
Пример #2
0
		private void buttonStopOrderBuy_Click(object s, EventArgs e)
		{
			if (this.TrElement.Security.LastPrice == 0) return;
			if (this.TrElement.Security.LastPrice > numericUpDownStopOrderPrice.Value)
			{
				var sOrder = new StopOrder()
				{
					Sec = this.TrElement.Security,
					Price = this.numericUpDownStopOrderPrice.Value,
					Volume = Convert.ToInt32(this.numericUpDownStopOrderVol.Value),
					Direction = OrderDirection.Buy,
					Comment = Define.STOP_LIMIT,
					ConditionPrice = this.numericUpDownStopOrderPrice.Value + this.TrElement.Security.Params.MinPriceStep,
					Offset = this.TrElement.Security.Params.MinPriceStep,
					Spread = this.TrElement.Security.Params.MinPriceStep,
					DateExpiry = DateMarket.ExtractDateTime(dateTimePickerStopOrder.Value)
				};
				this.Trader.CreateStopOrder(sOrder, StopOrderType.TakeProfit);
			} else {
				var sOrder = new StopOrder()
				{
					Sec = this.TrElement.Security,
					Price = this.numericUpDownStopOrderPrice.Value,
					Volume = Convert.ToInt32(this.numericUpDownStopOrderVol.Value),
					Direction = OrderDirection.Buy,
					Comment = Define.STOP_LIMIT,
					ConditionPrice = this.numericUpDownStopOrderPrice.Value - this.TrElement.Security.Params.MinPriceStep,
					DateExpiry = DateMarket.ExtractDateTime(dateTimePickerStopOrder.Value)
				};
				this.Trader.CreateStopOrder(sOrder, StopOrderType.StopLimit);
			}
		}
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="position"></param>
        /// <param name="Price"></param>
        /// <returns></returns>
        private StopOrder GetStopOrderControl(int position, decimal Price)
        {
            decimal stepStop  = Securities.Params.MinPriceStep * 20;
            var     stopOrder = new StopOrder()
            {
                Sec        = Securities,
                Volume     = position < 0 ? position * -1 : position,
                DateExpiry = DateMarket.ExtractDateTime(DateTime.Now.AddDays(1)),
                ClientCode = ClientCode.Value,
                Comment    = Define.STOP_CONTROL
            };

            if (position > 0)
            {
                Price = Price - numericUpDownMCStopTiks.Value * Securities.Params.MinPriceStep;
                stopOrder.ConditionPrice = Price;
                stopOrder.Direction      = OrderDirection.Sell;
                stopOrder.Price          = Price - stepStop;
            }
            else if (position < 0)
            {
                Price = Price + numericUpDownMCStopTiks.Value * Securities.Params.MinPriceStep;
                stopOrder.ConditionPrice = Price;
                stopOrder.Direction      = OrderDirection.Buy;
                stopOrder.Price          = Price + stepStop;
            }
            return(stopOrder);
        }
Пример #4
0
 /// <summary>
 /// Создание отложенных стоп заявок
 /// </summary>
 /// <param name="isBuy"></param>
 private void SendStopOrder(bool isBuy = true)
 {
     if (Securities.LastPrice == 0)
     {
         ShowTransReply("Значение последней цены равно 0.");
         return;
     }
     if (isBuy)
     {
         var sOrder = new StopOrder()
         {
             Sec        = Securities,
             Price      = this.numericUpDownStopPrice.Value,
             Volume     = Convert.ToInt32(this.numericUpDownVolume.Value),
             Direction  = OrderDirection.Buy,
             Comment    = Define.STOP_LIMIT,
             ClientCode = ClientCode.Value,
             DateExpiry = DateMarket.ExtractDateTime(dateTimePickerStopOrder.Value)
         };
         if (Securities.LastPrice > this.numericUpDownStopPrice.Value)
         {
             sOrder.ConditionPrice = this.numericUpDownStopPrice.Value + Securities.Params.MinPriceStep;
             sOrder.Offset         = Securities.Params.MinPriceStep;
             sOrder.Spread         = Securities.Params.MinPriceStep;
             this.Trader.CreateStopOrder(sOrder, StopOrderType.TakeProfit);
         }
         else
         {
             sOrder.ConditionPrice = this.numericUpDownStopPrice.Value - Securities.Params.MinPriceStep;
             this.Trader.CreateStopOrder(sOrder, StopOrderType.StopLimit);
         }
     }
     else
     {
         var sOrder = new StopOrder()
         {
             Sec        = Securities,
             Price      = this.numericUpDownStopPrice.Value,
             Volume     = Convert.ToInt32(this.numericUpDownVolume.Value),
             Direction  = OrderDirection.Sell,
             Comment    = Define.STOP_LIMIT,
             ClientCode = ClientCode.Value,
             DateExpiry = DateMarket.ExtractDateTime(dateTimePickerStopOrder.Value)
         };
         if (Securities.LastPrice < numericUpDownStopPrice.Value)
         {
             sOrder.ConditionPrice = this.numericUpDownStopPrice.Value - Securities.Params.MinPriceStep;
             sOrder.Offset         = Securities.Params.MinPriceStep;
             sOrder.Spread         = Securities.Params.MinPriceStep;
             this.Trader.CreateStopOrder(sOrder, StopOrderType.TakeProfit);
         }
         else
         {
             sOrder.ConditionPrice = this.numericUpDownStopPrice.Value + Securities.Params.MinPriceStep;
             this.Trader.CreateStopOrder(sOrder, StopOrderType.StopLimit);
         }
     }
 }
Пример #5
0
        private StopOrder GetTakeProfitOrderControl(int position, int percentPosition, decimal Price)
        {
            bool isBuy  = position < 0 ? true : false;
            var  sOrder = new StopOrder()
            {
                Sec        = Securities,
                Volume     = percentPosition,
                Comment    = Define.STOP_CONTROL,
                ClientCode = ClientCode.Value,
                DateExpiry = DateMarket.ExtractDateTime(DateTime.Now.AddDays(1))
            };

            if (isBuy)
            {
                Price            = Price - numericUpDownMCTakeProfitTiks.Value * Securities.Params.MinPriceStep;
                sOrder.Price     = Price;
                sOrder.Direction = OrderDirection.Buy;
                if (Securities.LastPrice > Price)
                {
                    sOrder.ConditionPrice = Price + Securities.Params.MinPriceStep;
                    sOrder.Offset         = Securities.Params.MinPriceStep;
                    sOrder.Spread         = Securities.Params.MinPriceStep;
                    return(sOrder);
                }
            }
            else
            {
                sOrder.Direction = OrderDirection.Sell;
                Price            = Price + numericUpDownMCTakeProfitTiks.Value * Securities.Params.MinPriceStep;
                sOrder.Price     = Price;
                if (Securities.LastPrice < Price)
                {
                    sOrder.ConditionPrice = Price - Securities.Params.MinPriceStep;
                    sOrder.Offset         = Securities.Params.MinPriceStep;
                    sOrder.Spread         = Securities.Params.MinPriceStep;
                    return(sOrder);
                }
            }
            return(null);
        }
Пример #6
0
        /// <summary> Инициализация панели очистки сделок за определенную дату </summary>
        private void InitPanelClearCharts()
        {
            dateTimePickerClearChartsStart.Value         = DateTime.Now;
            dateTimePickerClearChartsEnd.Value           = DateTime.Now;
            dateTimePickerClearChartsStart.ValueChanged += (s, e) =>
            {
                if (dateTimePickerClearChartsStart.Value > dateTimePickerClearChartsEnd.Value)
                {
                    dateTimePickerClearChartsStart.Value = dateTimePickerClearChartsEnd.Value;
                }
            };
            dateTimePickerClearChartsEnd.ValueChanged += (s, e) =>
            {
                if (dateTimePickerClearChartsStart.Value > dateTimePickerClearChartsEnd.Value)
                {
                    dateTimePickerClearChartsEnd.Value = dateTimePickerClearChartsStart.Value;
                }
            };

            buttonClearCandle.Click += (s, e) =>
            {
                var dateClearStart = dateTimePickerClearChartsStart.Value;
                var dateClearEnd   = dateTimePickerClearChartsEnd.Value;

                var result = MessageBox.Show(this, "Удалить сделки за " + dateClearStart.ToLongDateString() + " - " + dateClearEnd.ToLongDateString(), "Удаление котировок?",
                                             MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

                if (result == DialogResult.OK)
                {
                    var dStart = new DateMarket(dateClearStart);
                    dStart.SetHour(0).SetMinute(0).SetSecond(0);
                    var dEnd = new DateMarket(dateClearEnd);
                    dEnd.SetHour(23).SetMinute(59).SetSecond(59);
                    DeleteCharts(dStart.GetDateTime(), dEnd.GetDateTime());
                }
            };
        }
Пример #7
0
 /// <summary>
 ///
 /// </summary>
 public void AutoSLLoopControl()
 {
     if (TimeControl.AddSeconds(PERIOD_CONTROL_SEC) > DateTime.Now)
     {
         return;
     }
     TimeControl = DateTime.Now;
     MThread.InitThread(() =>
     {
         foreach (var objControl in ASLObject.ToArray)
         {
             var sec = GetSecCodeAndClass(objControl.SecAndCode);
             if (sec.NotIsNull())
             {
                 var pos = Trader.Objects.tPositions.SearchFirst(p => p.Sec == sec);
                 if (pos.NotIsNull())
                 {
                     var stopLoss = Trader.Objects.tStopOrders.SearchAll(o => o.Sec == sec &&
                                                                         o.IsActive() && o.Comment.Contains(Define.STOP_LOSS)
                                                                         );
                     var volume = pos.CurrentVolume;
                     //Проверяем, не появились ли лишние стоп ордера
                     if (stopLoss.Count() > 1)
                     {
                         Trader.CancelAllStopOrder(sec);
                         continue;
                     }
                     //Проверяем не изменилась ли позиция
                     else if (stopLoss.Count() == 1)
                     {
                         var activeStop = stopLoss.ElementAt(0);
                         //Снимаем стоп если разные обьемы
                         if (activeStop.Volume != volume)
                         {
                             Trader.CancelAllStopOrder(sec);
                             continue;
                         }
                         //Снимаем стоп если он в другую сторону
                         if (activeStop.IsBuy() && pos.IsBuy())
                         {
                             Trader.CancelAllStopOrder(sec);
                             continue;
                         }
                     }
                     else if (stopLoss.Count() == 0 && pos.CurrentVolume > 0)
                     {
                         var allTrades = Trader.Objects.tMyTrades.SearchAll(t => t.Trade.Sec == sec)
                                         .OrderByDescending(o => o.Trade.Number);
                         if (allTrades.NotIsNull())
                         {
                             decimal Price = 0;
                             if (allTrades.Count() > 0)
                             {
                                 var lastTrade = allTrades.FirstOrDefault(o => o.Trade.Direction == pos.CurrentDirection);
                                 if (lastTrade.NotIsNull())
                                 {
                                     Price = lastTrade.Trade.Price;
                                 }
                             }
                             if (Price == 0)
                             {
                                 Price = sec.LastPrice;
                             }
                             var tiks      = objControl.Tiks;
                             var stopOrder = new StopOrder()
                             {
                                 Sec        = sec,
                                 Price      = Price,
                                 ClientCode = objControl.Comment,
                                 Comment    = Define.STOP_LOSS,
                                 Volume     = volume,
                                 DateExpiry = DateMarket.ExtractDateTime(DateTime.Now.AddDays(10))
                             };
                             if (pos.IsBuy())
                             {
                                 stopOrder.Direction      = OrderDirection.Sell;
                                 stopOrder.ConditionPrice = Price - sec.MinPriceStep * tiks;
                                 stopOrder.Price          = stopOrder.ConditionPrice - sec.MinPriceStep * 10;
                             }
                             else if (pos.IsSell())
                             {
                                 stopOrder.Direction      = OrderDirection.Buy;
                                 stopOrder.ConditionPrice = Price + sec.MinPriceStep * tiks;
                                 stopOrder.Price          = stopOrder.ConditionPrice + sec.MinPriceStep * 10;
                             }
                             Trader.CreateStopOrder(stopOrder, StopOrderType.StopLimit);
                             AutoSLLog("Create order: " + sec.ToString() + " " +
                                       (stopOrder.IsBuy() ? "B" : "S") +
                                       " " + stopOrder.ConditionPrice);
                         }
                     }
                 }
             }
         }
     });
 }
Пример #8
0
        protected void SendStopOrder(PanelControl panel, bool autoStop = false, bool showInfo = false)
        {
            if (autoStop)
            {
                if (panel.LastSendStopOrder > DateTime.Now.AddSeconds(-5))
                {
                    //Для избежания многократного выставления
                    return;
                }
            }
            var     pos      = Parent.Trader.Objects.tPositions.SearchFirst(p => p.Sec == panel.TrElement.Security);
            decimal stepStop = panel.TrElement.Security.Params.MinPriceStep * 20;
            int     volume   = pos.NotIsNull() ? pos.Data.CurrentNet : 0;

            if (volume < 0)
            {
                stepStop = stepStop * -1;
                volume   = volume * -1;
            }
            //Просмотр инфо по будущему стопу
            if (showInfo)
            {
                string text = "Инфо создаваемой стоп заявки:\n";
                text += "Позиций: " + pos.Data.CurrentNet + "\n\n";
                text += "Стоп цена: " + panel.PriceStop.Value + "\n";
                text += "Цена исполнения: " + (panel.PriceStop.Value - stepStop) + "\n";
                text += "Объем: " + volume + "\n";
                text += "Дата завершения: " + DateTime.Now.AddDays(1).ToShortDateString() + "\n";
                MessageBox.Show(text);
                return;
            }

            if (panel.PriceStop.Value == 0)
            {
                SetMessage("Некорректная цена стоп-ордера!");
                return;
            }
            if (volume == 0)
            {
                SetMessage("Не текущих позиций!");
                return;
            }
            var stopOrder = new StopOrder()
            {
                Sec            = panel.TrElement.Security,
                Price          = panel.PriceStop.Value - stepStop,
                Volume         = volume,
                Direction      = volume > 0 ? OrderDirection.Sell : OrderDirection.Buy,
                ConditionPrice = panel.PriceStop.Value,
                DateExpiry     = DateMarket.ExtractDateTime(DateTime.Now.AddDays(1)),
                Comment        = Define.STOP_LOSS
            };
            var lastPrice = panel.TrElement.Security.LastPrice;

            if (lastPrice > 0)
            {
                if (pos.IsBuy() && panel.PriceStop.Value > 0)
                {
                    stopOrder.Direction = OrderDirection.Sell;
                    if (panel.PriceStop.Value > lastPrice)
                    {
                        SetMessage("Не корректная цена стоп заявки! Необходимо указать цену ниже текущей.");
                        return;
                    }
                }
                if (pos.IsSell() && panel.PriceStop.Value > 0)
                {
                    stopOrder.Direction = OrderDirection.Buy;
                    if (panel.PriceStop.Value < lastPrice)
                    {
                        SetMessage("Не корректная цена стоп заявки! Необходимо указать цену выше текущей.");
                        return;
                    }
                }
            }

            MThread.InitThread(ThreadPriority.Normal, () =>
            {
                Qlog.CatchException(() =>
                {
                    Thread.Sleep(1000);
                    var countClosed = CancelAllStopOrders(panel);
                    Thread.Sleep(1000);
                    Parent.Trader.CreateStopOrder(stopOrder, StopOrderType.StopLimit);
                    addSignalByStop(stopOrder);
                });
            });
            panel.LastSendStopOrder = DateTime.Now;
        }
Пример #9
0
        /// <summary>
        /// Проверка и выставление стоп-ордера
        /// </summary>
        /// <param name="Price"></param>
        /// <param name="volume"></param>
        public void SetStopOrder(decimal Price, int volume, bool checkSet = true)
        {
            if (Price == 0)
            {
                ShowTransReply("Некорректная цена стоп-ордера!");
                return;
            }
            if (volume == 0)
            {
                ShowTransReply("Не текущих позиций!");
                return;
            }
            decimal stepStop = Securities.Params.MinPriceStep * 20;

            if (volume < 0)
            {
                stepStop = stepStop * -1;
                volume   = volume * -1;
            }
            var stopOrder = new StopOrder()
            {
                Sec            = Securities,
                Price          = Price - stepStop,
                Volume         = volume,
                ConditionPrice = Price,
                DateExpiry     = DateMarket.ExtractDateTime(dateTimePickerStopOrder.Value),
                ClientCode     = ClientCode.Value,
                Comment        = Define.STOP_LOSS
            };

            if (this.Position.IsBuy() && Price > 0)
            {
                stopOrder.Direction = OrderDirection.Sell;
                if (Price > Securities.LastPrice)
                {
                    ShowTransReply("Не корректная цена стоп заявки! Необходимо указать цену ниже текущей.");
                    return;
                }
            }
            if (this.Position.IsSell() && Price > 0)
            {
                stopOrder.Direction = OrderDirection.Buy;
                if (Price < Securities.LastPrice)
                {
                    ShowTransReply("Не корректная цена стоп заявки! Необходимо указать цену выше текущей.");
                    return;
                }
            }
            //Устанавливаем в форму значение стоп цены
            this.GuiAsync(() =>
            {
                numericUpDownStopPrice.Value = Price;
            });
            MThread.InitThread(() =>
            {
                var cancelOrders = this.Trader.Objects.tStopOrders.SearchAll(so => so.Sec == Securities &&
                                                                             so.IsActive() && so.Comment.Contains(Define.STOP_LOSS));
                if (cancelOrders.NotIsNull())
                {
                    this.Trader.CancelListStopOrders(cancelOrders);
                }
                Thread.Sleep(500);
                this.Trader.CreateStopOrder(stopOrder, StopOrderType.StopLimit);
                if (checkSet)
                {
                    Thread.Sleep(10000);
                    var allStopOrders = this.Trader.Objects.tStopOrders.SearchAll(so => so.Sec == Securities && so.IsActive());
                    if (allStopOrders.NotIsNull())
                    {
                        if (allStopOrders.Count() == 0)
                        {
                            this.SetStopOrder(Price, volume, false);
                        }
                    }
                }
            });
        }