728x90
이전글 :
2021.12.14 - [업비트 자동매매 만들기] - [업비트 자동매매 C# winform] [API 요청하기][#2-3]
(압축 파일은 아래에 있습니다.)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using upbit.UpbitAPI.Model;
using Newtonsoft.Json;
namespace upbit.UpbitAPI {
public class APIClass {
private Param param;
private NoParam noparam;
public APIClass(string upbitAccessKey, string upbitSecretKey) {
param = new Param(upbitAccessKey, upbitSecretKey);
noparam = new NoParam(upbitAccessKey, upbitSecretKey);
}
/*--------------------- EXCHANGE API ---------------------*/
public List<Account> GetAccount() {
// 자산 - 전체 계좌 조회
var data = noparam.Get("/v1/accounts", RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<Account>>(data);
}
public OrderChance GetOrderChance(string market) {
// 주문 - 주문 가능 정보
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add( "market", market );
var data = param.Get("/v1/orders/chance", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<OrderChance>(data);
}
public Order GetOrder(string uuid) {
// 주문 - 개별 주문 조회
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("uuid", uuid);
var data = param.Get("/v1/order", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<Order>(data) ;
}
public CancelOrder CancelOrder(string uuid) {
// 주문 - 주문 취소 접수
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("uuid", uuid);
var data = param.Get("/v1/order", parameters, RestSharp.Method.DELETE);
return JsonConvert.DeserializeObject<CancelOrder>(data);
}
public MakeOrder MakeOrderLimit(string market, OrderSide orderSide, double volume, double price ) {
// 주문 - 주문하기 - 지정가 매수&매도
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("side", orderSide.ToString() );
parameters.Add("volume", volume.ToString() );
parameters.Add("price", price.ToString());
parameters.Add("ord_type", "limit");
var data = param.Get("/v1/orders", parameters, RestSharp.Method.POST);
return JsonConvert.DeserializeObject<MakeOrder>(data);
}
public MakeOrderMarketBuy MakeOrderMarketBuy(string market, double price ) {
// 주문 - 주문하기 - 시장가매수
/* 주문 가격. (지정가, 시장가 매수 시 필수)
ex) KRW-BTC 마켓에서 1BTC당 1,000 KRW로 거래할 경우, 값은 1000 이 된다.
ex) KRW-BTC 마켓에서 1BTC당 매도 1호가가 500 KRW 인 경우,
시장가 매수 시 값을 1000으로 세팅하면 2BTC가 매수된다.
(수수료가 존재하거나 매도 1호가의 수량에 따라 상이할 수 있음)
--> 결론 : price는 원화가치인듯 */
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("side", OrderSide.bid.ToString());
parameters.Add("price", price.ToString());
parameters.Add("ord_type", "price");
var data = param.Get("/v1/orders", parameters, RestSharp.Method.POST);
return JsonConvert.DeserializeObject<MakeOrderMarketBuy>(data);
}
public MakeOrderMarketSell MakeOrderMarketSell(string market, double volume ) {
// 주문 - 주문하기 - 시장가매도
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("side", OrderSide.ask.ToString() );
parameters.Add("volume", volume.ToString());
parameters.Add("ord_type", "market");
var data = param.Get("/v1/orders", parameters, RestSharp.Method.POST);
return JsonConvert.DeserializeObject<MakeOrderMarketSell>(data);
}
/*--------------------- QUOTATION API ---------------------*/
public List<MarketAll> GetMarketAll() {
// 시세 종목 조회 - 마켓 코드 조회
var data = noparam.Get("/v1/market/all", RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<MarketAll>>(data);
}
public List<CandleMinute> GetCandleMinutes( string market, MinuteUnit unit, DateTime to=default(DateTime) , int count = 1 ) {
// 시세 캔들 조회 - 분(Minute) 캔들
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("to", to.ToString("yyyy-MM-dd HH:mm:ss"));
parameters.Add("count", count.ToString());
var data = param.Get(String.Join("", "/v1/candles/minutes/", (int)unit), parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<CandleMinute>>(data);
}
public List<CandleDay> GetCandleDays(string market, DateTime to = default(DateTime), int count = 1) {
// 시세 캔들 조회 - 일(Day) 캔들
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("to", to.ToString("yyyy-MM-dd HH:mm:ss"));
parameters.Add("count", count.ToString());
var data = param.Get("/v1/candles/days", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<CandleDay>>(data);
}
public List<CandleWeek> GetCandleWeeks(string market, DateTime to = default(DateTime), int count = 1) {
// 시세 캔들 조회 - 주(Week) 캔들
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("to", to.ToString("yyyy-MM-dd HH:mm:ss"));
parameters.Add("count", count.ToString());
var data = param.Get("/v1/candles/weeks", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<CandleWeek>>(data);
}
public List<CandleMonth> GetCandleMonths(string market, DateTime to = default(DateTime), int count = 1) {
// 시세 캔들 조회 - 월(Month) 캔들
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("market", market);
parameters.Add("to", to.ToString("yyyy-MM-dd HH:mm:ss"));
parameters.Add("count", count.ToString());
var data = param.Get("/v1/candles/months", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<CandleMonth>>(data);
}
public List<Ticker> GetTicker(string markets) {
// 시세 Ticker조회 - 현재가정보
// market을 콤마로 구분하여 입력한다.
// ex) "KRW-BTC, KRW-ETH, ....."
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("markets", markets);
var data = param.Get("/v1/ticker", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<Ticker>>(data);
}
public List<OrderBook> GetOrderBook(string markets) {
// 시세 호가 정보 조회 - 호가 정보 조회
// market을 콤마로 구분하여 입력한다.
// ex) "KRW-BTC, KRW-ETH, ....."
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("markets", markets);
var data = param.Get("/v1/orderbook", parameters, RestSharp.Method.GET);
return JsonConvert.DeserializeObject<List<OrderBook>>(data);
}
public enum OrderSide {
bid, // 매수
ask // 매도
}
public enum MinuteUnit {
_1 = 1,
_3 = 3,
_5 = 5,
_10 = 10,
_15 = 15,
_30 = 30,
_60 = 60,
_240 = 240
}
}
}
https://drive.google.com/file/d/1KPXkczMpXxHGiWwNebjtLn1c41HEtqqg/view?usp=sharing
수정본입니다.
https://drive.google.com/file/d/1aYUl6WxN0qXIGncn9iG6-9yrRY8dP7WS/view?usp=sharing
다음글:
2021.12.21 - [코인 자동매매 일지] - [업비트 자동매매 C# winform] [로그인 기능][#3]
'업비트 자동매매 만들기' 카테고리의 다른 글
[#4-1][업비트 자동매매 C# winform][현재가받기&잔고기능] (0) | 2021.12.24 |
---|---|
[#3][업비트 자동매매 C# winform] [로그인 기능] (1) | 2021.12.21 |
[#2-3][업비트 자동매매 C# winform] [API 요청하기] (12) | 2021.12.14 |
[#2-2][업비트 자동매매 C# winform] [API 소스] (1) | 2021.12.14 |
[#2-1][업비트 자동매매 C# winform] [프로젝트 생성] (0) | 2021.12.14 |
댓글