커밋!!
This commit is contained in:
@@ -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; }
|
||||||
// 종목 설명 (시간별, 어떤거?)
|
// 종목 설명 (시간별, 어떤거?)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
26
BitgetApi/MainForm.Designer.cs
generated
26
BitgetApi/MainForm.Designer.cs
generated
@@ -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;
|
||||||
|
|||||||
@@ -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 개만 해도 뒤지려고 함 !! (일딴 패스)
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user