하아찡
[C#/WPF] Chart - 1 본문

추가내역
- Y축에 현재 코인이 존재할경우 내 평단가 데이터 추가 완료
내 잔고 리스트 다시 불러와 현재 로드한 차트랑 내 잔고에 해당 코인이 존재 할 경우 평단가 커서를 추가시키는 방향으로 코드를 작성했음.
차트에 출력하기위해 커서 구조 코드
public class ChartSideCursor : INotifyPropertyChanged
{
private double x;
public double X
{
get { return x; }
set
{
x = value;
OnPropertyChanged(nameof(x));
}
}
private double y;
public double Y
{
get { return y; }
set
{
y = value;
OnPropertyChanged(nameof(y));
}
}
private string cursorvalue;
public string CursorValue
{
get { return cursorvalue; }
set
{
cursorvalue = value;
OnPropertyChanged(nameof(cursorvalue));
}
}
private Brush backcolor;//색상
public Brush BackColor
{
get { return backcolor; }
set
{
backcolor = value;
OnPropertyChanged(nameof(backcolor));
}
}
private Brush color;//색상
public Brush Color
{
get { return color; }
set
{
color = value;
OnPropertyChanged(nameof(color));
}
}
public string Type { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
INotifyPropertyChanged를 추가해서 사용한 이유는 내부 데이터가 변경시 UI쪽도 변경이 일어나야해서 추가해줬음.
X값은 X축을 사용할때 캔버스에 그려지는 X축값임.
Y값은 Y축을 사용할때 캔버스에 그려지는 Y축값임.
CursorValue값은 해당 커서에 출력되는 값을 저장함.
Color값은 각 커서마다 색상을 다르게 하기위해 각각 저장시킴.
- BackColor값은 해당 커서 색과 텍스트 배경색값
- Color값은 텍스트 색상값.
아래코드는 차트에서 캔버스에 출력하기위해 Y축에 저장된 값을 변경하기위해 함수를 작성.
private void GetCoinPrice()
{
if (Market == "")
return;
UpbitFunctions.Accounts FAccount = new UpbitFunctions.Accounts();
double price = FAccount.GetAccountCoinPrice(Market);
if( price >= 0)
{
PrintChartYAxis[4].CursorValue = price.ToString();
PrintChartYAxis[4].Y = (GridHeight * ((MaxPrice - price) / (MaxPrice - MinPrice))) + GapYAxis;
}
else
{
PrintChartYAxis[4].Y = -100;
}
}
PrintChartYAxis 4번째는 내 평단가 출력하는 List값임.
아래코드는 잔고를 불러오는코드와 잔고안에 전달받은 코인이 존재하는지 확인 후 평단가를 전달해주는 함수.
public class Accounts
{
public async Task<List<Structs.Accounts>> AccountsAsync()
{
URLs url = new URLs();
List<Structs.Accounts> ListResult = new List<Structs.Accounts>();
if (!Access.UpbitInstance.GetAccess())
{
return ListResult;
}
try
{
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri(url.Account),
Headers =
{
{ "accept", "application/json" },
{ "Authorization", JWT.GetJWT() },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
JArray jsonArray = JArray.Parse(body);
foreach (var item in jsonArray.Children())
{
Structs.Accounts lr = new Structs.Accounts();
lr.Currency = item["currency"].ToString();
lr.Balance = item["balance"].ToString();
lr.Locked = item["locked"].ToString();
lr.AvgBuyPrice = item["avg_buy_price"].ToString();
lr.AvgBuyPriceModified = (bool)item["avg_buy_price_modified"];
lr.UnitCurrency = item["unit_currency"].ToString();
ListResult.Add(lr);
}
return ListResult;
}
}
catch (Exception e)
{
Language.Lang.Upbit Lang = new Language.Lang.Upbit();
string KeyError = Lang.LKeyError;
string KeyComment = Lang.LKeyComment;
MessageBox.Show(KeyError + "\n" + KeyComment);
//MessageBox.Show(e.ToString());
Logs.Loginstance.UpbitLog(KeyError);
Access.UpbitInstance.ExceptionKey();
return ListResult;
}
}
public double GetAccountCoinPrice(string Market)
{
double value = -1;
string[] str = Market.Split("-");
List<Structs.Accounts> accounts = Task.Run(() => AccountsAsync()).Result;
foreach(Structs.Accounts v in accounts)
{
if(v.UnitCurrency == str[0] && v.Currency == str[1])
{
value = Convert.ToDouble(v.AvgBuyPrice);
break;
}
}
return value;
}
해당코드는 Upbit OpenApi를 사용해서 AccessKey와 SecretKey를 할당받아야 사용가능함.
추후 Prism으로 변경할때 변경된 코드를 블로그에 정리하여 업로드 할때 코드들을 다 올리겠음.
반응형
'C# > 코인프로그램 - 진행상황' 카테고리의 다른 글
[C#/WPF] Chart - 3 (2) | 2023.11.26 |
---|---|
[C#/WPF] Chart - 2 (2) | 2023.11.25 |
[C#/WPF] WPF MVVM 패턴으로 작업중인 프로그램 Prism프레임워크 사용으로 변경... (0) | 2023.11.21 |
오랜만에 다시 작업 (0) | 2023.05.13 |
WPF - 호가창 및 차트 수정사항 완료 (1) | 2022.08.20 |