This commit is contained in:
DESKTOP-F6681KC\llk
2024-06-02 22:46:24 +09:00
7 changed files with 198 additions and 95 deletions

View File

@@ -92,6 +92,7 @@
<EmbeddedResource Include="MainForm.resx"> <EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon> <DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>

View File

@@ -8,6 +8,8 @@ namespace BitgetApi.Data
{ {
public class SignalInfoData public class SignalInfoData
{ {
// 신호검색 시작 시간
public DateTime SignalStart { get; set; }
// 종목 이름 // 종목 이름
public string MarketName { get; set; } public string MarketName { get; set; }
// 종목 설명 (시간별, 어떤거?) // 종목 설명 (시간별, 어떤거?)

View File

@@ -17,82 +17,60 @@ namespace BitgetAPI.IndicatorConditionSetup
/// <summary> /// <summary>
/// 기준선 /// 기준선
/// </summary> /// </summary>
public int BaselinePeriod { get; set; } public int BaselinePeriod { get; set; } = 26;
/// <summary> /// <summary>
/// 전환선 /// 전환선
/// </summary> /// </summary>
public int ConversionPeriod { get; set; } public int ConversionPeriod { get; set; } = 9;
/// <summary> /// <summary>
/// 선행스팬2 /// 선행스팬2
/// </summary> /// </summary>
public int LaggingSpan2Period { get; set; } public int LaggingSpan2Period { get; set; } = 52;
/// <summary> /// <summary>
/// Shift /// Shift
/// </summary> /// </summary>
public int Displacement { get; set; } public int Displacement { get; set; } = 26;
// 기준선 설정z // 기준선 설정z
public CommonProperty.Indicator_IchmokuOverLine IndicatorIchmokuOverLine { get; set; } public CommonProperty.Indicator_IchmokuOverLine IndicatorIchmokuOverLine { get; set; }
public void GetIchmokuData(List<CandleData> candleDatas) // 캔들당 일목균형표 계산하기
public void calIchimokuData(List<CandleData> candleDatas, CandleData candleData)
{ {
/*
* 전환선 : (과거 n일간의 최고가 + 과거 n일간의 최저가) / 2
기준선 : (과거 m일간의 최고가 + 과거 m일간의 최저가) / 2
후행스팬 : 금일 종가를 ℓ일 전에 기입
선행스팬1 : (금일 전환선 + 금일 기준선) / 2한 값을 ℓ일 후에 기입
선행스팬2 : (과거 k일간의 최고가 + 과거 k일간의 최저가) /2한 값을 ℓ일 후에 기입
*/
// 시간별로 정렬하기
var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument);
// 현재 종가 인덱스 // 현재 종가 인덱스
var endIndex = candleDatas_정렬.Count() - 1; var endIndex = candleDatas.Count() - 1;
var 한봉전까지Index = endIndex - 1;
var candleData_전봉 = candleDatas[endIndex - 1];
// 현재 시간 캔들
var nowCandle = candleDatas[endIndex];
// Ichimok 없으면 생성 // Ichimok 없으면 생성
if (nowCandle.IchimokData == null) nowCandle.IchimokData = new IchimokData(); if (candleData.IchimokData == null) candleData.IchimokData = new IchimokData();
// 현재 종가 // 현재 종가
var endValue = nowCandle.Close; var endValue = candleData.Close;
// 전봉까지 만듬 // 전봉까지 만듬
var datas = candleDatas.FindAll(i => var datas = candleDatas.FindAll(i =>
candleDatas.IndexOf(i) >= 한봉전까지Index - ConversionPeriod && candleDatas.IndexOf(i) > endIndex - ConversionPeriod &&
candleDatas.IndexOf(i) <= 한봉전까지Index); candleDatas.IndexOf(i) <= endIndex);
if (datas == null) return; if (datas == null) return;
// 전환선 // 전환선
nowCandle.IchimokData.전환선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; candleData.IchimokData.전환선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
datas = candleDatas.FindAll(i => datas = candleDatas.FindAll(i =>
candleDatas.IndexOf(i) >= 한봉전까지Index - BaselinePeriod && candleDatas.IndexOf(i) > endIndex - BaselinePeriod &&
candleDatas.IndexOf(i) <= 한봉전까지Index); candleDatas.IndexOf(i) <= endIndex);
// 기준선 // 기준선
nowCandle.IchimokData.기준선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; candleData.IchimokData.기준선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
// 후행스팬 // 후행스팬
if (endIndex - Displacement >= 0) if (endIndex - Displacement >= 0)
{ {
if(candleDatas[candleDatas.Count - Displacement].IchimokData == null) if (candleDatas[candleDatas.Count - Displacement].IchimokData == null)
{ {
candleDatas[candleDatas.Count - Displacement].IchimokData = new IchimokData(); candleDatas[candleDatas.Count - Displacement].IchimokData = new IchimokData();
} }
@@ -103,53 +81,48 @@ namespace BitgetAPI.IndicatorConditionSetup
// Displacement : 26 일전봉 데이터 가져오기 // Displacement : 26 일전봉 데이터 가져오기
endIndex = endIndex - Displacement; endIndex = endIndex - Displacement;
한봉전까지Index = 한봉전까지Index - Displacement;
datas = candleDatas.FindAll(i => datas = candleDatas.FindAll(i =>
candleDatas.IndexOf(i) >= 한봉전까지Index - ConversionPeriod && candleDatas.IndexOf(i) > endIndex - ConversionPeriod &&
candleDatas.IndexOf(i) <= 한봉전까지Index); candleDatas.IndexOf(i) <= endIndex);
if (datas == null) return; if (datas == null) return;
// 전환선 : 26일 전봉 // 전환선 : 26일 전봉
var displacement_전환선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; var displacement_전환선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
datas = candleDatas.FindAll(i => datas = candleDatas.FindAll(i =>
candleDatas.IndexOf(i) >= 한봉전까지Index - BaselinePeriod && candleDatas.IndexOf(i) > endIndex - BaselinePeriod &&
candleDatas.IndexOf(i) <= 한봉전까지Index); candleDatas.IndexOf(i) <= endIndex);
if (datas == null) return; if (datas == null) return;
// 기준선 : 26일 전봉 // 기준선 : 26일 전봉
var displacement_기준선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; var displacement_기준선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
// 선행스팬 1 // 선행스팬 1
nowCandle.IchimokData.선행스팬1 = candleData.IchimokData.선행스팬1 =
(displacement_전환선 + displacement_기준선) / 2; (displacement_전환선 + displacement_기준선) / 2;
datas = candleDatas.FindAll(i => datas = candleDatas.FindAll(i =>
candleDatas.IndexOf(i) >= 한봉전까지Index - LaggingSpan2Period && candleDatas.IndexOf(i) > endIndex - LaggingSpan2Period &&
candleDatas.IndexOf(i) <= 한봉전까지Index); candleDatas.IndexOf(i) <= endIndex);
// 선행스팬 2 // 선행스팬 2
nowCandle.IchimokData.선행스팬2 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; candleData.IchimokData.선행스팬2 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2;
// 일목균형표 (전봉데이터) // 일목균형표 (전봉데이터)
var 일목균형표_전봉 = candleData_전봉.IchimokData; candleData.IchimokData.상한선 = Math.Max(candleData.IchimokData.선행스팬1, candleData.IchimokData.선행스팬2);
var 일목균형표_상한선 = Math.Max(일목균형표_전봉.선행스팬1, 일목균형표_전봉.선행스팬2); candleData.IchimokData.하한선 = Math.Min(candleData.IchimokData.선행스팬1, candleData.IchimokData.선행스팬2);
var 일목균형표_하한선 = Math.Min(일목균형표_전봉.선행스팬1, 일목균형표_전봉.선행스팬2);
// 전봉
if (일목균형표_상한선 < candleData_전봉.Close && 일목균형표_상한선 < nowCandle.Close) nowCandle.IchimokData.IsLongUp = true;
else nowCandle.IchimokData.IsLongUp = false;
if (일목균형표_하한선 > candleData_전봉.Close && 일목균형표_하한선 > nowCandle.Close) nowCandle.IchimokData.IsShortDown = true;
else nowCandle.IchimokData.IsShortDown = false;
//if(일목균형표_상한선 > candleData_전봉.Close && )
if (candleData.IchimokData.상한선 < candleData.Close) candleData.IchimokData.IsLongUp = true;
else candleData.IchimokData.IsLongUp = false;
if (candleData.IchimokData.하한선 > candleData.Close) candleData.IchimokData.IsShortDown = true;
else candleData.IchimokData.IsShortDown = false;
if (candleData.IchimokData.상한선 > candleData.Close) candleData.IchimokData.IsLongDown = true;
else candleData.IchimokData.IsLongDown = false;
if (candleData.IchimokData.하한선 < candleData.Close) candleData.IchimokData.IsShortUp = true;
else candleData.IchimokData.IsShortUp = false;
} }

View File

@@ -15,13 +15,15 @@ namespace BitgetAPI.Data.IndicatorData
public double 선행스팬1 { get; set; } = 0; public double 선행스팬1 { get; set; } = 0;
public double 선행스팬2 { get; set; } = 0; public double 선행스팬2 { get; set; } = 0;
public double 상한선 { get; set; }
public double 하한선 { get; set; }
public bool IsLongUp { get; set; } = false; public bool IsLongUp { get; set; } = false;
public bool IsLongDown { get; set; } = false; public bool IsLongDown { get; set; } = false;
public bool IsShortUp { get; set; } = false; public bool IsShortUp { get; set; } = false;
public bool IsShortDown { get; set; } = false; public bool IsShortDown { get; set; } = false;
public bool IsUsedData { get; set; } = false; public bool IsUsedData { get; set; } = true;
} }
} }

View File

@@ -1,5 +1,8 @@
using System; using BitgetAPI.IndicatorConditionSetup;
using DevExpress.Utils.IoC;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -8,5 +11,15 @@ namespace BitgetAPI.Data
{ {
public class IndicatorProcess public class IndicatorProcess
{ {
CommonProperty commonProperty = CommonProperty.Instance;
// 전봉이 구름떼 돌파후 시가가 구름떼 위에서 시작하는 것
// 전봉이 구름떼 하락후 시가가 구름떼 밑에서 시작하는 것
public void calIchimokuProcess()
{
}
} }
} }

View File

@@ -60,7 +60,7 @@
this.checkEdit_ichmokuUp = new DevExpress.XtraEditors.CheckEdit(); this.checkEdit_ichmokuUp = new DevExpress.XtraEditors.CheckEdit();
this.labelControl6 = new DevExpress.XtraEditors.LabelControl(); this.labelControl6 = new DevExpress.XtraEditors.LabelControl();
this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); this.labelControl5 = new DevExpress.XtraEditors.LabelControl();
this.checkedComboBoxEdit1 = new DevExpress.XtraEditors.CheckedComboBoxEdit(); this.checkedComboBoxEdit_TimeInterval = new DevExpress.XtraEditors.CheckedComboBoxEdit();
this.checkedComboBoxEdit_MarketInfoList = new DevExpress.XtraEditors.CheckedComboBoxEdit(); this.checkedComboBoxEdit_MarketInfoList = new DevExpress.XtraEditors.CheckedComboBoxEdit();
this.marketInfoBindingSource = new System.Windows.Forms.BindingSource(this.components); this.marketInfoBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.treeListColumn1 = new DevExpress.XtraTreeList.Columns.TreeListColumn(); this.treeListColumn1 = new DevExpress.XtraTreeList.Columns.TreeListColumn();
@@ -101,7 +101,7 @@
this.groupControl_SearcherCondition.SuspendLayout(); this.groupControl_SearcherCondition.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_IchmokuDown.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_IchmokuDown.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_ichmokuUp.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_ichmokuUp.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit1.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_TimeInterval.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_MarketInfoList.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_MarketInfoList.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.marketInfoBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.marketInfoBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.popupMenu_marketInfo)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.popupMenu_marketInfo)).BeginInit();
@@ -391,7 +391,7 @@
this.groupControl_SearcherCondition.Controls.Add(this.checkEdit_ichmokuUp); this.groupControl_SearcherCondition.Controls.Add(this.checkEdit_ichmokuUp);
this.groupControl_SearcherCondition.Controls.Add(this.labelControl6); this.groupControl_SearcherCondition.Controls.Add(this.labelControl6);
this.groupControl_SearcherCondition.Controls.Add(this.labelControl5); this.groupControl_SearcherCondition.Controls.Add(this.labelControl5);
this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit1); this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit_TimeInterval);
this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit_MarketInfoList); this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit_MarketInfoList);
this.groupControl_SearcherCondition.Dock = System.Windows.Forms.DockStyle.Top; this.groupControl_SearcherCondition.Dock = System.Windows.Forms.DockStyle.Top;
this.groupControl_SearcherCondition.Location = new System.Drawing.Point(0, 0); this.groupControl_SearcherCondition.Location = new System.Drawing.Point(0, 0);
@@ -434,16 +434,16 @@
this.labelControl5.TabIndex = 1; this.labelControl5.TabIndex = 1;
this.labelControl5.Text = "종목 선택 : "; this.labelControl5.Text = "종목 선택 : ";
// //
// checkedComboBoxEdit1 // checkedComboBoxEdit_TimeInterval
// //
this.checkedComboBoxEdit1.Location = new System.Drawing.Point(65, 54); this.checkedComboBoxEdit_TimeInterval.Location = new System.Drawing.Point(65, 54);
this.checkedComboBoxEdit1.Name = "checkedComboBoxEdit1"; this.checkedComboBoxEdit_TimeInterval.Name = "checkedComboBoxEdit_TimeInterval";
this.checkedComboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { this.checkedComboBoxEdit_TimeInterval.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
this.checkedComboBoxEdit1.Properties.IncrementalSearch = true; this.checkedComboBoxEdit_TimeInterval.Properties.IncrementalSearch = true;
this.checkedComboBoxEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; this.checkedComboBoxEdit_TimeInterval.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
this.checkedComboBoxEdit1.Size = new System.Drawing.Size(547, 20); this.checkedComboBoxEdit_TimeInterval.Size = new System.Drawing.Size(547, 20);
this.checkedComboBoxEdit1.TabIndex = 0; this.checkedComboBoxEdit_TimeInterval.TabIndex = 0;
// //
// checkedComboBoxEdit_MarketInfoList // checkedComboBoxEdit_MarketInfoList
// //
@@ -670,7 +670,7 @@
this.groupControl_SearcherCondition.PerformLayout(); this.groupControl_SearcherCondition.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_IchmokuDown.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_IchmokuDown.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_ichmokuUp.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_ichmokuUp.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit1.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_TimeInterval.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_MarketInfoList.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_MarketInfoList.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.marketInfoBindingSource)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.marketInfoBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.popupMenu_marketInfo)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.popupMenu_marketInfo)).EndInit();
@@ -737,7 +737,7 @@
private DevExpress.XtraEditors.CheckEdit checkEdit_ichmokuUp; private DevExpress.XtraEditors.CheckEdit checkEdit_ichmokuUp;
private DevExpress.XtraEditors.LabelControl labelControl6; private DevExpress.XtraEditors.LabelControl labelControl6;
private DevExpress.XtraEditors.LabelControl labelControl5; private DevExpress.XtraEditors.LabelControl labelControl5;
private DevExpress.XtraEditors.CheckedComboBoxEdit checkedComboBoxEdit1; private DevExpress.XtraEditors.CheckedComboBoxEdit checkedComboBoxEdit_TimeInterval;
private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_SearchSignal; private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_SearchSignal;
private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_UpdateSignal; private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_UpdateSignal;
private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_FavoritePurchase; private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_FavoritePurchase;

