영호꺼 새로 개발(전저가 저고가 구매방식이며 1, 5, 15 세개 사용 1분봉은 이평으로 처리)

This commit is contained in:
kyh
2025-01-14 15:30:47 +09:00
parent 1f80bdc718
commit bc710b10da
2 changed files with 269 additions and 98 deletions

View File

@@ -4,6 +4,7 @@ using BitgetAPI.IndicatorConditionSetup;
using BitgetAPI.WebService;
using DevExpress.Internal.WinApi.Windows.UI.Notifications;
using DevExpress.Utils.DirectXPaint;
using DevExpress.Utils.Filtering.Internal;
using DevExpress.Utils.IoC;
using DevExpress.Xpo.Logger;
using DevExpress.XtraPrinting.Native;
@@ -22,6 +23,7 @@ using System.Windows.Forms;
using static BitgetAPI.CommonProperty;
using static DevExpress.Utils.Drawing.Helpers.NativeMethods;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
namespace BitgetAPI.IndicatorConditionSetup
{
@@ -125,7 +127,8 @@ namespace BitgetAPI.IndicatorConditionSetup
public Dictionary<string, bool> BuyShortStep = new Dictionary<string, bool>();
public Dictionary<string, bool> BuyLongStep = new Dictionary<string, bool>();
public int 전가Flag = 1;
// 전봉이 구름떼 돌파후 시가가 구름떼 위에서 시작하는 것
@@ -236,19 +239,29 @@ namespace BitgetAPI.IndicatorConditionSetup
if (!전저고점.ContainsKey(market + strInterval))
{
var dic = new Dictionary<string, double>();
dic.Add("beforeHighVal", 0);
dic.Add("beforeLowVal", 0);
dic.Add("twoBeforeHighVal", 0);
dic.Add("twoBeforeLowVal", 0);
dic.Add("tempBeforeLowVal", 0);
dic.Add("tempBeforeHighVal", 0);
dic.Add("전고가", 0);
dic.Add("전저가", 0);
dic.Add("전전고가", 0);
dic.Add("전전저가", 0);
dic.Add("전전전저가", 0);
dic.Add("전전전고가", 0);
dic.Add("전전전전저가", 0);
dic.Add("전전전전고가", 0);
dic.Add("tempHighVal", 0);
dic.Add("tempLowVal", 0);
dic.Add("tempHigh2Val", 0);
dic.Add("tempLow2Val", 0);
dic.Add("switchLowVal", 0);
dic.Add("switchHighVal", 0);
전저고점.Add(market + strInterval, dic);
}
if (!BuyShortStep.ContainsKey(market + strInterval)) {
BuyShortStep[market + strInterval] = false;
BuyLongStep[market + strInterval] = false;
}
#region Main 처리
// 시간별로 정렬하기 (임시 리스트)
var candleDatas = findedMarket.candleDataList[interval];
var candleDatas = findedMarket.candleDataList[MCandleTimeType.M1];
var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument).ToList();
var candleData = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument);
@@ -279,6 +292,99 @@ namespace BitgetAPI.IndicatorConditionSetup
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전봉);
candleDatas_정렬.RemoveAt(candleDatas_정렬.Count - 1);
var candleData_전전전전봉 = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument);
if (candleData_전전전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전전전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전전봉);
#endregion
#region 5분봉 처리
// 시간별로 정렬하기 (임시 리스트)
var candleDatas_5 = findedMarket.candleDataList[MCandleTimeType.M5];
var candleDatas_5_정렬 = candleDatas_5.OrderBy(i => i.Argument).ToList();
var candleData_5 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument);
if (candleData_5 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5);
candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1);
var candleData_5_전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument);
if (candleData_5_전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전봉);
candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1);
var candleData_5_전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument);
if (candleData_5_전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전봉);
candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1);
var candleData_5_전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument);
if (candleData_5_전전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전봉);
candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1);
var candleData_5_전전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument);
if (candleData_5_전전전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전전봉);
#endregion
#region 30분봉 처리
// 시간별로 정렬하기 (임시 리스트)
var candleDatas_30 = findedMarket.candleDataList[MCandleTimeType.M30];
var candleDatas_30_정렬 = candleDatas_30.OrderBy(i => i.Argument).ToList();
var candleData_30 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument);
if (candleData_30 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30);
candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1);
var candleData_30_전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument);
if (candleData_30_전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전봉);
candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1);
var candleData_30_전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument);
if (candleData_30_전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전봉);
candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1);
var candleData_30_전전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument);
if (candleData_30_전전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전봉);
candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1);
var candleData_30_전전전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument);
if (candleData_30_전전전전봉 == null) continue;
ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전전전봉);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전전봉);
#endregion
if (checked구름떼상향돌파 && candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData.IchimokData.상한선 && candleData.Low > candleData.IchimokData.상한선
&& candleData.Close > candleData.IchimokData.상한선)
{
@@ -341,26 +447,10 @@ namespace BitgetAPI.IndicatorConditionSetup
if (영호조건식_상향돌파 || 영호조건식_하향돌파)
{
// 24,72 높은값
var 높은값_72_24_전전봉 = Math.Max(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[24].Value);
// 24,72 낮은값
var 낮은값_72_24_전전봉 = Math.Min(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[24].Value);
// 24,72 높은값
var 높은값_72_24_전봉 = Math.Max(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[24].Value);
// 24,72 낮은값
var 낮은값_72_24_전봉 = Math.Min(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[24].Value);
// 24,72 높은값
var 높은값_72_24 = Math.Max(candleData.movingAverageDataList[72].Value, candleData.movingAverageDataList[24].Value);
// 24,72 낮은값
var 낮은값_72_24 = Math.Min(candleData.movingAverageDataList[72].Value, candleData.movingAverageDataList[24].Value);
#region Main 봉 계산
// 24,72 높은값
var 높은값_8_12 = Math.Max(candleData.movingAverageDataList[8].Value, candleData.movingAverageDataList[12].Value);
// 24,72 낮은값
var 낮은값_8_12 = Math.Min(candleData.movingAverageDataList[8].Value, candleData.movingAverageDataList[12].Value);
var 전전전봉2 = candleData_전전전봉.movingAverageDataList[2].Value;
var 전전전봉3 = candleData_전전전봉.movingAverageDataList[3].Value;
var 전전전봉4 = candleData_전전전봉.movingAverageDataList[4].Value;
var 전전전봉8 = candleData_전전전봉.movingAverageDataList[8].Value;
var 전전전봉12 = candleData_전전전봉.movingAverageDataList[12].Value;
@@ -369,8 +459,9 @@ namespace BitgetAPI.IndicatorConditionSetup
var 전전전봉72 = candleData_전전전봉.movingAverageDataList[72].Value;
var 전전전봉40 = candleData_전전전봉.movingAverageDataList[40].Value;
var 전전전전봉4 = candleData_전전전전봉.movingAverageDataList[4].Value;
var 전전봉2 = candleData_전전봉.movingAverageDataList[2].Value;
var 전전봉3 = candleData_전전봉.movingAverageDataList[3].Value;
var 전전봉4 = candleData_전전봉.movingAverageDataList[4].Value;
var 전전봉8 = candleData_전전봉.movingAverageDataList[8].Value;
var 전전봉12 = candleData_전전봉.movingAverageDataList[12].Value;
@@ -388,7 +479,7 @@ namespace BitgetAPI.IndicatorConditionSetup
var 전전봉480 = candleData_전전봉.movingAverageDataList[480].Value;
var 전봉2 = candleData_전봉.movingAverageDataList[2].Value;
var 전봉3 = candleData_전봉.movingAverageDataList[3].Value;
var 전봉4 = candleData_전봉.movingAverageDataList[4].Value;
var 전봉8 = candleData_전봉.movingAverageDataList[8].Value;
var 전봉12 = candleData_전봉.movingAverageDataList[12].Value;
@@ -405,8 +496,7 @@ namespace BitgetAPI.IndicatorConditionSetup
var 전봉240 = candleData_전봉.movingAverageDataList[240].Value;
var 전봉480 = candleData_전봉.movingAverageDataList[480].Value;
var 현재봉2 = candleData.movingAverageDataList[2].Value;
var 현재봉3 = candleData.movingAverageDataList[3].Value;
var 현재봉4 = candleData.movingAverageDataList[4].Value;
var 현재봉8 = candleData.movingAverageDataList[8].Value;
var 현재봉12 = candleData.movingAverageDataList[12].Value;
@@ -414,6 +504,7 @@ namespace BitgetAPI.IndicatorConditionSetup
var 현재봉36 = candleData.movingAverageDataList[36].Value;
var 현재봉20 = candleData.movingAverageDataList[20].Value;
var 현재봉40 = candleData.movingAverageDataList[40].Value;
var 현재봉48 = candleData.movingAverageDataList[48].Value;
var 현재봉72 = candleData.movingAverageDataList[72].Value;
var 현재봉120 = candleData.movingAverageDataList[120].Value;
var 현재봉144 = candleData.movingAverageDataList[144].Value;
@@ -421,7 +512,6 @@ namespace BitgetAPI.IndicatorConditionSetup
var 현재봉160 = candleData.movingAverageDataList[160].Value;
var 현재봉80 = candleData.movingAverageDataList[80].Value;
var 전봉Bol4_Down = candleData_전봉.movingAverageDataList[4].BolangerValue_Down;
var 전봉Bol12_Down = candleData_전봉.movingAverageDataList[12].BolangerValue_Down;
var 전봉Bol24_Down = candleData_전봉.movingAverageDataList[24].BolangerValue_Down;
@@ -451,43 +541,32 @@ namespace BitgetAPI.IndicatorConditionSetup
var Bol12_Up = candleData.movingAverageDataList[12].BolangerValue_Up;
var Bol24_Up = candleData.movingAverageDataList[24].BolangerValue_Up;
var Bol72_Up = candleData.movingAverageDataList[72].BolangerValue_Up;
#endregion
if ((int)interval != 1)
{
continue;
}
var 현재봉3_5 = candleData_5.movingAverageDataList[3].Value;
var 전봉3_5 = candleData_5_전봉.movingAverageDataList[3].Value;
var 전전봉3_5 = candleData_5_전전봉.movingAverageDataList[3].Value;
var 전전전봉3_5 = candleData_5_전전전봉.movingAverageDataList[3].Value;
var 저고점 = 전저고점[market + strInterval];
var 현재봉3_30 = candleData_5.movingAverageDataList[3].Value;
var 전봉3_30 = candleData_30_전봉.movingAverageDataList[3].Value;
var 전전봉3_30 = candleData_30_전전봉.movingAverageDataList[3].Value;
var 전전전봉3_30 = candleData_30_전전전봉.movingAverageDataList[3].Value;
if (현재봉4 > (전봉4 * 1.0001) && 전봉4 < 전전봉4)
{
저고점["tempBeforeLowVal"] = 저고점["twoBeforeLowVal"];
저고점["twoBeforeLowVal"] = 저고점["beforeLowVal"];
저고점["beforeLowVal"] = 전봉4;
}
else if(현재봉4 < (전봉4 * 1.0001) && 저고점["tempBeforeLowVal"] == 저고점["twoBeforeLowVal"])
{
저고점["beforeLowVal"] = 저고점["twoBeforeLowVal"];
저고점["twoBeforeLowVal"] = 저고점["tempBeforeLowVal"];
저고점["tempBeforeLowVal"] = 0;
}
if (현재봉4 < (전봉4 * 1.0001) && 전봉4 > 전전봉4)
{
저고점["tempBeforeHighVal"] = 저고점["twoBeforeHighVal"];
저고점["twoBeforeHighVal"] = 저고점["beforeHighVal"];
저고점["beforeHighVal"] = 전봉4;
}
else if(현재봉4 > (전봉4 * 1.0001))
{
저고점["beforeHighVal"] = 저고점["tempBeforeHighVal"];
저고점["twoBeforeHighVal"] = 저고점["tempBeforeHighVal"];
저고점["tempBeforeHighVal"] = 0;
}
if (저고점["twoBeforeLowVal"] == 0 || 저고점["twoBeforeHighVal"] == 0)
if (!(전저고점.ContainsKey(market + "1m") && 전저고점.ContainsKey(market + "5m") && 전저고점.ContainsKey(market + "30m")))
continue;
var 저고점_1 = 전저고점[market + "1m"];
var 저고점_5 = 전저고점[market + "5m"];
var 저고점_30 = 전저고점[market + "30m"];
var returnVal = Calculate전고점(market, "1m", MCandleTimeType.M1, 전봉3, 전전봉3, 전전전봉3, candleData);
if (!returnVal) continue;
returnVal = Calculate전고점(market, "5m", MCandleTimeType.M5, 전봉3_5, 전전봉3_5, 전전전봉3_5, candleData_5);
if (!returnVal) continue;
returnVal = Calculate전고점(market, "30m", MCandleTimeType.M30, 전봉3_30, 전전봉3_30, 전전전봉3_30, candleData_30);
if (!returnVal) continue;
if (영호조건식_상향돌파)
{
@@ -506,19 +585,28 @@ namespace BitgetAPI.IndicatorConditionSetup
//사는 시점
if (!UpBuyList.ContainsKey(market + interval))
{
if ((int)interval != 1)
{
continue;
}
var buyFlag = false;
if ((전봉12 > 전전봉12 || 전봉24 > 전전봉24) &&
candleData.Close > 저고점["beforeHighVal"] && 전봉24 < 전봉4 &&
저고점["twoBeforeLowVal"] < 저고점["beforeLowVal"] &&
저고점["twoBeforeHighVal"] < 저고점["beforeHighVal"])
{
// 30분봉
var flag_30 = (저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && 현재봉3_30 > 저고점_30["전저가"])
|| (저고점_30["전전저가"] > 저고점_30["전저가"] && candleData_30.High > 저고점_30["전고가"]);
var flag_5 = (저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && candleData_5.High > 저고점_5["전고가"])
|| (저고점_5["전전저가"] > 저고점_5["전저가"] && candleData_5.High > 저고점_5["전고가"]);
var flag_1 = 현재봉3 > 현재봉24 && 현재봉3 > 현재봉48 && 현재봉3 > 현재봉72 && 현재봉3 > 현재봉120;
if (flag_30 && flag_5 && flag_1) {
buyFlag = true;
}
if (buyFlag)
{
BuyLongStep[market + interval] = false;
// 없으면 생성
if (signalData == null)
{
@@ -534,16 +622,14 @@ namespace BitgetAPI.IndicatorConditionSetup
signals_SD.Add(signalInfoData);
}
var buyDic = new Dictionary<string, object>
{
{ "MarketName", market },
{ "BuyDate", nowTime },
{ "Price", price },
{ "Price", price },
{ "MCandleTimeType", (int)interval },
{ "CandleTime", candleData.Argument },
{ "HighData", 전봉144 > 전봉72 ? 144 : 72 },
{ "flag" , false },
{ "CandleTime", candleData.Argument },
{ "Candle", candleData }
};
@@ -585,8 +671,13 @@ namespace BitgetAPI.IndicatorConditionSetup
//파는 시점
else
{
var buyItem = UpBuyList[market + interval];
if ((int)interval != 30)
{
continue;
}
var buyItem = UpBuyList[market + interval];
var flag = (bool)buyItem["Flag"];
if (interval < MCandleTimeType.H1)
{
var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval);
@@ -602,18 +693,15 @@ namespace BitgetAPI.IndicatorConditionSetup
}
var sellFlag = false;
if (저고점["twoBeforeHighVal"] > 저고점["beforeHighVal"])
if (저고점_30["전저가"] > 현재봉3)
sellFlag = true;
if (전봉4 < 저고점["beforeLowVal"])
sellFlag = true;
if (sellFlag)
{
double.TryParse(buyItem["Price"].ToString(), out var buyPrice);
var resultRate = ((price - buyPrice) / buyPrice) * 100;
BuyLongStep[market + interval] = false;
var result = new Dictionary<string, object>()
{
{ "MarketName", market },
@@ -697,18 +785,28 @@ namespace BitgetAPI.IndicatorConditionSetup
//사는 시점
if (!DownBuyList.ContainsKey(market + interval))
{
if ((int)interval != 1)
{
continue;
}
var buyFlag = false;
if ((전봉12 < 전전봉12 || 전봉24 < 전전봉24) &&
candleData.Close < 저고점["beforeLowVal"] && 전봉24 > 전봉4 &&
저고점["twoBeforeHighVal"] > 저고점["beforeHighVal"] &&
저고점["twoBeforeLowVal"] > 저고점["beforeLowVal"])
var flag_30 = (저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && 현재봉3_30 < 저고점_30["전고가"])
|| (저고점_30["전전고가"] < 저고점_30["전고가"] && candleData_30.Low < 저고점_30["전저가"]);
var flag_5 = (저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && candleData_5.Low < 저고점_5["전저가"])
|| (저고점_5["전전고가"] < 저고점_5["전고가"] && candleData_5.Low < 저고점_5["전저가"]);
var flag_1 = 현재봉3 < 현재봉24 && 현재봉3 < 현재봉48 && 현재봉3 < 현재봉72 && 현재봉3 < 현재봉120;
if (flag_30 && flag_5 && flag_1)
{
buyFlag = true;
}
if (buyFlag)
{
BuyShortStep[market + interval] = false;
// 없으면 생성
if (signalData == null)
{
@@ -729,11 +827,8 @@ namespace BitgetAPI.IndicatorConditionSetup
{ "MarketName", market },
{ "BuyDate", nowTime },
{ "Price", price },
{ "MCandleTimeType", (int)interval },
{ "LowData", 전봉144 < 전봉72 ? 144 : 72 },
{ "flag" , false },
{ "CandleTime", candleData.Argument },
{ "MovingRate4_8", 현재봉4 - 현재봉8 },
{ "MCandleTimeType", (int)interval },
{ "CandleTime", candleData.Argument },
{ "Candle", candleData }
};
@@ -747,7 +842,7 @@ namespace BitgetAPI.IndicatorConditionSetup
[5] = false
};
SellShortStep.Add(market + interval, dic);
BuyShortStep[market + interval] = false;
if (ShortCount < 5)
{
double size = YHKIM_OrderAmount / price * YHKIM_Leverage;
@@ -775,8 +870,14 @@ namespace BitgetAPI.IndicatorConditionSetup
//파는 시점
else
{
if ((int)interval != 30)
{
continue;
}
var sellFlag = false;
var buyItem = DownBuyList[market + interval];
var flag = (bool)buyItem["Flag"];
if (interval < MCandleTimeType.H1)
{
@@ -792,14 +893,12 @@ namespace BitgetAPI.IndicatorConditionSetup
continue;
}
if (저고점["twoBeforeLowVal"] < 저고점["beforeLowVal"])
sellFlag = true;
if (전봉4 > 저고점["beforeHighVal"])
if (저고점_30["전고가"] < 현재봉3)
sellFlag = true;
if (sellFlag)
{
BuyShortStep[market + interval] = false;
double.TryParse(buyItem["Price"].ToString(), out var buyPrice);
var resultRate = ((price - buyPrice) / buyPrice) * 100;
@@ -881,6 +980,76 @@ namespace BitgetAPI.IndicatorConditionSetup
}
}
private bool Calculate전고점(string market, string strInterval, MCandleTimeType type, double 전봉3, double 전전봉3, double 전전전봉3, CandleData candleData)
{
var 저고점 = 전저고점[market + strInterval];
//전저가
if (전봉3 > 전전봉3 && 전전봉3 < 전전전봉3 &&
저고점["tempLowVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute &&
(candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempHighVal"] > 2 * (int)type)
{
저고점["tempLow2Val"] = 저고점["tempLowVal"];
저고점["tempLowVal"] = candleData.Argument.Hour * 60 + candleData.Argument.Minute;
저고점["switchLowVal"] = 저고점["전전전전저가"];
저고점["전전전전저가"] = 저고점["전전저가"];
저고점["전전전저가"] = 저고점["전전저가"];
저고점["전전저가"] = 저고점["전저가"];
저고점["전저가"] = 전전봉3;
}
else if (전봉3 > 전전봉3 && 전전봉3 < 전전전봉3 &&
저고점["tempLowVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute &&
(candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempHighVal"] <= 2 * (int)type)
{
//이전으로 초기화 작업(High)
저고점["전고가"] = 저고점["전전고가"];
저고점["전전고가"] = 저고점["전전전고가"];
저고점["전전전고가"] = 저고점["전전전전고가"];
저고점["전전전전고가"] = 저고점["switchLowVal"];
저고점["tempHighVal"] = 저고점["tempHigh2Val"];
if (저고점["전저가"] > 전전봉3)
저고점["전저가"] = 전전봉3;
}
//전고가
if (전전봉3 > 전봉3 && 전전봉3 > 전전전봉3 &&
저고점["tempHighVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute &&
(candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempLowVal"] > 2 * (int)type)
{
저고점["tempHigh2Val"] = 저고점["tempHighVal"];
저고점["tempHighVal"] = candleData.Argument.Hour * 60 + candleData.Argument.Minute;
저고점["switchHighVal"] = 저고점["전전전전고가"];
저고점["전전전전고가"] = 저고점["전전전고가"];
저고점["전전전고가"] = 저고점["전전고가"];
저고점["전전고가"] = 저고점["전고가"];
저고점["전고가"] = 전전봉3;
}
else if (전전봉3 > 전봉3 && 전전봉3 > 전전전봉3 &&
저고점["tempHighVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute &&
(candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempLowVal"] < 2 * (int)type)
{
//이전으로 초기화 작업(Low)
저고점["전저가"] = 저고점["전전저가"];
저고점["전전저가"] = 저고점["전전전저가"];
저고점["전전전저가"] = 저고점["전전전전저가"];
저고점["전전전전저가"] = 저고점["switchHighVal"];
저고점["tempLowVal"] = 저고점["tempLow2Val"];
if (저고점["전고가"] < 전전봉3)
저고점["전고가"] = 전전봉3;
}
전저고점[market + strInterval] = 저고점;
if (저고점["전전전저가"] == 0 || 저고점["전전전고가"] == 0)
return false;
return true;
}
public Dictionary<string, object> GetPendingOrders()
{
var timestamp = GetTimeStamp().ToString();

View File

@@ -22,6 +22,7 @@ namespace BitgetAPI.IndicatorConditionSetup
// 기간
public int CandleLength4 { get; set; } = 4;
public int CandleLength2 { get; set; } = 2;
public int CandleLength3 { get; set; } = 3;
public int CandleLength36 { get; set; } = 36;
// 기간
public int CandleLength72 { get; set; } = 72;
@@ -62,6 +63,7 @@ namespace BitgetAPI.IndicatorConditionSetup
candleData.movingAverageDataList.Add(CandleLength40, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLength48, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLength72, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLength3, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLength8, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLength20, new MovingAverageData());
candleData.movingAverageDataList.Add(CandleLength80, new MovingAverageData());