영호꺼 새로 개발(전저가 저고가 구매방식이며 1, 5, 15 세개 사용 1분봉은 이평으로 처리)
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user