chat gpt 이상해서 내가 계산 함
This commit is contained in:
@@ -34,23 +34,11 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
/// false 는 구매 전, true는 판매 후
|
||||
/// </summary>
|
||||
private bool firstCloudFlag = true;
|
||||
public static double CalculateSMA(List<double> data, int index, int period = 72)
|
||||
{
|
||||
var result = 0.0;
|
||||
for(var i = 0; i <period; i++)
|
||||
result += data[index - i];
|
||||
|
||||
|
||||
return result / period;
|
||||
}
|
||||
|
||||
public bool Calculate(List<CandleData> candles, SMABandType type, string market,bool flag = false)
|
||||
public bool Calculate(List<CandleData> candles, SMABandType type, string market, bool flag = false)
|
||||
{
|
||||
if (market.Contains("BTC"))
|
||||
{
|
||||
rangeThresholdPercent = 0.3;
|
||||
}
|
||||
|
||||
|
||||
var close = candles.Select(t => t.Close).ToList();
|
||||
|
||||
var high = candles.Select(t => t.High).ToList();
|
||||
@@ -75,27 +63,27 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
double prevSma72 = CalculateSMA(close, i - 1);
|
||||
|
||||
// SMA4 관련
|
||||
double sma4 = Sma4(close, i);
|
||||
double prevSma4 = Sma4(close, i - 1);
|
||||
double prev2Sma4 = Sma4(close, i - 2);
|
||||
double prev3Sma4 = Sma4(close, i - 3);
|
||||
double sma4 = CalculateSMA(close, i, 4);
|
||||
double prevSma4 = CalculateSMA(close, i - 1, 4);
|
||||
double prev2Sma4 = CalculateSMA(close, i - 2, 4);
|
||||
double prev3Sma4 = CalculateSMA(close, i - 3, 4);
|
||||
|
||||
// 밴드 계산
|
||||
double sma4High = Highest(close, i, 12);
|
||||
double sma4Middle = SMA(close, i, 12);
|
||||
double sma4Low = Lowest(close, i, 12);
|
||||
double sma4High = Highest(close, i, 12, 4);
|
||||
double sma4Middle = CalculateSMA(close, i, 12);
|
||||
double sma4Low = Lowest(close, i, 12, 4);
|
||||
|
||||
double prevSma4High = Highest(close, i - 1, 12);
|
||||
double prevSma4Middle = SMA(close, i - 1, 12);
|
||||
double prevSma4Low = Lowest(close, i - 1, 12);
|
||||
double prevSma4High = Highest(close, i - 1, 12, 4);
|
||||
double prevSma4Middle = CalculateSMA(close, i - 1, 12);
|
||||
double prevSma4Low = Lowest(close, i - 1, 12, 4);
|
||||
|
||||
double prev2Sma4High = Highest(close, i - 2, 12);
|
||||
double prev2Sma4Low = Lowest(close, i - 2, 12);
|
||||
double prev2Sma4Middle = SMA(close, i - 2, 12);
|
||||
double prev2Sma4High = Highest(close, i - 2, 12, 4);
|
||||
double prev2Sma4Low = Lowest(close, i - 2, 12, 4);
|
||||
double prev2Sma4Middle = CalculateSMA(close, i - 2, 12);
|
||||
|
||||
double prev3Sma4High = Highest(close, i - 3, 12);
|
||||
double prev3Sma4Low = Lowest(close, i - 3, 12);
|
||||
double prev3Sma4Middle = SMA(close, i - 3, 12);
|
||||
double prev3Sma4High = Highest(close, i - 3, 12, 4);
|
||||
double prev3Sma4Low = Lowest(close, i - 3, 12, 4);
|
||||
double prev3Sma4Middle = CalculateSMA(close, i - 3, 12);
|
||||
|
||||
|
||||
var ichmok = GetIchimokuCloud(candles, i - 25);
|
||||
@@ -143,7 +131,7 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
}
|
||||
|
||||
else if (type == SMABandType.LongSell)
|
||||
{
|
||||
{
|
||||
return rawLongSell;
|
||||
}
|
||||
else if (type == SMABandType.ShortSell)
|
||||
@@ -156,46 +144,54 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
return false;
|
||||
}
|
||||
|
||||
private double Sma4(List<double> list, int index) =>
|
||||
Avg(list[index], list[index - 1], list[index - 2], list[index - 3]);
|
||||
|
||||
private double Avg(params double[] values) =>
|
||||
values.Average();
|
||||
|
||||
private double SMA(List<double> source, int currentIndex, int period)
|
||||
public static double CalculateSMA(List<double> data, int index, int period = 72)
|
||||
{
|
||||
return Enumerable.Range(currentIndex - period + 1, period)
|
||||
.Select(i => Sma4(source, i))
|
||||
.Average();
|
||||
var result = 0.0;
|
||||
for (var i = 0; i < period; i++)
|
||||
result += data[index - i];
|
||||
|
||||
|
||||
return result / period;
|
||||
}
|
||||
|
||||
private double Highest(List<double> source, int currentIndex, int period)
|
||||
private List<double> GetAvgList(List<double> source, int index, int period, int num)
|
||||
{
|
||||
return Enumerable.Range(currentIndex - period + 1, period)
|
||||
.Select(i => Sma4(source, i))
|
||||
.Max();
|
||||
var list = new List<double>();
|
||||
|
||||
for (var i = 0; i < period; i++)
|
||||
{
|
||||
list.Add(CalculateSMA(source, index - i, num));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private double Lowest(List<double> source, int currentIndex, int period)
|
||||
private double Highest(List<double> source, int index, int period, int num)
|
||||
{
|
||||
return Enumerable.Range(currentIndex - period + 1, period)
|
||||
.Select(i => Sma4(source, i))
|
||||
.Min();
|
||||
|
||||
return GetAvgList(source, index, period, 4).Max();
|
||||
|
||||
}
|
||||
|
||||
private double Lowest(List<double> source, int index, int period, int num)
|
||||
{
|
||||
return GetAvgList(source, index, period, 4).Min();
|
||||
}
|
||||
|
||||
private bool IsSideways(List<double> high, List<double> low, int index, bool type)
|
||||
{
|
||||
double highestHigh = high.Skip(index - rangeLookback).Take(rangeLookback + 1).Max();
|
||||
double lowestLow = low.Skip(index - rangeLookback).Take(rangeLookback + 1).Min();
|
||||
|
||||
// long
|
||||
if (type)
|
||||
{
|
||||
{
|
||||
double range = high[index] - lowestLow;
|
||||
return range > (lowestLow * rangeThresholdPercent / 100.0) && highestHigh == high[index];
|
||||
}
|
||||
//short
|
||||
else
|
||||
{
|
||||
{
|
||||
double range = highestHigh - low[index];
|
||||
return range > (highestHigh * rangeThresholdPercent / 100.0) && lowestLow == low[index];
|
||||
|
||||
@@ -206,8 +202,8 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
{
|
||||
var highs = candles.Select(t => t.High).ToList();
|
||||
var lows = candles.Select(t => t.Low).ToList();
|
||||
var closes = candles.Select(t => t.Close).ToList();
|
||||
|
||||
var closes = candles.Select(t => t.Close).ToList();
|
||||
|
||||
var result = new IchimokuResult();
|
||||
|
||||
double tenkan = 0;
|
||||
@@ -253,7 +249,7 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
SenkouSpanB = senkouB,
|
||||
ChikouSpan = chikou
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user