에러 수정
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user