View File

@@ -1,8 +1,11 @@
using BitgetApi.Data; using BitgetApi.Data;
using BitgetAPI.Data; using BitgetAPI.Data;
using BitgetAPI.IndicatorConditionSetup;
using BitgetAPI.WebService; using BitgetAPI.WebService;
using DevExpress.Utils.Extensions;
using DevExpress.Utils.MVVM; using DevExpress.Utils.MVVM;
using DevExpress.XtraEditors; using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.BandedGrid.Handler;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -37,6 +40,16 @@ namespace BitgetAPI
// 신호검색 스레드 함수 // 신호검색 스레드 함수
Thread th_SignalInfo = null; Thread th_SignalInfo = null;
// 신호검색 리스트 작성
// 신호 Long 상승 (구매)
List<SignalInfoData> signals_LU = null;
// 신호 Short 하락 (구매)
List<SignalInfoData> signals_SD = null;
// 검색현황 Long 하락 (판매)
List<SignalInfoData> signals_LD = null;
// 검색현황 Short 상승 (판매)
List<SignalInfoData> signals_SU = null;
// 종목별 캔들 데이터 : 캔들 개수 // 종목별 캔들 데이터 : 캔들 개수
const int candleCount = 200; const int candleCount = 200;
#endregion #endregion
@@ -66,6 +79,7 @@ namespace BitgetAPI
treeList_MarketInfo.EndSort(); treeList_MarketInfo.EndSort();
// 현황판 웹소켓 // 현황판 웹소켓
commonProperty.webSocketCandles = new List<WebSocketTickerInfo>();
th_MarketStatus = new Thread(() => ThreadEventAsync(BitgetWebSocketType.현황정보_전체종목, "ticker")); th_MarketStatus = new Thread(() => ThreadEventAsync(BitgetWebSocketType.현황정보_전체종목, "ticker"));
th_MarketStatus.Start(); th_MarketStatus.Start();
@@ -77,7 +91,16 @@ namespace BitgetAPI
th_SignalInfo = new Thread(new ThreadStart(Signalnfo)); th_SignalInfo = new Thread(new ThreadStart(Signalnfo));
th_SignalInfo.Start(); th_SignalInfo.Start();
// 신호 Long 상승 (구매)
signals_LU = new List<SignalInfoData>();
// 신호 Short 하락 (구매)
signals_SD = new List<SignalInfoData>();
// 검색현황 Long 하락 (판매)
signals_LD = new List<SignalInfoData>();
// 검색현황 Short 상승 (판매)
signals_SU = new List<SignalInfoData>();
treeList_LongUp.DataSource = signals_LU;
// API Key 가져오기 및 등록 // API Key 가져오기 및 등록
@@ -122,23 +145,105 @@ namespace BitgetAPI
// 신호검색 Thread 함수 // 신호검색 Thread 함수
private void Signalnfo() private void Signalnfo()
{ {
while(true) IchimokuConditionSetup ichimokuConditionSetup = new IchimokuConditionSetup();
/*
* 전환선 : (과거 n일간의 최고가 + 과거 n일간의 최저가) / 2
기준선 : (과거 m일간의 최고가 + 과거 m일간의 최저가) / 2
후행스팬 : 금일 종가를 ℓ일 전에 기입
선행스팬1 : (금일 전환선 + 금일 기준선) / 2한 값을 ℓ일 후에 기입
선행스팬2 : (과거 k일간의 최고가 + 과거 k일간의 최저가) /2한 값을 ℓ일 후에 기입
*/
while (true)
{ {
Thread.Sleep(300); Thread.Sleep(300);
var nowTime = DateTime.Now;
// 특정 시간 이후 삭제
foreach (var item in signals_LU)
{
// 시간 지나면 삭제
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime)
{
signals_LU.Remove(item);
}
}
foreach (var item in signals_LD)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) { signals_LD.Remove(item); }
foreach (var item in signals_SU)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) signals_SU.Remove(item);
foreach (var item in signals_SD)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) signals_SD.Remove(item);
var intervalList = checkedComboBoxEdit_TimeInterval.Properties.Items.GetCheckedValues();
// 체크된 마켓 정보
foreach (string market in checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues())
{
var findedMarket = commonProperty.candleDataLists.Find(i => i.ConGoodsData.MarketName == market);
foreach (CommonProperty.MCandleTimeType interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
// Description
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
if (!intervalList.Contains(description)) continue;
// 시간별로 정렬하기 (임시 리스트)
var candleDatas = findedMarket.candleDataList[interval];
var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument).ToList();
var candleData = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument);
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData);
candleDatas_정렬.RemoveAt(candleDatas_정렬.Count-1);
var candleData_전봉 = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument);
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전봉);
if (candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData_전봉.IchimokData.상한선)
{
var price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100;
var indicatorPrice = candleData.IchimokData.상한선;
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var signalData = signals_LU.Find(i => i.MarketName.Equals(market));
// 존재하면 업데이트
if (signalData != null)
{
signalData.Price = price;
signalData.rate = rate;
signalData.indicatorPrice = indicatorPrice;
signalData.indicoatorRate = indicatorRate;
}
// 없으면 생성
else
{
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = "상승 돌파";
signalData.rate = rate;
signalInfoData.Price = price;
signalInfoData.indicatorPrice = indicatorPrice;
signalInfoData.indicoatorRate = indicatorRate;
signals_LU.Add(signalInfoData);
}
}
}
}
Invoke(new MethodInvoker(delegate () Invoke(new MethodInvoker(delegate ()
{ {
// 신호검색 리스트 작성
// 신호 Long 상승 (구매)
List<SignalInfoData> signals_LU = new List<SignalInfoData>();
// 신호 Short 하락 (구매)
List<SignalInfoData> signals_SD = new List<SignalInfoData>();
// 검색현황 Long 하락 (판매)
List<SignalInfoData> signals_LD = new List<SignalInfoData>();
// 검색현황 Short 상승 (판매)
List<SignalInfoData> signals_SU = new List<SignalInfoData>();
var scrollPoint_LU = treeList_LongUp.TopVisibleNodeIndex; var scrollPoint_LU = treeList_LongUp.TopVisibleNodeIndex;
// 신호검색 트리리스트 설정 // 신호검색 트리리스트 설정
@@ -150,6 +255,7 @@ namespace BitgetAPI
} }
} }
// 종목별 캔들데이터 가져오기 (초기 설정) => Thread // 종목별 캔들데이터 가져오기 (초기 설정) => Thread
private void getMarketCandleData_WebService(ExchangeWebReqType exchangeWebReqType) private void getMarketCandleData_WebService(ExchangeWebReqType exchangeWebReqType)
{ {
@@ -205,7 +311,7 @@ namespace BitgetAPI
} }
break; break;
} }
// 초당 20회 제한 !!!! // 초당 20회 제한 !!!!
// Thread.Sleep(50); // Thread.Sleep(50);
var candleList = BitgetAPI.WebService.WebConnection.SendWebServer(exchangeWebReqType, url, marketCandleDataList, (CommonProperty.MCandleTimeType) interval); var candleList = BitgetAPI.WebService.WebConnection.SendWebServer(exchangeWebReqType, url, marketCandleDataList, (CommonProperty.MCandleTimeType) interval);
@@ -222,6 +328,7 @@ namespace BitgetAPI
xtraTabPage_Searcher.PageEnabled = true; xtraTabPage_Searcher.PageEnabled = true;
xtraTabControl_Main.SelectedTabPage = xtraTabPage_Searcher; xtraTabControl_Main.SelectedTabPage = xtraTabPage_Searcher;
})); }));
break;
} }
Invoke(new MethodInvoker(delegate () Invoke(new MethodInvoker(delegate ()
@@ -297,8 +404,13 @@ namespace BitgetAPI
// 조건 설정 : 체크콤보박스 마켓 정보 추가하기 // 조건 설정 : 체크콤보박스 마켓 정보 추가하기
foreach (var item in commonProperty.candleDataLists) foreach (var item in commonProperty.candleDataLists)
checkedComboBoxEdit_MarketInfoList.Properties.Items.Add(item.ConGoodsData.MarketName); checkedComboBoxEdit_MarketInfoList.Properties.Items.Add(item.ConGoodsData.MarketName);
// 조건 설정 : 체크콤보박스 시간별 정보 추가하기
commonProperty.webSocketCandles = new List<BitgetApi.Data.WebSocketTickerInfo>(); // 캔들 데이터 가져오기
foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
checkedComboBoxEdit_TimeInterval.Properties.Items.Add(description);
}
#region 캔들 웹소켓 : 종목 50, 캔들 1 개만 해도 뒤지려고 함 !! (일딴 패스) #region 캔들 웹소켓 : 종목 50, 캔들 1 개만 해도 뒤지려고 함 !! (일딴 패스)
/* /*