커밋!!
This commit is contained in:
@@ -17,82 +17,60 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
/// <summary>
|
||||
/// 기준선
|
||||
/// </summary>
|
||||
public int BaselinePeriod { get; set; }
|
||||
public int BaselinePeriod { get; set; } = 26;
|
||||
|
||||
/// <summary>
|
||||
/// 전환선
|
||||
/// </summary>
|
||||
public int ConversionPeriod { get; set; }
|
||||
public int ConversionPeriod { get; set; } = 9;
|
||||
|
||||
/// <summary>
|
||||
/// 선행스팬2
|
||||
/// </summary>
|
||||
public int LaggingSpan2Period { get; set; }
|
||||
|
||||
public int LaggingSpan2Period { get; set; } = 52;
|
||||
|
||||
/// <summary>
|
||||
/// Shift
|
||||
/// </summary>
|
||||
public int Displacement { get; set; }
|
||||
public int Displacement { get; set; } = 26;
|
||||
|
||||
// 기준선 설정z
|
||||
public CommonProperty.Indicator_IchmokuOverLine IndicatorIchmokuOverLine { get; set; }
|
||||
|
||||
public void GetIchmokuData(List<CandleData> candleDatas)
|
||||
// 캔들당 일목균형표 계산하기
|
||||
public void calIchimokuData(List<CandleData> candleDatas, CandleData candleData)
|
||||
{
|
||||
/*
|
||||
* 전환선 : (과거 n일간의 최고가 + 과거 n일간의 최저가) / 2
|
||||
|
||||
기준선 : (과거 m일간의 최고가 + 과거 m일간의 최저가) / 2
|
||||
|
||||
후행스팬 : 금일 종가를 ℓ일 전에 기입
|
||||
선행스팬1 : (금일 전환선 + 금일 기준선) / 2한 값을 ℓ일 후에 기입
|
||||
|
||||
선행스팬2 : (과거 k일간의 최고가 + 과거 k일간의 최저가) /2한 값을 ℓ일 후에 기입
|
||||
*/
|
||||
|
||||
// 시간별로 정렬하기
|
||||
var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument);
|
||||
|
||||
|
||||
// 현재 종가 인덱스
|
||||
var endIndex = candleDatas_정렬.Count() - 1;
|
||||
var 한봉전까지Index = endIndex - 1;
|
||||
|
||||
|
||||
var candleData_전봉 = candleDatas[endIndex - 1];
|
||||
|
||||
|
||||
// 현재 시간 캔들
|
||||
var nowCandle = candleDatas[endIndex];
|
||||
var endIndex = candleDatas.Count() - 1;
|
||||
|
||||
// Ichimok 없으면 생성
|
||||
if (nowCandle.IchimokData == null) nowCandle.IchimokData = new IchimokData();
|
||||
if (candleData.IchimokData == null) candleData.IchimokData = new IchimokData();
|
||||
|
||||
// 현재 종가
|
||||
var endValue = nowCandle.Close;
|
||||
|
||||
var endValue = candleData.Close;
|
||||
|
||||
// 전봉까지 만듬
|
||||
var datas = candleDatas.FindAll(i =>
|
||||
candleDatas.IndexOf(i) >= 한봉전까지Index - ConversionPeriod &&
|
||||
candleDatas.IndexOf(i) <= 한봉전까지Index);
|
||||
candleDatas.IndexOf(i) > endIndex - ConversionPeriod &&
|
||||
candleDatas.IndexOf(i) <= endIndex);
|
||||
|
||||
if (datas == null) return;
|
||||
|
||||
// 전환선
|
||||
nowCandle.IchimokData.전환선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2;
|
||||
candleData.IchimokData.전환선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
|
||||
|
||||
datas = candleDatas.FindAll(i =>
|
||||
candleDatas.IndexOf(i) >= 한봉전까지Index - BaselinePeriod &&
|
||||
candleDatas.IndexOf(i) <= 한봉전까지Index);
|
||||
candleDatas.IndexOf(i) > endIndex - BaselinePeriod &&
|
||||
candleDatas.IndexOf(i) <= endIndex);
|
||||
|
||||
// 기준선
|
||||
nowCandle.IchimokData.기준선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2;
|
||||
candleData.IchimokData.기준선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
|
||||
|
||||
// 후행스팬
|
||||
if (endIndex - Displacement >= 0)
|
||||
{
|
||||
if(candleDatas[candleDatas.Count - Displacement].IchimokData == null)
|
||||
if (candleDatas[candleDatas.Count - Displacement].IchimokData == null)
|
||||
{
|
||||
candleDatas[candleDatas.Count - Displacement].IchimokData = new IchimokData();
|
||||
}
|
||||
@@ -103,53 +81,48 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
|
||||
// Displacement : 26 일전봉 데이터 가져오기
|
||||
endIndex = endIndex - Displacement;
|
||||
한봉전까지Index = 한봉전까지Index - Displacement;
|
||||
|
||||
datas = candleDatas.FindAll(i =>
|
||||
candleDatas.IndexOf(i) >= 한봉전까지Index - ConversionPeriod &&
|
||||
candleDatas.IndexOf(i) <= 한봉전까지Index);
|
||||
candleDatas.IndexOf(i) > endIndex - ConversionPeriod &&
|
||||
candleDatas.IndexOf(i) <= endIndex);
|
||||
|
||||
if (datas == null) return;
|
||||
|
||||
// 전환선 : 26일 전봉
|
||||
var displacement_전환선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2;
|
||||
var displacement_전환선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
|
||||
|
||||
datas = candleDatas.FindAll(i =>
|
||||
candleDatas.IndexOf(i) >= 한봉전까지Index - BaselinePeriod &&
|
||||
candleDatas.IndexOf(i) <= 한봉전까지Index);
|
||||
candleDatas.IndexOf(i) > endIndex - BaselinePeriod &&
|
||||
candleDatas.IndexOf(i) <= endIndex);
|
||||
|
||||
if (datas == null) return;
|
||||
|
||||
// 기준선 : 26일 전봉
|
||||
var displacement_기준선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2;
|
||||
var displacement_기준선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
|
||||
|
||||
// 선행스팬 1
|
||||
nowCandle.IchimokData.선행스팬1 =
|
||||
candleData.IchimokData.선행스팬1 =
|
||||
(displacement_전환선 + displacement_기준선) / 2;
|
||||
|
||||
|
||||
|
||||
datas = candleDatas.FindAll(i =>
|
||||
candleDatas.IndexOf(i) >= 한봉전까지Index - LaggingSpan2Period &&
|
||||
candleDatas.IndexOf(i) <= 한봉전까지Index);
|
||||
candleDatas.IndexOf(i) > endIndex - LaggingSpan2Period &&
|
||||
candleDatas.IndexOf(i) <= endIndex);
|
||||
|
||||
// 선행스팬 2
|
||||
nowCandle.IchimokData.선행스팬2 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2;
|
||||
candleData.IchimokData.선행스팬2 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
|
||||
|
||||
// 일목균형표 (전봉데이터)
|
||||
var 일목균형표_전봉 = candleData_전봉.IchimokData;
|
||||
var 일목균형표_상한선 = Math.Max(일목균형표_전봉.선행스팬1, 일목균형표_전봉.선행스팬2);
|
||||
var 일목균형표_하한선 = Math.Min(일목균형표_전봉.선행스팬1, 일목균형표_전봉.선행스팬2);
|
||||
|
||||
// 전봉
|
||||
if (일목균형표_상한선 < candleData_전봉.Close && 일목균형표_상한선 < nowCandle.Close) nowCandle.IchimokData.IsLongUp = true;
|
||||
else nowCandle.IchimokData.IsLongUp = false;
|
||||
|
||||
if (일목균형표_하한선 > candleData_전봉.Close && 일목균형표_하한선 > nowCandle.Close) nowCandle.IchimokData.IsShortDown = true;
|
||||
else nowCandle.IchimokData.IsShortDown = false;
|
||||
|
||||
//if(일목균형표_상한선 > candleData_전봉.Close && )
|
||||
candleData.IchimokData.상한선 = Math.Max(candleData.IchimokData.선행스팬1, candleData.IchimokData.선행스팬2);
|
||||
candleData.IchimokData.하한선 = Math.Min(candleData.IchimokData.선행스팬1, candleData.IchimokData.선행스팬2);
|
||||
|
||||
if (candleData.IchimokData.상한선 < candleData.Close) candleData.IchimokData.IsLongUp = true;
|
||||
else candleData.IchimokData.IsLongUp = false;
|
||||
if (candleData.IchimokData.하한선 > candleData.Close) candleData.IchimokData.IsShortDown = true;
|
||||
else candleData.IchimokData.IsShortDown = false;
|
||||
if (candleData.IchimokData.상한선 > candleData.Close) candleData.IchimokData.IsLongDown = true;
|
||||
else candleData.IchimokData.IsLongDown = false;
|
||||
if (candleData.IchimokData.하한선 < candleData.Close) candleData.IchimokData.IsShortUp = true;
|
||||
else candleData.IchimokData.IsShortUp = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user