コード例 #1
0
 private void ControlEvent()
 {
     //Контроль расхождения
     if (numericUpDownDiffPriceControll.Value < DataArb.diffPrice &&
         DataArb.diffPrice > 0 &&
         numericUpDownDiffPriceControll.Value > 0 &&
         numericUpDownFutPos.Value > 0 &&
         checkBoxEnableControl.Checked
         )
     {
         CountEvent++;
         if (CountEvent >= 3)
         {
             var now = DateTime.Now;
             if (LastSignal.AddMinutes(PERIOD_SIGNAL) < now)
             {
                 LastSignal = now;
                 if (checkBoxEnableTrade.Enabled && DataArb.baseCurPos == 0 && DataArb.futCurPos == 0)
                 {
                     activeTrade();
                 }
                 Form_MessageSignal.Show("Arbitration " + SecFut.ToString() + " <=> " + SecBase.ToString()
                                         + " diff: " + DataArb.diffPrice.ToString(), SecFut.ToString(), true);
             }
         }
     }
     else
     {
         //Если за 3 такта не сохранилось расхождение, то сбрасываем
         CountEvent = 0;
     }
 }
コード例 #2
0
        /// <summary> Переодически обновитель данных </summary>
        public void UpdaterDataFirst(DispatcherTimer timer)
        {
            if (ListPanels.Count == 0 || Parent.CheckKliring())
            {
                return;
            }
            var stopOrders = Parent.Trader.Objects.tStopOrders.SearchAll(so =>
                                                                         so.IsActive() && so.Comment.Contains(Define.STOP_LOSS));

            foreach (var pan in ListPanels)
            {
                pan.LabelPosition.Text = "0";
                if (pan.TrElement.NotIsNull() && pan.Position.NotIsNull())
                {
                    decimal StopLossValue = 0;
                    pan.LabelPosition.Text = pan.Position.Data.CurrentNet.ToString();
                    var countPos = pan.Position.CurrentVolume;
                    if (pan.TrElement.Security.LastPrice > 0)
                    {
                        if (stopOrders.Count() > 0)
                        {
                            var stOrdSec = stopOrders.Where(o => o.Sec == pan.TrElement.Security);
                            if (stOrdSec.Count() == 1)
                            {
                                if (countPos != 0)
                                {
                                    var lastOrd = stOrdSec.Last();
                                    //Расчет предпологаемого убытка
                                    decimal StopValue = lastOrd.ConditionPrice - pan.TrElement.Security.LastPrice;
                                    StopValue = StopValue < 0 ? StopValue * -1 : StopValue;
                                    StopValue = (StopValue / pan.TrElement.Security.Params.MinPriceStep) *
                                                (pan.TrElement.Security.Params.StepPrice == 0 ? pan.TrElement.Security.Params.MinPriceStep : pan.TrElement.Security.Params.StepPrice);
                                    StopLossValue = Math.Round(countPos * StopValue, 2);
                                }
                                else
                                {
                                    //если позиция ликвидирована, а стоп-заявки остались, то снимаем стопы
                                    Parent.Trader.CancelAllStopOrder(pan.TrElement.Security);
                                }
                            }
                            else
                            {
                                //Перевыставляем стоп если больше одной заявки
                                if (stOrdSec.Count() > 1)
                                {
                                    //SendStopOrder(pan, true);
                                    Form_MessageSignal.Show("Double stop order " + pan.TrElement.Security,
                                                            pan.TrElement.Security.ToString(), true);
                                    CancelAllStopOrders(pan);
                                }
                            }
                        }
                    }
                    pan.LabelStopValue.BackColor = Color.Transparent;
                    if (StopLossValue != 0)
                    {
                        pan.LabelStopValue.Text = "-" + StopLossValue.ToString();
                    }
                    else
                    {
                        //Помечаем цветом, что надо выставить стоп
                        pan.LabelStopValue.Text = "0";
                        if (countPos != 0)
                        {
                            pan.LabelStopValue.BackColor = Color.Red;
                        }
                    }
                }
            }
        }