1. 영호 신호검색 추가 완료

This commit is contained in:
jwlee
2024-06-14 19:18:54 +09:00
parent 5bab59e2b2
commit 2722e15a0b
4 changed files with 97 additions and 31 deletions

View File

@@ -47,6 +47,11 @@ namespace BitgetAPI.IndicatorConditionSetup
IchimokuConditionSetup ichimokuConditionSetup = new IchimokuConditionSetup();
MovingAverageConditionSetup movingAverageConditionSetup = new MovingAverageConditionSetup();
signals_LU.Clear();
signals_SD.Clear();
signals_LD.Clear();
signals_SU.Clear();
// 추후 공통화 및 소스정리 필요
while (true)
{
@@ -70,7 +75,7 @@ namespace BitgetAPI.IndicatorConditionSetup
if (lastCandleData.IchimokData != null)
{
if (checked구름떼상향돌파)
if (checked구름떼상향돌파 || 영호조건식_상향돌파)
{
item.Price = lastCandleData.Close;
item.Rate = (lastCandleData.Close / lastCandleData.Open) * 100 - 100;
@@ -93,7 +98,7 @@ namespace BitgetAPI.IndicatorConditionSetup
if (lastCandleData.IchimokData != null)
{
if (checked구름떼하향돌파)
if (checked구름떼하향돌파 || 영호조건식_하향돌파)
{
item.Price = lastCandleData.Close;
item.Rate = (lastCandleData.Close / lastCandleData.Open) * 100 - 100;
@@ -114,8 +119,8 @@ namespace BitgetAPI.IndicatorConditionSetup
foreach (CommonProperty.MCandleTimeType interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
// Description
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
if (!intervalList.Contains(description)) continue;
var strInterval = Utils.Convertor.GetEnumDescription((Enum)interval);
if (!intervalList.Contains(strInterval)) continue;
// 시간별로 정렬하기 (임시 리스트)
var candleDatas = findedMarket.candleDataList[interval];
@@ -142,15 +147,16 @@ namespace BitgetAPI.IndicatorConditionSetup
var indicatorPrice = candleData.Open;
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var signalData = signals_LU.Find(i => i.MarketName.Equals(market));
var description = string.Format("{0} 구름떼 상승", strInterval);
var signalData = signals_LU.Find(i => i.MarketName.Equals(market) && i.Description.Equals(description));
// 없으면 생성
if (signalData == null)
{
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = string.Format("{0} 구름떼 상승", description);
signalInfoData.Description = description;
signalInfoData.Rate = rate;
signalInfoData.Price = price;
signalInfoData.IndicatorPrice = indicatorPrice;
@@ -169,7 +175,8 @@ namespace BitgetAPI.IndicatorConditionSetup
var indicatorPrice = candleData.Open;
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var signalData = signals_SD.Find(i => i.MarketName.Equals(market));
var description = string.Format("{0} 구름떼 하락", strInterval);
var signalData = signals_SD.Find(i => i.MarketName.Equals(market) && i.Description.Equals(description));
// 없으면 생성
if (signalData == null)
@@ -177,7 +184,7 @@ namespace BitgetAPI.IndicatorConditionSetup
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = string.Format("{0} 구름떼 하락", description);
signalInfoData.Description = description;
signalInfoData.Rate = rate;
signalInfoData.Price = price;
signalInfoData.IndicatorPrice = indicatorPrice;
@@ -190,36 +197,93 @@ namespace BitgetAPI.IndicatorConditionSetup
if (영호조건식_상향돌파 || 영호조건식_하향돌파)
{
candleDatas_정렬.RemoveAt(candleDatas_정렬.Count - 1);
var candleData_전전봉 = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전봉);
// 24,72 높은값
var 높은값_74_21_전전봉 = Math.Max(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[21].Value);
var 높은값_74_24_전전봉 = Math.Max(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[24].Value);
// 24,72 낮은값
var 낮은값_74_21_전전봉 = Math.Min(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[21].Value);
var 낮은값_74_24_전전봉 = Math.Min(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[24].Value);
// 24,72 높은값
var 높은값_74_21_전봉 = Math.Max(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[21].Value);
var 높은값_74_24_전봉 = Math.Max(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[24].Value);
// 24,72 낮은값
var 낮은값_74_21_전봉 = Math.Min(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[21].Value);
var 낮은값_74_24_전봉 = Math.Min(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[24].Value);
// 24,72 높은값
var 높은값_74_24 = Math.Max(candleData.movingAverageDataList[72].Value, candleData.movingAverageDataList[24].Value);
// 24,72 낮은값
var 낮은값_74_24 = Math.Min(candleData.movingAverageDataList[72].Value, candleData.movingAverageDataList[24].Value);
if (영호조건식_상향돌파 &&
candleData_전봉.movingAverageDataList[72].Value < candleData_전봉.IchimokData.상한선)
{
}
else if (영호조건식_하향돌파)
// 전전봉의 4가 74, 21 보다 높고
candleData_전전봉.movingAverageDataList[4].Value <= 높은값_74_24_전전봉 &&
// 전봉의 4가 74,21 보다 작고나서
candleData_전봉.movingAverageDataList[4].Value > 높은값_74_24_전봉 &&
// 현재 시가도 4가 74,21 보다 작고, 고가도
candleData.movingAverageDataList[4].Value > 높은값_74_24)
{
if (낮은값_74_21_전봉 < candleData_전봉.IchimokData.하한선 &&
candleData_전봉.movingAverageDataList[4].Value < 낮은값_74_21_전봉)
var price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100;
var indicatorPrice = candleData.Open;
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var description = string.Format("{0} 72,24,4 상승", strInterval); ;
var signalData = signals_LU.Find(i => i.MarketName.Equals(market) && i.Description.Equals(description));
// 없으면 생성
if (signalData == null)
{
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = description;
signalInfoData.Rate = rate;
signalInfoData.Price = price;
signalInfoData.IndicatorPrice = indicatorPrice;
signalInfoData.IndicatorRate = indicatorRate;
signalInfoData.MCandleTimeType = interval;
signals_LU.Add(signalInfoData);
}
}
else if (영호조건식_하향돌파 &&
// 전전봉의 4가 74, 21 보다 높고
candleData_전전봉.movingAverageDataList[4].Value >= 낮은값_74_24_전전봉 &&
// 전봉의 4가 74,21 보다 작고나서
candleData_전봉.movingAverageDataList[4].Value < 낮은값_74_24_전봉 &&
// 현재 시가도 4가 74,21 보다 작고, 고가도
candleData.movingAverageDataList[4].Value < 낮은값_74_24)
{
var price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100;
var indicatorPrice = candleData.Open;
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var description = string.Format("{0} 72,24,4 하락", strInterval);
var signalData = signals_SD.Find(i => i.MarketName.Equals(market) && i.Description.Equals(description));
// 없으면 생성
if (signalData == null)
{
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = description;
signalInfoData.Rate = rate;
signalInfoData.Price = price;
signalInfoData.IndicatorPrice = indicatorPrice;
signalInfoData.IndicatorRate = indicatorRate;
signalInfoData.MCandleTimeType = interval;
signals_SD.Add(signalInfoData);
}
}
}
}
}

View File

@@ -33,13 +33,16 @@ namespace BitgetAPI.IndicatorConditionSetup
if (candleData == null) return;
// Moving 없으면 생성
if (candleData.movingAverageDataList == null) candleData.movingAverageDataList = new Dictionary<int, MovingAverageData>();
if (candleData.movingAverageDataList == null)
{
candleData.movingAverageDataList = new Dictionary<int, MovingAverageData>();
candleData.movingAverageDataList.Add(CandleLegnth4, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLegnth24, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLegnth72, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLegnth4, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLegnth24, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLegnth72, new MovingAverageData());
}
foreach(var item in candleData.movingAverageDataList)
foreach(var item in candleData.movingAverageDataList.ToList())
{
// 전봉까지 만듬
var datas = candleDatas.FindAll(i =>
@@ -47,7 +50,7 @@ namespace BitgetAPI.IndicatorConditionSetup
candleDatas.IndexOf(i) <= endIndex);
candleData.movingAverageDataList[item.Key] = new MovingAverageData();
candleData.movingAverageDataList[item.Key].Value = datas.Sum(i => i.Close);
candleData.movingAverageDataList[item.Key].Value = datas.Sum(i => i.Close) / item.Key;
}
}

View File

@@ -711,7 +711,6 @@
// checkEdit_yhk_Short
//
this.checkEdit_yhk_Short.EditValue = true;
this.checkEdit_yhk_Short.Enabled = false;
this.checkEdit_yhk_Short.Location = new System.Drawing.Point(6, 40);
this.checkEdit_yhk_Short.Name = "checkEdit_yhk_Short";
this.checkEdit_yhk_Short.Properties.Caption = "Short";
@@ -755,7 +754,6 @@
// checkEdit_ichmoku_Long
//
this.checkEdit_ichmoku_Long.EditValue = true;
this.checkEdit_ichmoku_Long.Enabled = false;
this.checkEdit_ichmoku_Long.Location = new System.Drawing.Point(6, 21);
this.checkEdit_ichmoku_Long.Name = "checkEdit_ichmoku_Long";
this.checkEdit_ichmoku_Long.Properties.Caption = "Long";
@@ -765,7 +763,6 @@
// checkEdit_Ichmoku_Short
//
this.checkEdit_Ichmoku_Short.EditValue = true;
this.checkEdit_Ichmoku_Short.Enabled = false;
this.checkEdit_Ichmoku_Short.Location = new System.Drawing.Point(6, 40);
this.checkEdit_Ichmoku_Short.Name = "checkEdit_Ichmoku_Short";
this.checkEdit_Ichmoku_Short.Properties.Caption = "Short";

View File

@@ -109,7 +109,7 @@ namespace BitgetAPI
while (true)
{
Thread.Sleep(500);
Thread.Sleep(300);
if (!Is_th_th_MarketInfoList_WebService) break;
// 마켓 모든 종목 캔들 정보 Web Service로 가져오기
@@ -135,8 +135,10 @@ namespace BitgetAPI
// 지표 생성 및 신호 검색 (2)
private void TreeListMarketInfoListUpdate( )
{
Is_th_treeListUpdate = true;
// 마켓 현황판 업데이트
while(true)
while (true)
{
if (!Is_th_treeListUpdate) break;