private TradeAction MacdAndRsi(TradingPairInfo tradingPairInfo) { var mcad = tradingPairInfo.macd; decimal rsi = tradingPairInfo.rsi.Value; var srsi = tradingPairInfo.stochRsi; var Sma5 = tradingPairInfo.Ema[5].Value; var Sma20 = tradingPairInfo.Ema[20].Value; var Sma100 = tradingPairInfo.Ema[20].Value; var Gsma20 = tradingPairInfo.Gsma[20].Value; if (mcad.Value > 0 && rsi < 50 && srsi.Value > 0 && Sma5 > Sma20 && Gsma20 > 0) { return(TradeAction.Buy); } if (((Sma5 - Sma20) / Sma20) >= 40m) { return(TradeAction.Sell); } if (mcad.Value <= 0 && srsi.Value < 0 && rsi > 80) { return(TradeAction.Sell); } return(TradeAction.Wait); }
public void BaseAmountAndPrice() { // arrange var tradeSettings = new TradeSettings { CounterAmount = 10, BuyUnderPriceMargin = 1, BaseAmountSavingsRate = 5, SellPriceRate = 10 }; var ticker = new Ticker { Last = 9500 }; var pairInfo = new TradingPairInfo { BaseDecimals = 8, CounterDecimals = 2 }; // act var baseAmount = tradeSettings.GetBuyBaseAmount(ticker, pairInfo); var basePrice = tradeSettings.GetBuyBasePrice(ticker, pairInfo); var sellBaseAmount = tradeSettings.GetSellBaseAmount(ticker, pairInfo); var sellBasePrice = tradeSettings.GetSellBasePrice(ticker, pairInfo); // assert Assert.AreEqual(baseAmount, 0.00106326M); Assert.AreEqual(basePrice, 9405M); Assert.AreEqual(sellBaseAmount, 0.001010097M); Assert.AreEqual(sellBasePrice, 10345.5M); }
public IAlgorthmResults Evaulate(string ticker, TradingPairInfo tradingPairInfo) { var result = new AlgorthmResults(ticker); result.LastPrice = tradingPairInfo.CurrentPrice; result.CloseDateTime = tradingPairInfo.CloseDateTime; result.Candlestick = tradingPairInfo._candleSticks.First(); switch (_request.Algorthm) { case TradingAlgorthm.SimpleSMA: result.Action = SimpleSMA(tradingPairInfo); break; case TradingAlgorthm.LongShochRsi: result.Action = LongShochRsi(tradingPairInfo); break; case TradingAlgorthm.Macd: result.Action = Macd(tradingPairInfo); break; default: result.Action = TradeAction.Sell; break; } //result.Action= sma5 > sma10 ? TradeAction.Buy : TradeAction.Sell; return(result); }
private TradeAction SimpleSMA(TradingPairInfo tradingPairInfo) { var sma5 = tradingPairInfo.Ema[5].Value; var sma10 = tradingPairInfo.Ema[15].Value; var sma40 = tradingPairInfo.Ema[80].Value; if (sma5 > sma10 && tradingPairInfo.CurrentPrice > sma40) { return(TradeAction.Buy); } return(TradeAction.Wait); }
private TradeAction LongShochRsi(TradingPairInfo tradingPairInfo) { var k = tradingPairInfo.stochRsi.KValue; var d = tradingPairInfo.stochRsi.DValue; if (k > d) { return(TradeAction.Buy); } else { return(TradeAction.Sell); } }
private TradeAction Macd(TradingPairInfo tradingPairInfo) { var mcad = tradingPairInfo.macd; var Sma100 = tradingPairInfo.Sma[100].Value; var Sma100gradient = tradingPairInfo.Sma[100].averageGradient; var currentPrice = tradingPairInfo.CurrentPrice; if (mcad.Value > 0 && Sma100 > currentPrice && Sma100gradient > 0) { return(TradeAction.Buy); } //if (mcad.Value < 0 && Sma100 < currentPrice) // return TradeAction.Sell; return(TradeAction.Wait); }
internal void AddNewOrderToDb(ExchangeOrder order, Ticker ticker, TradeSettings tradeSettings, TradingPairInfo pairInfo) { _orderRepository.Add(new Order { BuyId = order.Id, CurrencyPairId = GetCurrencyPairId(order.PairCode), //CurrencyPair = _currencyPairRepository.First(p => p.PairCode == order.PairCode), //todo: check with concrete repository BuyAmount = order.Amount, BuyPrice = order.Price, SellAmount = tradeSettings.GetSellBaseAmount(ticker, pairInfo), SellPrice = tradeSettings.GetSellBasePrice(ticker, pairInfo) }); _orderRepository.Save(); }
public decimal GetSellBasePrice(Ticker ticker, TradingPairInfo pairInfo) { var buyPrice = GetBuyBasePrice(ticker, pairInfo); return(Math.Round(buyPrice * (1 + SellPriceRate / 100), pairInfo.CounterDecimals)); }
public decimal GetSellBaseAmount(Ticker ticker, TradingPairInfo pairInfo) { var buyAmount = GetBuyBaseAmount(ticker, pairInfo); return(buyAmount - buyAmount * (BaseAmountSavingsRate / 100)); }
public decimal GetBuyBasePrice(Ticker ticker, TradingPairInfo pairInfo) { return(Math.Round(ticker.Last * (1 - BuyUnderPriceMargin / 100), pairInfo.CounterDecimals)); }
public decimal GetBuyBaseAmount(Ticker ticker, TradingPairInfo pairInfo) { return(Math.Round(CounterAmount / GetBuyBasePrice(ticker, pairInfo), pairInfo.BaseDecimals)); }