Показаны сообщения с ярлыком Quik. Показать все сообщения
Показаны сообщения с ярлыком Quik. Показать все сообщения

вторник, 27 августа 2019 г.

Process in TradeTerminals on the ProcessTask

ProcessTask:
public sealed partial class QuikTradeTerminal
    {
        public bool IsProcessTaskInUse { get; set; }
        [XmlIgnore]
        public ProcessTask<IEventArgs1> ProcessTask { get; private set; }
        private void SetupProcessTask()
        {
            if (!IsProcessTaskInUse)
            {
                Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY, ParentName, Name,
                MethodBase.GetCurrentMethod().Name, "ProcessTask Will NOT BE USED",
                ToString());
                return;
            }
            ProcessTask = new ProcessTask<IEventArgs1>
            {
                Parent = this,
                TimeInterval = 1000,
                IsEveryItemPushProcessing = true,
                ItemProcessingAction = ItemProcessingAction,
                IdlingCycleAction = ProcessTaskIdleAction
            };
            ProcessTask.Init();

            Evlm2(EvlResult.SUCCESS, EvlSubject.TECHNOLOGY, ParentName, Name,

                 MethodBase.GetCurrentMethod().Name, "ProcessTask IS USED NOW",
                 ProcessTask?.ToString());
        }
        public void Start()
        {
            SetupProcessTask();

            if(IsProcessTaskInUse)

                ProcessTask?.Start();
        }
        public void Stop()
        {
            if (IsProcessTaskInUse)
                ProcessTask?.Stop();
        }
        // ************************************************
        // ProcessTask Actions
        private void ItemProcessingAction(IEventArgs1 args)
        {
            try
            {
                args.ProcessingAction(args);
            }
            catch (Exception e)
            {
                SendException(e);
            }
        }
        // AdditionalWorks in IdlingCycleAction
        private void ProcessTaskIdleAction()
        {
            TradeResolveProcess2();
            OrderResolveProcess();
        }
    }

Process in TradeTerminal to linear Execution:
1. SendTransaction From Queue:

        public void SendTransaction(IQuikTransaction t)

        {
            if (t == null)
                return;

            if (IsProcessTaskInUse)

            {
                var eargs = new EventArgs1
                {
                    Process = "QuikTransactionsProcess",
                    Category = "QuikTransactions",
                    Entity = "TransactionSend",
                    Operation = "AddOrUpdate",
                    Object = t,
                    ProcessingAction = SendTransactionFromQueue
                };
                ProcessTask?.EnQueue(eargs);
            }
            else
                TransactionQueue.Push(t);
        }
2. Clear Transactions From Queue when Terminal is NOT_CONNECTED

public void ClearTransactionFromQueue()

        {
            if (IsProcessTaskInUse)
            {
                var eargs = new EventArgs1
                {
                    Process = "QuikTransactionsProcess",
                    Category = "QuikTransactions",
                    Entity = "TransactionClear",
                    Operation = "AddOrUpdate",
                    ProcessingAction = ClearOrderTransactionQueue3
                };
                ProcessTask?.EnQueue(eargs);
            }
            else
                ClearOrderTransactionQueue3(null);
        }

понедельник, 22 июля 2019 г.

TradeTerminalQuik Restore PocketOrder

Every Second from Strategy
public void MainBase()
        {         
            RemoveFilledOrders();
            SetPocketOrder();
            Main();
        }

private void RemoveFilledOrders()
        {         
            foreach (IOrder3 o in ClosedOrders)
            {
                ActiveOrderCollection.Remove(o);
            }
            // Remove All with TimeOut
            foreach (var o in ActiveOrderCollection.Items.Where(o=>o.IsRegisteredTimeOutExpired))
            {
                ActiveOrderCollection.Remove(o);
                Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY, StrategyTimeIntTickerString,
                    o.ShortInfo, "Remove(RegisteredTimeOutExpired)", o.ShortDescription,o.ToString());
            }
        }
Z007 Every Second
public override void SetPocketOrder()
        {
            if (PocketOrder == null)
                return;
            if (ActiveOrderCollection.Items.Any())
            {
                Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY, StrategyTimeIntTickerString, "Not Alowed Pocket" + PocketOrder.ShortInfo, PocketOrder.ShortDescription, "Not Alowed Due to Orders Exist", PocketOrder.ToString());
                foreach (var o in ActiveOrderCollection.Items)
                {
                    Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY, StrategyTimeIntTickerString, "Extra" + o.ShortInfo, o.ShortDescription, o.ToString(), "");
                }
                return;
            }

            ActiveOrderCollection.RegisterOrder(PocketOrder);
            TradeTerminal.SetLimitOrder(PocketOrder);

            Evlm2(EvlResult.SUCCESS, EvlSubject.TECHNOLOGY, StrategyTimeIntTickerString, "Set Pocket"+PocketOrder.ShortInfo, PocketOrder.ShortDescription, PocketOrder.ToString(), "");

            PocketOrder = null;
        }

From Z007 EveryBar

RemoveOrdersRegistered();

            KillAllOrders2();

            #region ValidOrdersSoft  
            // ValidSoft Order
            //public bool IsValidSoft => Status == OrderStatusEnum.Activated ||
            //                       Status == OrderStatusEnum.Sended ||
            //                       Status == OrderStatusEnum.Registered ||
            //                       Status == OrderStatusEnum.Confirmed ||
            //                       Status == OrderStatusEnum.PartlyFilled ||
            //                       Status == OrderStatusEnum.PendingToActivate;
            #endregion
            if (ValidOrdersSoft.Any())
            {
                foreach (var ord in ValidOrdersSoft.ToList())
                {
                    Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY,
                        StrategyTimeIntTickerString, "Extra" + ord.ShortInfo, ord.ShortDescription,
                        "SetOrder(Active Or Pending Orders Detected)", ord.ToString());
                }

                 PocketOrder = ActiveOrderCollection
                                .CreateOrder(this, operation, OrderTypeEnum.Limit, 0, _currentLimitPrice, contract, "");

                Evlm2(EvlResult.WARNING, EvlSubject.TECHNOLOGY, StrategyTimeIntTickerString,
                        "Try to Set Pocket" + PocketOrder.ShortInfo , PocketOrder.ShortDescription,
                         PocketOrder.ToString(), "");


                return;


protected void KillAllOrders2()
        {
            RemoveFilledOrders();

            try
            {
                foreach (IOrder3 o in ActiveOrdersSoft)
                {
                    TradeContext.Evlm(EvlResult.INFO, EvlSubject.TECHNOLOGY,
                        StrategyTimeIntTickerString, o.ShortInfo, o.ShortDescription,
                        "Try To KILL ORDER", o.ToString());
                    if (o.IsLimit)
                    {
                        TradeTerminal.KillLimitOrder(o);
                    }
                    else if (o.IsStopLimit)
                        TradeTerminal.KillStopOrder(Ticker.ClassCode, Ticker.Code, o.Number);
                }
            }
            catch (Exception e)
            {
                SendExceptionMessage3(StrategyTickerString, "Strategy.KillAllOrder2()", "", "", e);
                // throw;
            }
        }



пятница, 25 апреля 2014 г.

Quik. Dde

Необходимо фильтровать нули и прочую грязь, при получении котировок из Quik по DDE.

На картинке синими прямоугольниками выделены нули.