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); }
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); }