에러 수정

This commit is contained in:
kyh
2025-05-13 12:53:36 +09:00
parent fcd3389938
commit 57071f80c5
2 changed files with 355 additions and 75 deletions

View File

@@ -22,7 +22,7 @@ namespace BitgetAPI.IndicatorConditionSetup
private List<double> sbList = new List<double>();
private List<double> shList = new List<double>();
public ImpulseMacdConditionSetup(int lengthMA = 26, int lengthSignal = 12)
public ImpulseMacdConditionSetup(int lengthMA = 34, int lengthSignal = 12)
{
this.lengthMA = lengthMA;
this.lengthSignal = lengthSignal;
@@ -40,6 +40,8 @@ namespace BitgetAPI.IndicatorConditionSetup
else
{
srcList[srcList.Count - 1] = src;
highList[highList.Count - 1] = high;
lowList[lowList.Count - 1] = low;
}
double smmaHigh = CalculateSMMA(highList, smmaHighList, lengthMA);
@@ -52,16 +54,31 @@ namespace BitgetAPI.IndicatorConditionSetup
else if (zlema < smmaLow)
md = zlema - smmaLow;
if (flag)
{
mdList.Add(md);
if (mdList.Count < lengthSignal)
return null;
}
else
{
mdList[mdList.Count - 1] = md;
}
double sb = mdList.Skip(mdList.Count - lengthSignal).Average();
double sh = md - sb;
if (flag)
{
sbList.Add(sb);
shList.Add(sh);
}
else
{
sbList[sbList.Count - 1] = sb;
shList[shList.Count - 1] = sh;
}
if (mdList.Count < lengthSignal)
return null;
if (mdList.Count > 100)
{

View File

@@ -4,9 +4,11 @@ using BitgetAPI.Data;
using BitgetAPI.WebService;
using Newtonsoft.Json;
using Serilog;
using Serilog.Debugging;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography;
using static BitgetAPI.CommonProperty;
@@ -110,8 +112,11 @@ namespace BitgetAPI.IndicatorConditionSetup
public Dictionary<string, Dictionary<int, bool>> SellShortStep = new Dictionary<string, Dictionary<int, bool>>();
public Dictionary<string, Dictionary<int, bool>> SellLongStep = new Dictionary<string, Dictionary<int, bool>>();
public Dictionary<string, bool> BuyShortStep = new Dictionary<string, bool>();
public Dictionary<string, bool> BuyLongStep = new Dictionary<string, bool>();
public Dictionary<string, int> BuyShortStep = new Dictionary<string, int>();
public Dictionary<string, int> BuyLongStep = new Dictionary<string, int>();
public Dictionary<string, double> BuyShortStepStampData = new Dictionary<string, double>();
public Dictionary<string, double> BuyLongStepStampData = new Dictionary<string, double>();
public int 전가Flag = 1;
@@ -271,7 +276,7 @@ namespace BitgetAPI.IndicatorConditionSetup
if (candleData_Main == null) continue;
if(interval == MCandleTimeType.M30)
totalImperseMACDData[market + strInterval].Add(candleData_Main.Argument, impulseMacdConditionSetup.AddDataPoint(candleData_Main.High, candleData_Main.Low, candleData_Main.Close, true));
candleDatas_Temp_List.Add(candleData_Main);
@@ -303,10 +308,10 @@ namespace BitgetAPI.IndicatorConditionSetup
totalImperseMACDData[market + strInterval].Remove(keys[i]);
}
if (!BuyShortStep.ContainsKey(market + strInterval))
if (!BuyShortStep.ContainsKey(market))
{
BuyShortStep[market + strInterval] = false;
BuyLongStep[market + strInterval] = false;
BuyShortStep[market] = 0;
BuyLongStep[market] = 0;
}
if (!(전저고점.ContainsKey(market + "1m") && 전저고점.ContainsKey(market + "5m") && 전저고점.ContainsKey(market + "30m")))
@@ -413,19 +418,44 @@ namespace BitgetAPI.IndicatorConditionSetup
ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30);
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30);
var macdData = new ImpulseMacdData();
var macdData_30 = new ImpulseMacdData();
if (keys.LastOrDefault() < candleData_30.Argument)
var imperseMacd_keys_30 = totalImperseMACDData[market + "30m"].Keys.OrderBy(t => t).ToList();
if (imperseMacd_keys_30.LastOrDefault() < candleData_30.Argument)
{
macdData = impulseMacdConditionSetup.AddDataPoint(candleData_30.High, candleData_30.Low, candleData_30.Close, true);
totalImperseMACDData[market + "30m"].Add(candleData_30.Argument, macdData);
macdData_30 = impulseMacdConditionSetup.AddDataPoint(candleData_30.High, candleData_30.Low, candleData_30.Close, true);
totalImperseMACDData[market + "30m"].Add(candleData_30.Argument, macdData_30);
}
else
{
macdData = impulseMacdConditionSetup.AddDataPoint(candleData_30.High, candleData_30.Low, candleData_30.Close, false);
totalImperseMACDData[market + "30m"][candleData_30.Argument] = macdData;
macdData_30 = impulseMacdConditionSetup.AddDataPoint(candleData_30.High, candleData_30.Low, candleData_30.Close, false);
totalImperseMACDData[market + "30m"][candleData_30.Argument] = macdData_30;
}
if (candleData_30.impulseMacdDataList == null) candleData_30.impulseMacdDataList = new Dictionary<int, ImpulseMacdData>();
if (candleData_30.impulseMacdDataList.ContainsKey(30)) candleData_30.impulseMacdDataList[30] = new ImpulseMacdData();
candleData_30.impulseMacdDataList[30] = macdData_30;
var macdData_5 = new ImpulseMacdData();
var imperseMacd_keys_5 = totalImperseMACDData[market + "5m"].Keys.OrderBy(t => t).ToList();
if (imperseMacd_keys_5.LastOrDefault() < candleData_5.Argument)
{
macdData_5 = impulseMacdConditionSetup.AddDataPoint(candleData_5.High, candleData_5.Low, candleData_5.Close, true);
totalImperseMACDData[market + "5m"].Add(candleData_5.Argument, macdData_5);
}
else
{
macdData_5 = impulseMacdConditionSetup.AddDataPoint(candleData_5.High, candleData_5.Low, candleData_5.Close, false);
totalImperseMACDData[market + "5m"][candleData_5.Argument] = macdData_5;
}
if (candleData_5.impulseMacdDataList == null) candleData_5.impulseMacdDataList = new Dictionary<int, ImpulseMacdData>();
if (candleData_5.impulseMacdDataList.ContainsKey(5)) candleData_5.impulseMacdDataList[5] = new ImpulseMacdData();
candleData_30.impulseMacdDataList[5] = macdData_5;
candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1);
var candleData_30_전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument);
@@ -634,6 +664,8 @@ namespace BitgetAPI.IndicatorConditionSetup
var 전전봉4_30 = candleData_30_전전봉.movingAverageDataList[4].Value;
var 전전전봉4_30 = candleData_30_전전전봉.movingAverageDataList[4].Value;
var 현재봉72_30 = candleData_30.movingAverageDataList[72].Value;
var 현재봉72_5 = candleData_5.movingAverageDataList[72].Value;
var 저고점_1 = 전저고점[market + "1m"];
var 저고점_5 = 전저고점[market + "5m"];
@@ -646,7 +678,13 @@ namespace BitgetAPI.IndicatorConditionSetup
returnVal = Calculate전고점(market, "30m", MCandleTimeType.M30, 전봉4_30, 전전봉4_30, 전전전봉4_30, candleData_30);
if (!returnVal) continue;
var 전봉macdData_30 = totalImperseMACDData[market + "30m"][imperseMacd_keys_30[imperseMacd_keys_30.Count - 2]];
var 전전봉macdData_30 = totalImperseMACDData[market + "30m"][imperseMacd_keys_30[imperseMacd_keys_30.Count - 3]];
var 전전전봉macdData_30 = totalImperseMACDData[market + "30m"][imperseMacd_keys_30[imperseMacd_keys_30.Count - 4]];
var 전봉macdData_5 = totalImperseMACDData[market + "5m"][imperseMacd_keys_5[imperseMacd_keys_5.Count - 2]];
var 전전봉macdData_5 = totalImperseMACDData[market + "5m"][imperseMacd_keys_5[imperseMacd_keys_5.Count - 3]];
var 전전전봉macdData_5 = totalImperseMACDData[market + "5m"][imperseMacd_keys_5[imperseMacd_keys_5.Count - 4]];
if (영호조건식_상향돌파)
{
@@ -669,45 +707,157 @@ namespace BitgetAPI.IndicatorConditionSetup
var buyFlag = false;
// 30분봉
var flag_30 = (저고점_30["Type"] == 0 &&
저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && candleData_30.Close > 저고점_30["전고가"])
var flag_30 = ((저고점_30["Type"] == 0 &&
저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && candleData_30_전봉.Close < 저고점_30["전고가"] && candleData_30.Close > 저고점_30["전고가"])
|| (저고점_30["Type"] == 1 &&
저고점_30["전저가"] > 저고점_30["전전저가"] && 저고점_30["전저가"] < 전봉4_30 && candleData_30_전봉.Close < 저고점_30["전고가"] && candleData_30.Close > 저고점_30["전고가"] && 전봉4_30 < 현재봉4_30 && 전봉4_30 < 전전봉4_30)
|| (저고점_30["Type"] == 0 &&
저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] > 저고점_30["전저가"] && candleData_30_전봉.Close < 저고점_30["전고가"] && candleData_30.Close > 저고점_30["전고가"]))
&& 전봉4_30 < 현재봉4_30 && candleData_30.Open < candleData_30.Close;
//|| (저고점_30["Type"] == 1 &&
//저고점_30["전저가"] > 저고점_30["전전저가"] && 저고점_30["전저가"] < 전봉4_30 && candleData_30.Close > 저고점_30["전고가"] && 전봉4_30 < 현재봉4_30 && 전봉4_30 < 전전봉4_30)
//|| (저고점_30["Type"] == 0 &&
//저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] > 저고점_30["전저가"] && candleData_30.Close > 저고점_30["전고가"]);
var flag_5 = (저고점_5["Type"] == 0 &&
저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && candleData_5.Close > 저고점_5["전고가"])
if(현재봉4_30 > 현재봉72_30)
{
if(저고점_30["전전고가"] > 저고점_30["전고가"])
{
flag_30 = false;
}
}
var flag_5 = ((저고점_5["Type"] == 0 &&
저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && candleData_5_전봉.Close < 저고점_5["전고가"] && candleData_5.Close > 저고점_5["전고가"])
|| (저고점_5["Type"] == 1 &&
저고점_5["전저가"] > 저고점_5["전전저가"] && 저고점_5["전저가"] < 전봉4_5 && candleData_5.Close > 저고점_5["전고가"] && 전봉4_5 < 현재봉4_5 && 전봉4_5 < 전전봉4_5)
저고점_5["전저가"] > 저고점_5["전전저가"] && 저고점_5["전저가"] < 전봉4_5 && candleData_5_전봉.Close < 저고점_5["전고가"] && candleData_5.Close > 저고점_5["전고가"] && 전봉4_5 < 현재봉4_5 && 전봉4_5 < 전전봉4_5)
|| (저고점_5["Type"] == 0 &&
저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] > 저고점_5["전저가"] && candleData_5.Close > 저고점_5["전고가"]) && 전봉4_5 < 현재봉4_5;
저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] > 저고점_5["전저가"] && candleData_5_전봉.Close < 저고점_5["전고가"] && candleData_5.Close > 저고점_5["전고가"]))
&& 전봉4_5 < 현재봉4_5 && candleData_5.Open < candleData_5.Close;
var flag_1 = 현재봉4 > 현재봉72 && 전봉4 > 전봉72;
if (현재봉4_5 > 현재봉72_5)
{
if (저고점_5["전전고가"] > 저고점_5["전고가"])
{
flag_5 = false;
}
}
var flag_1 = ((저고점_1["Type"] == 0 &&
저고점_1["전전전저가"] > 저고점_1["전전저가"] && 저고점_1["전전저가"] < 저고점_1["전저가"] && candleData_전봉.Close < 저고점_1["전고가"] && candleData.Close > 저고점_1["전고가"])
|| (저고점_1["Type"] == 1 &&
저고점_1["전저가"] > 저고점_1["전전저가"] && 저고점_1["전저가"] < 전봉4 && candleData_전봉.Close < 저고점_1["전고가"] && candleData.Close > 저고점_1["전고가"] && 전봉4 < 현재봉4 && 전봉4 < 전전봉4)
|| (저고점_1["Type"] == 0 &&
저고점_1["전전전저가"] > 저고점_1["전전저가"] && 저고점_1["전전저가"] > 저고점_1["전저가"] && candleData_전봉.Close < 저고점_1["전고가"] && candleData.Close > 저고점_1["전고가"]))
&& 전봉4 < 현재봉4 && candleData.Open < candleData.Close;
var flag_1_72compare = 현재봉4 > 현재봉72 && 전봉4 > 전봉72;
//추가
//
var macdFlag = false;
//var macdFlag = false;
if ((macdData.SH > 0 && macdData.MD < 0 && macdData.MD < -50)
|| (totalImperseMACDData[market + "30m"][keys[keys.Count - 2]].MD == 0 &&
totalImperseMACDData[market + "30m"][keys[keys.Count - 3]].MD == 0 &&
macdData.MD > 0 && macdData.SH > 0))
//if ((전전봉macdData_5.SH <= 0 && 전봉macdData_5.SH > 0 && macdData_5.MD < -30 && macdData_5.MD > 전봉macdData_5.MD)
// || (전전전봉macdData_5.MD == 0 && 전전봉macdData_5.MD == 0 && macdData_5.MD > 0 && macdData_5.SH > 전봉macdData_5.SH))
//{
// macdFlag = true;
//}
//&& flag_5
//if (macdFlag && flag_1)
//{
// buyFlag = true;
//}
if (!BuyLongStep.ContainsKey(market))
BuyLongStep[market] = 0;
if(BuyLongStep[market] == 0)
{
macdFlag = true;
if ((전전봉macdData_30.SH < 0 && 전봉macdData_30.SH > 0 && 전봉macdData_30.MD > 전전봉macdData_30.MD && macdData_30.MD > 전봉macdData_30.MD) //&& 전봉macdData_30.MD < 0
|| (전전전봉macdData_30.MD == 0 && 전전봉macdData_30.MD == 0 && 전봉macdData_30.MD > 0 && 전봉macdData_30.SH > 전전봉macdData_30.SH))
{
BuyLongStep[market] = 1;
BuyLongStepStampData[market] = 저고점_30["tempLowVal"];
}
if (flag_30 && flag_5 && flag_1 && macdFlag)
if(flag_30 && flag_5 && flag_1_72compare && flag_1 && 전봉macdData_30.SH > 0)
{
if (BuyLongStep[market] == 1)
buyFlag = true;
BuyLongStep[market] = 2;
BuyLongStepStampData[market] = 저고점_30["tempLowVal"];
}
}
if(BuyLongStep[market] == 1)
{
if (flag_30 && flag_5 && flag_1_72compare && flag_1 && 전봉macdData_30.SH > 0)
buyFlag = true;
}
if (BuyLongStep[market] == 2)
{
if ((전전봉macdData_30.SH < 0 && 전봉macdData_30.SH > 0 && 전봉macdData_30.MD > 전전봉macdData_30.MD && macdData_30.MD > 전봉macdData_30.MD) //&& 전봉macdData_30.MD < 0
|| (전전전봉macdData_30.MD == 0 && 전전봉macdData_30.MD == 0 && 전봉macdData_30.MD > 0 && 전봉macdData_30.SH > 전전봉macdData_30.SH))
{
buyFlag = true;
}
}
if (저고점_30["tempLowVal"] != BuyLongStepStampData[market] &&
(저고점_30["전저가"] > 전봉4_30 ||
저고점_30["전전저가"] > 저고점_30["전저가"] ||
저고점_30["전고가"] < 저고점_30["전전고가"] ||
전봉macdData_30.SH < 0))
{
BuyLongStep[market] = 0;
buyFlag = false;
}
//if ((전전봉macdData_5.SH < 0 && 전봉macdData_5.SH > 0 && 전봉macdData_5.MD < 0 && 전봉macdData_5.MD > 전전봉macdData_5.MD)
// || (전전전봉macdData_5.MD == 0 && 전전봉macdData_5.MD == 0 && 전봉macdData_5.MD > 0 && 전봉macdData_5.SH > 전전봉macdData_5.SH))
//{
// BuyLongStep[market] = 1;
// BuyLongStepStampData[market] = 저고점_5["tempLowVal"];
//}
//if (BuyLongStep[market] == 1)
//{
// if(flag_5)
// {
// BuyLongStep[market] = 2;
// }
// else
// {
// BuyLongStep[market] = 3;
// }
//}
//if (BuyLongStep[market] == 2)
//{
// buyFlag = true;
//}
//else if (BuyLongStep[market] == 3)
//{
// if (flag_5)
// {
// buyFlag = true;
// }
// if(저고점_5["tempLowVal"] != BuyLongStepStampData[market] && 저고점_5["전전저가"] > 저고점_5["전저가"])
// {
// BuyLongStep[market] = 0;
// buyFlag = false;
// }
//}
if (buyFlag)
{
BuyLongStep[market] = 0;
// 없으면 생성
if (signalData == null)
{
@@ -729,7 +879,7 @@ namespace BitgetAPI.IndicatorConditionSetup
{ "MarketName", market },
{ "BuyDate", nowTime },
{ "Price", price },
{ "Flag", 저고점_5["전고가"] > 저고점_5["전전고가"]},
{ "Flag", 저고점_30["전고가"] > 저고점_30["전전고가"]},
{ "MCandleTimeType", (int)interval },
{ "CandleTime", candleData.Argument },
{ "Candle", candleData }
@@ -779,7 +929,7 @@ namespace BitgetAPI.IndicatorConditionSetup
var flag = (bool)buyItem["Flag"];
if (interval < MCandleTimeType.H1)
{
var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(5);
var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(30);
if (nowTime < buyTime)
continue;
}
@@ -795,16 +945,19 @@ namespace BitgetAPI.IndicatorConditionSetup
if (저고점_30["전저가"] > 전봉4_30)
sellFlag = true;
if (전봉macdData_30.SH < 0)
sellFlag = true;
if (flag)
{
if (저고점_5["전고가"] < 저고점_5["전전고가"])
if (저고점_30["전고가"] < 저고점_30["전전고가"])
{
sellFlag = true;
}
}
else
{
if (저고점_5["전고가"] > 저고점_5["전전고가"])
if (저고점_30["전고가"] > 저고점_30["전전고가"])
{
buyItem["Flag"] = true;
}
@@ -814,7 +967,7 @@ namespace BitgetAPI.IndicatorConditionSetup
{
double.TryParse(buyItem["Price"].ToString(), out var buyPrice);
var resultRate = ((price - buyPrice) / buyPrice) * 100;
BuyLongStep[market] = false;
BuyLongStep[market] = 0;
var result = new Dictionary<string, object>()
{
{ "MarketName", market },
@@ -902,43 +1055,150 @@ namespace BitgetAPI.IndicatorConditionSetup
var buyFlag = false;
var flag_30 = (저고점_30["Type"] == 1 &&
저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && candleData_30.Close < 저고점_30["전저가"])
&& 전봉4_30 > 현재봉4_30 && candleData_30.Open > candleData_30.Close;
//|| (저고점_30["Type"] == 0 &&
//저고점_30["전고가"] < 저고점_30["전전고가"] && 저고점_30["전고가"] > 전봉4_30 && candleData_30.Close < 저고점_30["전저가"] && 전봉4_30 > 현재봉4_30 && 전봉4_30 > 전전봉4_30)
//|| (저고점_30["Type"] == 1 &&
//저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] < 저고점_30["전고가"] && candleData_30.Close < 저고점_30["전저가"]);
var flag_30 = ((저고점_30["Type"] == 1 &&
저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && candleData_30.Close < 저고점_30["전저가"] && candleData_30_전봉.Close > 저고점_30["전저가"])
|| (저고점_30["Type"] == 0 &&
저고점_30["전고가"] < 저고점_30["전전고가"] && 저고점_30["전고가"] > 전봉4_30 && candleData_30_전봉.Close > 저고점_30["전저가"] && candleData_30.Close < 저고점_30["전저가"] && 전봉4_30 > 현재봉4_30 && 전봉4_30 > 전전봉4_30)
|| (저고점_30["Type"] == 1 &&
저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] < 저고점_30["전고가"] && candleData_30_전봉.Close > 저고점_30["전저가"] && candleData_30.Close < 저고점_30["전저가"])) && 전봉4_30 > 현재봉4_30 && candleData_30.Open > candleData_30.Close;
var flag_5 = (저고점_5["Type"] == 1 &&
저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && candleData_5.Close < 저고점_5["전저가"])
|| (저고점_5["Type"] == 0 &&
저고점_5["전고가"] < 저고점_5["전전고가"] && 저고점_5["전고가"] > 전봉4_5 && candleData_5.Close < 저고점_5["전저가"] && 전봉4_5 > 현재봉4_5 && 전봉4_5 > 전전봉4_5)
|| (저고점_5["Type"] == 1 &&
저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] < 저고점_5["전고가"] && candleData_5.Close < 저고점_5["전저가"])
&& 전봉4_5 > 현재봉4_5;
var flag_1 = 현재봉4 < 현재봉72 && 전봉4 < 전봉72;
var macdFlag = false;
if ((macdData.SH < 0 && macdData.MD > 0 && macdData.MD > 50)
|| (totalImperseMACDData[market + "30m"][keys[keys.Count - 2]].MD == 0 &&
totalImperseMACDData[market + "30m"][keys[keys.Count - 3]].MD == 0 &&
macdData.MD < 0 && macdData.SH < 0))
if (현재봉4_30 < 현재봉72_30)
{
macdFlag = true;
if (저고점_30["전전저가"] < 저고점_30["전저가"])
{
flag_30 = false;
}
}
var flag_5 = ((저고점_5["Type"] == 1 &&
저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && candleData_5.Close < 저고점_5["전저가"] && candleData_5_전봉.Close > 저고점_5["전저가"])
|| (저고점_5["Type"] == 0 &&
저고점_5["전고가"] < 저고점_5["전전고가"] && 저고점_5["전고가"] > 전봉4_5 && candleData_5.Close < 저고점_5["전저가"] && candleData_5_전봉.Close > 저고점_5["전저가"] && 전봉4_5 > 현재봉4_5 && 전봉4_5 > 전전봉4_5)
|| (저고점_5["Type"] == 1 &&
저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] < 저고점_5["전고가"] && candleData_5.Close < 저고점_5["전저가"] && candleData_5_전봉.Close > 저고점_5["전저가"]))
&& 전봉4_5 > 현재봉4_5 && candleData_5.Open > candleData_5.Close;
if (flag_30 && flag_5 && flag_1 && macdFlag)
if (현재봉4_5 < 현재봉72_5)
{
if (저고점_5["전전저가"] < 저고점_5["전저가"])
{
flag_5 = false;
}
}
var flag_1 = ((저고점_1["Type"] == 1 &&
저고점_1["전전전고가"] < 저고점_1["전전고가"] && 저고점_1["전전고가"] > 저고점_1["전고가"] && candleData.Close < 저고점_1["전저가"] && candleData_전봉.Close > 저고점_1["전저가"])
|| (저고점_1["Type"] == 0 &&
저고점_1["전고가"] < 저고점_1["전전고가"] && 저고점_1["전고가"] > 전봉4 && candleData.Close < 저고점_1["전저가"] && candleData_전봉.Close > 저고점_1["전저가"] && 전봉4 > 현재봉4 && 전봉4 > 전전봉4)
|| (저고점_1["Type"] == 1 &&
저고점_1["전전전고가"] < 저고점_1["전전고가"] && 저고점_1["전전고가"] < 저고점_1["전고가"] && candleData.Close < 저고점_1["전저가"] && candleData_전봉.Close > 저고점_1["전저가"]))
&& 전봉4 > 현재봉4 && candleData.Open > candleData.Close;
var flag_1_72compare = 현재봉4 < 현재봉72 && 전봉4 < 전봉72;
//var macdFlag = false;
//if ((전전봉macdData_5.SH >= 0 && 전봉macdData_5.SH < 0 && macdData_5.MD > 5 && macdData_5.MD < 전봉macdData_5.MD)
// || (전전전봉macdData_5.MD == 0 && 전전봉macdData_5.MD == 0 && macdData_5.MD > 0 && macdData_5.SH < 전봉macdData_5.SH))
//{
// macdFlag = true;
//}
//&& flag_5 && flag_1
//if (flag_1 && macdFlag)
//{
// buyFlag = true;
//}
if (!BuyShortStep.ContainsKey(market))
BuyShortStep[market] = 0;
if (BuyShortStep[market] == 0)
{
if ((전전봉macdData_30.SH > 0 && 전봉macdData_30.SH < 0 && 전봉macdData_30.MD < 전전봉macdData_30.MD && macdData_30.MD < 전봉macdData_30.MD)// 전봉macdData_30.MD > 0 && )
|| (전전전봉macdData_30.MD == 0 && 전전봉macdData_30.MD == 0 && 전봉macdData_30.MD < 0 && 전봉macdData_30.SH < 전전봉macdData_30.SH))
{
BuyShortStep[market] = 1;
BuyShortStepStampData[market] = 저고점_30["tempHighVal"];
}
if (flag_30 && flag_5 && flag_1_72compare && flag_1 && 전봉macdData_30.SH < 0)
{
if (BuyShortStep[market] == 1)
buyFlag = true;
BuyShortStep[market] = 2;
BuyShortStepStampData[market] = 저고점_30["tempHighVal"];
}
}
if (BuyShortStep[market] == 1)
{
if (flag_30 && flag_5 && flag_1_72compare && flag_1 && 전봉macdData_30.SH < 0)
buyFlag = true;
}
if (BuyShortStep[market] == 2)
{
if ((전전봉macdData_30.SH > 0 && 전봉macdData_30.SH < 0 && 전봉macdData_30.MD < 전전봉macdData_30.MD && macdData_30.MD < 전봉macdData_30.MD)// 전봉macdData_30.MD > 0 && )
|| (전전전봉macdData_30.MD == 0 && 전전봉macdData_30.MD == 0 && 전봉macdData_30.MD < 0 && 전봉macdData_30.SH < 전전봉macdData_30.SH))
{
buyFlag = true;
}
}
if (저고점_30["tempHighVal"] != BuyShortStepStampData[market] &&
(저고점_30["전전고가"] < 저고점_30["전고가"] ||
저고점_30["전저가"] > 저고점_30["전전저가"] ||
저고점_30["전고가"] < 전봉4_30 ||
전봉macdData_30.SH > 0))
{
BuyShortStep[market] = 0;
buyFlag = false;
}
//if ((전전봉macdData_5.SH > 0 && 전봉macdData_5.SH < 0 && 전봉macdData_5.MD > 0 && 전봉macdData_5.MD < 전전봉macdData_5.MD)
//|| (전전전봉macdData_5.MD == 0 && 전전봉macdData_5.MD == 0 && 전봉macdData_5.MD < 0 && 전봉macdData_5.SH < 전전봉macdData_5.SH))
//{
// BuyShortStep[market] = 1;
// BuyShortStepStampData[market] = 저고점_5["tempHighVal"];
//}
//if (BuyShortStep[market] == 1)
//{
// if (flag_5)
// {
// BuyShortStep[market] = 2;
// }
// else
// {
// BuyShortStep[market] = 3;
// }
//}
//if (BuyShortStep[market] == 2)
//{
// buyFlag = true;
//}
//else if (BuyShortStep[market] == 3)
//{
// if (flag_5)
// {
// buyFlag = true;
// }
// if (저고점_5["tempHighVal"] != BuyShortStepStampData[market] && 저고점_5["전전고가"] < 저고점_5["전고가"])
// {
// BuyShortStep[market] = 0;
// buyFlag = false;
// }
//}
if (buyFlag)
{
BuyShortStep[market] = 0;
// 없으면 생성
if (signalData == null)
{
@@ -959,7 +1219,7 @@ namespace BitgetAPI.IndicatorConditionSetup
{ "MarketName", market },
{ "BuyDate", nowTime },
{ "Price", price },
{ "Flag", 저고점_5["전저가"] < 저고점_5["전전저가"]},
{ "Flag", 저고점_30["전저가"] < 저고점_30["전전저가"]},
{ "MCandleTimeType", (int)interval },
{ "CandleTime", candleData.Argument },
{ "Candle", candleData }
@@ -1009,7 +1269,7 @@ namespace BitgetAPI.IndicatorConditionSetup
var flag = (bool)buyItem["Flag"];
if (interval < MCandleTimeType.H1)
{
var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(5);
var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(30);
if (nowTime < buyTime)
continue;
}
@@ -1025,16 +1285,19 @@ namespace BitgetAPI.IndicatorConditionSetup
if (저고점_30["전고가"] < 전봉4_30)
sellFlag = true;
if (전봉macdData_30.SH > 0)
sellFlag = true;
if (flag)
{
if (저고점_5["전저가"] > 저고점_5["전전저가"])
if (저고점_30["전저가"] > 저고점_30["전전저가"])
{
sellFlag = true;
}
}
else
{
if (저고점_5["전저가"] < 저고점_5["전전저가"])
if (저고점_30["전저가"] < 저고점_30["전전저가"])
{
buyItem["Flag"] = true;
}
@@ -1042,7 +1305,7 @@ namespace BitgetAPI.IndicatorConditionSetup
if (sellFlag)
{
BuyShortStep[market] = false;
BuyShortStep[market] = 0;
double.TryParse(buyItem["Price"].ToString(), out var buyPrice);
var resultRate = ((price - buyPrice) / buyPrice) * 100;