Пример #1
0
        private double GetSignalFileLimitPrice(FuturesContract futuresContract, OrderDetails orderDetails, SignalFile signalFile, Strategy strategy, Tuple <bool, bool, int> db)
        {
            double tick;
            double limitPrice = signalFile.LimitPrice;

            switch (strategy.Symbol)
            {
            case "QM":
                tick = FuturesContract.GetTickSize(futuresContract);
                decimal nearOf = 0.025M;

                //tick *= (signalFile.EMAAngle < 40 && signalFile.EMAAngle > -40) ? @params.crudeSpread : 4;
                tick *= (signalFile.Trend < 40) ? @params.crudeSpread : 4;

                if (orderDetails.BuyOrSell == "BUY")
                {
                    limitPrice -= tick;
                }
                else if (orderDetails.BuyOrSell == "SELL")
                {
                    limitPrice += tick;
                }

                decimal _limitPrice = Convert.ToDecimal(limitPrice);
                _limitPrice = Precision.UltimateRoundingFunction(_limitPrice, nearOf, 0.49M);
                limitPrice  = Convert.ToDouble(_limitPrice);

                return(limitPrice);

            case "MES":
                tick  = FuturesContract.GetTickSize(futuresContract);
                tick *= (signalFile.EMAAngle <40 && signalFile.EMAAngle> -40) ? @params.sp500Spread : @params.sp500Spread / 2;

                if (signalFile.Adx < 15)
                {
                    if (orderDetails.BuyOrSell == "BUY")
                    {
                        limitPrice -= tick;
                    }
                    else if (orderDetails.BuyOrSell == "SELL")
                    {
                        limitPrice += tick;
                    }
                }

                return(limitPrice);

            case "MGC":
                tick = FuturesContract.GetTickSize(futuresContract);

                if (signalFile.Adx < 15)
                {
                    tick *= 1;

                    if (orderDetails.BuyOrSell == "BUY")
                    {
                        limitPrice -= tick;
                        return(limitPrice);
                    }
                    else if (orderDetails.BuyOrSell == "SELL")
                    {
                        limitPrice += tick;
                        return(limitPrice);
                    }
                }
                else
                {
                    tick *= 2;

                    if (orderDetails.BuyOrSell == "BUY")
                    {
                        limitPrice += tick;
                        return(limitPrice);
                    }
                    else if (orderDetails.BuyOrSell == "SELL")
                    {
                        limitPrice -= tick;
                        return(limitPrice);
                    }
                }

                break;
            }
            return(limitPrice);
        }
Пример #2
0
        private double GetBrokerLimitPrice(FuturesContract futuresContract, OrderDetails orderDetails, Prices prices, Strategy strategy, Tuple <bool, bool, int> db, SignalFile signalFile)
        {
            double tick       = FuturesContract.GetTickSize(futuresContract);
            double limitPrice = 0;

            switch (strategy.Symbol)
            {
            case "QM":
                //tick *= (db.Item3 == 0 || db.Item3 != 0) ? @params.crudeSpread : 1;
                //if (signalFile.Macd == 1)
                //{
                //    tick *= (signalFile.Trend < 40 && orderDetails.BuyOrSell == "SELL") ? @params.crudeSpread : 4;
                //}
                //else if (signalFile.Macd == 2)
                //{
                //    tick *= (signalFile.Trend < 40 && orderDetails.BuyOrSell == "SELL") ? @params.crudeSpread : 3;
                //}
                //if (signalFile.Macd == -1)
                //{
                //    tick *= (signalFile.Trend < 40 && orderDetails.BuyOrSell == "BUY") ? @params.crudeSpread : 4;
                //}
                //else if (signalFile.Macd == -2)
                //{
                //    tick *= (signalFile.Trend < 40 && orderDetails.BuyOrSell == "BUY") ? @params.crudeSpread : 3;
                //}

                if (orderDetails.BuyOrSell == "BUY")
                {
                    //If Up trend than our bid is spread = 2 and offer is  @params.crudeSpread = 5
                    //tick *= (signalFile.EMAAngle < 40 && signalFile.EMAAngle > -40) ? @params.crudeSpread : 8;
                    tick *= (signalFile.Trend < 40) ? @params.crudeSpread : 4;

                    limitPrice  = Math.Min(prices.BidPrice, signalFile.LimitPrice);    //prices.BidPrice;
                    limitPrice -= tick;
                }
                else if (orderDetails.BuyOrSell == "SELL")
                {
                    //If Down trend than our offer is spread = 2 and out bid is @params.crudeSpread = 5
                    //tick *= (signalFile.EMAAngle < 40 && signalFile.EMAAngle > -40) ? @params.crudeSpread : 8;
                    tick *= (signalFile.Trend < 40) ? @params.crudeSpread : 4;

                    limitPrice  = Math.Max(prices.AskPrice, signalFile.LimitPrice);    //prices.AskPrice;
                    limitPrice += tick;
                }
                return(limitPrice);

            case "MES":
                //tick *= (db.Item3 == 0 || db.Item3 != 0) ? @params.sp500Spread : 1;
                //tick *= (signalFile.EMAAngle < 40 && signalFile.EMAAngle > -40) ? @params.sp500Spread : @params.sp500Spread ;
                tick *= (signalFile.Trend < 40) ? @params.sp500Spread : 5;

                if (orderDetails.BuyOrSell == "BUY")
                {
                    limitPrice  = Math.Min(prices.BidPrice, signalFile.LimitPrice);
                    limitPrice -= tick;
                }
                else if (orderDetails.BuyOrSell == "SELL")
                {
                    limitPrice  = Math.Max(prices.AskPrice, signalFile.LimitPrice);
                    limitPrice += tick;
                }
                return(limitPrice);
            }
            return(limitPrice);
        }