понедельник, 23 сентября 2019 г.

воскресенье, 8 сентября 2019 г.

GS.Trade.TradeTerminals

Updates in Strategies

SendTransactions,
ClearTransactions
1. OrderQueue2.cs
Clear All Queue

(Rejected only Transaction with SetOrder.
And Remove this Orders)

TransactionsReply:
File: QuikTradeTerminal.cs
Last Handler: TransactionReplyResolve(IEventArgs1 args)

Requirements Specification in Brief
1. NotConnecton:
{
TradeTerminal:  Clear All TransactionQueue
Strategy: ActiveOrdersCollection:
1. Remove Orders.Where(o=>o.TransactionOperation == SetOrder)
if(TransactionStatus == NotConnected)
OrderStatus = REJECTED and then will be REMOVED
Natural Delae after NotConnected: After TimeIntTime Strategy will Register new Order in NEW MARKET CONDITIONS AFTER CONNECTION RESTORE
2. Remain NoSended.Orders.ActiveOrders.Where(o=>o.TransactionOperation == CancelOrder);
ReTryToCancelActiveOrders in MainBase Cycle.
3.ReSend Order Registered only after Cancel all Previouse Orders.
After NotConnected need new Order in new Market conditions.
}

MainBase()
{
            EventHub?.DeQueueProcess();
            // Filled, Canceled, Rejected, NotSent
            RemoveClosedOrders();
            ReTryToCancelActiveOrders();
            RemoveOrdersSendedTimeOut(DateTime.Now) = 5 minutes;

            Main();
}

Total:
1. Удалены все Filled, Cancel, NosSended( Rejected) RemoveClosedOrders();
2. Все Активные ордера, требующие отмены, если не было Коннекта,
пытаются в Main ReTryToCancelActiveOrders();

19.09.15
           EventHub?.DeQueueProcess();
            // Remove Filled, Canceled, Rejected, NotSent
            RemoveClosedOrders();
            // Remove OrdersRegisteredReadyToUse When No Connection
            RemoveRegisteredWhenNoConnection(string.Empty);
            RemoveOrdersSendedTimeOut(DateTime.Now);
            // ReTry Cancel ActiveOrdersSoftReadyToUse which Not Seneded
            ReTryToCancelActiveOrders();
            // ReTry SetOrder2 for RegisteredReadyToUse in AciveOrderCollection (PocketOrder Implementation)
            TryToSetOrderRegisteredPending();




вторник, 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;
            }
        }



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

Strategy 212

case 212:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = Ticker.ToMinMove(Ma, +1);                           
                                boo = true;
                                }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = Ticker.ToMinMove(Ma, -1);                           
                                boo = true;
                            }
                            break;
                        // Flat + Impulse
                        case 2120:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = IsFlat
                                    ? Ticker.ToMinMove(Ma, +1)
                                    : Ticker.ToMinMove((Ma + High) / 2.0d, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = IsFlat
                                    ? Ticker.ToMinMove(Ma, -1)
                                    : Ticker.ToMinMove((Ma + Low) / 2.0d, -1);
                                boo = true;
                            }
                            break;
                        // Flat + Impulse
                        case 2123:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = IsImpulse
                                    ? Ticker.ToMinMove(Ma, +1)
                                    : Ticker.ToMinMove((Ma + High) / 2.0d, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = IsFlat
                                    ? Ticker.ToMinMove(Ma, -1)
                                    : Ticker.ToMinMove((Ma + Low) / 2.0d, -1);
                                boo = true;
                            }
                            break;
                        // ATR
                        case 2124:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = ((Atr2)Atr).IsSlowHigher
                                    ? Ticker.ToMinMove(Ma, +1)
                                    : Ticker.ToMinMove((Ma + High) / 2.0d, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = ((Atr2)Atr).IsSlowHigher
                                    ? Ticker.ToMinMove(Ma, -1)
                                    : Ticker.ToMinMove((Ma + Low) / 2.0d, -1);
                                boo = true;
                            }
                            break;
                        // ATR
                        case 2125:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = ((Atr2)Atr).IsFastHigher
                                    ? Ticker.ToMinMove(Ma, +1)
                                    : Ticker.ToMinMove((Ma + High) / 2.0d, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = ((Atr2)Atr).IsFastHigher
                                    ? Ticker.ToMinMove(Ma, -1)
                                    : Ticker.ToMinMove((Ma + Low) / 2.0d, -1);
                                boo = true;
                            }
                            break;

                        // Impulse
                        case 2121:
                            if (operation > 0)
                            {
                                comment = "Buy (MA+High)/2";
                                price = Ticker.ToMinMove((Ma + High) / 2.0d, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell (Ma+Low)/2";
                                price = Ticker.ToMinMove((Ma + Low) / 2.0d, -1);
                                boo = true;
                            }
                            break;
                        // Flat
                        case 2122:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = Ticker.ToMinMove(Ma, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = Ticker.ToMinMove(Ma, -1);
                                boo = true;
                            }
                            break;
                        case 221:
                            if (operation > 0)
                            {
                                comment = "Buy (MA+Low)/2";
                                price = Ticker.ToMinMove( (Ma + Low)/2.0d, +1);                   
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell (Ma+Hihg)/2";
                                price = Ticker.ToMinMove( (Ma + High)/2.0d, -1);
                                boo = true;
                            }
                            break;
                        case 19:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = Ticker.ToMinMove(Ma, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = Ticker.ToMinMove(Ma, -1);
                                boo = true;
                            }
                            break;
                        default:
                            if (operation > 0)
                            {
                                comment = "Buy MA";
                                price = Ticker.ToMinMove(Ma, +1);
                                boo = true;
                            }
                            else if (operation < 0)
                            {
                                comment = "Sell Ma";
                                price = Ticker.ToMinMove(Ma, -1);
                                boo = true;
                            }
                            break;
                    }