using BinanceExchange.API.Models.Response; using Newtonsoft.Json; using SignalsTest; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SignalsTest { public class TAReport { public string pair; public int interval; [JsonIgnore] public KlineCandleStickResponse candle; public decimal Close; public decimal Open; public decimal High; public decimal Low; public DateTime CloseTime; public decimal SMA20; public decimal SMA50; public decimal SMA200; public decimal EMA7, EMA25, EMA99; public decimal MACD = 0; public decimal EMACD = 0; public decimal ATR14; public decimal ATR10; public decimal AVGDiff = 0; public decimal VwapWeekly=0; public decimal VwapMonthly = 0; public decimal STHigh; public decimal STLow; public decimal ST; public decimal RSI = 0; public decimal RSI50 = 0; public int TWS =0; public int TBC = 0; public bool isHammer,isInverseHammer = false; public bool isBullFlag =false; public decimal Stochastic = 0; public decimal StochasticK3 = 0; public float RelativeVolumeIndex = 0; public bool isVwapShort = false; public bool isVwapLong = false; public bool STUp = false; public bool TGOR=false; public static TAReport Generate(string _pair, int _interval, List response, int index, List history) { TAReport report = new TAReport(); report.pair = _pair; report.interval = _interval; report.candle = response[index]; report.Open = response[index].Open; report.Close = response[index].Close; report.High = response[index].High; report.Low = response[index].Low; report.CloseTime = response[index].CloseTime; // foreach(int sma in m_SMA) // { // report.SMAs.Add(sma, Indicators.getSMA(response, index, sma)); // } // foreach (int ema in m_EMA) // { // report.SMAs.Add(ema, Indicators.getEMA(response, index, 0, ema)); // } report.SMA20 = Indicators.getSMA(response, index, 20); report.SMA50 = Indicators.getSMA(response, index, 50); report.SMA200 = Indicators.getSMA(response, index, 200); report.EMA7 = Indicators.getEMA(response, index, 0, 7); report.EMA25 = Indicators.getEMA(response, index, 0, 25); report.EMA99 = Indicators.getEMA(response, index, 0, 99); report.MACD = Indicators.getMACD(response, 12, 26, index); report.RSI = Indicators.getRSI(response, index); report.RSI50 = Indicators.getRSI(response, index, 50); if (history == null) { return report; } //MACD Signal List MACDHistory = new List(); List ATR10History = new List(); List ATR14History = new List(); foreach (TAReport item in history) { MACDHistory.Add(item.MACD); ATR10History.Add(item.ATR10); ATR14History.Add(item.ATR14); } report.EMACD = Indicators.getEMA(MACDHistory, index, 0, 9); report.ATR10 = Indicators.getATR(response, 10, index, ATR10History); report.ATR14 = Indicators.getATR(response, 14, index, ATR14History); report.VwapWeekly = Indicators.getVwapWeekly(response, index); report.VwapMonthly = Indicators.getVwapMonthly(response, index); // SuperTrend Multiplier decimal multiplier = 3; // Basic Upper and Lower Bands decimal basicUpperBand = (response[index].High + response[index].Low) / 2 + multiplier * report.ATR14; decimal basicLowerBand = (response[index].High + response[index].Low) / 2 - multiplier * report.ATR10; // Initialize Final Upper and Lower Bands decimal finalUpperBand = basicUpperBand; decimal finalLowerBand = basicLowerBand; // Adjust Final Upper and Lower Bands based on previous history if (index > 0) { finalUpperBand = (history[index - 1].Close <= history[index - 1].STHigh) ? Math.Min(basicUpperBand, history[index - 1].STHigh) : basicUpperBand; finalLowerBand = (history[index - 1].Close >= history[index - 1].STLow) ? Math.Max(basicLowerBand, history[index - 1].STLow) : basicLowerBand; } bool currentTrendUp = true; if (index > 0) { if (history[index - 1].STUp) // If the previous trend was up { currentTrendUp = (response[index].Close > finalLowerBand); // Price > Final Lower Band => Stay up } else // If the previous trend was down { currentTrendUp = (response[index].Close >= finalUpperBand); // Price >= Final Upper Band => Flip to up } } // Assign SuperTrend values to the report report.STHigh = finalUpperBand; report.STLow = finalLowerBand; report.STUp = currentTrendUp; report.ST = currentTrendUp ? finalLowerBand : finalUpperBand; report.Stochastic = Indicators.getStochastic(response, index); report.StochasticK3 = Indicators.getStochasticMA(response, index); report.TGOR= Patterns.GetTGOR(response, index); report.TWS = Patterns.GetThreeWhiteSoldiers(response,index); report.TBC = Patterns.GetThreeBlackCrows(response, index); report.isHammer = Patterns.isHammer(response[index]); report.isInverseHammer = Patterns.isInverseHammer(response[index]); return report; } } } public static class CustomExtensions { public static string toJson(this TAReport report) { return JsonConvert.SerializeObject(report, Formatting.Indented); } }