Exemplo n.º 1
0
        public override void AddTick(SymbolTick si)
        {
            if (!AlgoUpdateTick(si))
            {
                PostProcAddTick();
                return;
            }

            // Get call-put tick for mock, for live implement later
            if (AlgoParams.IsReplayMode)
            {
                bool isBuy = S.TotalBuyTrades < S.TotalSellTrades;
                if (S.TotalBuyTrades != S.TotalSellTrades)
                {
                    var ordCall = GetPairedSquareOffOrder(isBuy ? Position.BUY : Position.SELL, DerivativePositionType.Call, false);
                    if (ordCall != null)
                    {
                        var strkPrc = (int)ordCall.OrderTick.Di.StrikePriceDouble;
                        // get tick from tick store
                        S.TickCall = StockUtils.GetNearestOptionTick(S.Ticks.CurrTick, S.TicksCall, ref strkPrc, S.TickCall);
                    }
                    else
                    {
                        S.TickCall = null;
                    }

                    var ordPut = GetPairedSquareOffOrder(isBuy ? Position.BUY : Position.SELL, DerivativePositionType.Put, false);
                    if (ordPut != null)
                    {
                        var strkPrc = (int)ordPut.OrderTick.Di.StrikePriceDouble;
                        // get tick from tick store
                        S.TickPut = StockUtils.GetNearestOptionTick(S.Ticks.CurrTick, S.TicksPut, ref strkPrc, S.TickPut);
                    }
                    else
                    {
                        S.TickPut = null;
                    }
                }
            }

            // Remotely called squareoff
            if (S.IsSquareoffAtProfit)
            {
                if (S.TotalBuyTrades != S.TotalSellTrades)
                {
                    var profitPerc = GetSquareOffProfitPerc();
                    if (profitPerc > 0.05)
                    {
                        var orderPlaceCode = TryImmediateSquareOff(false, false, true);
                        if (orderPlaceCode == OrderPlaceAlgoCode.SUCCESS || orderPlaceCode != OrderPlaceAlgoCode.RETRY)
                        {
                            S.IsSquareoffAtProfit = false;
                            if (S.IsPauseAfterSquareOffAtProfit)
                            {
                                Pause(false);
                                S.IsPauseAfterSquareOffAtProfit = false;
                            }
                        }
                    }
                }
            }

            if (AlgoParams.AlgoId >= 150)
            {
                Scalper20(1, 0.5);
            }

            else if (AlgoParams.AlgoId < 20)
            {
                Scalper10();
            }
            else if (AlgoParams.AlgoId < 30)
            {
                Scalper10(true, true);
            }
            else if (AlgoParams.AlgoId < 40)
            {
                Scalper20(1, 0.5);
            }
            else if (AlgoParams.AlgoId < 50)
            {
                Scalper20(0.5, 0.5);
            }
            else if (AlgoParams.AlgoId < 100)
            {
                Scalper20(0.5, 0.5, false, true);
            }
            else if (AlgoParams.AlgoId > 115 && AlgoParams.AlgoId < 120)
            {
                Scalper116();
            }
            else
            {
                Scalper20(0.5, 0.4, true);
            }

            PostProcAddTick();
        }