test
This commit is contained in:
@@ -94,7 +94,6 @@
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\licenses.licx" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
|
||||
@@ -91,6 +91,10 @@ namespace BitgetAPI
|
||||
BitgetCandleStick_Coin = 22,
|
||||
[Description("BitgetMCandle_FUTURE")]
|
||||
BitgetCandleStick_Future = 23,
|
||||
[Description("BitgetAccountList_FUTURE")]
|
||||
BitgetAccountList_Future = 30,
|
||||
[Description("BitgetOrder_FUTURE")]
|
||||
BitgetOrder_Future = 31
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -98,9 +102,47 @@ namespace BitgetAPI
|
||||
public enum BitgetWebSocketType
|
||||
{
|
||||
현황정보_전체종목 = 0,
|
||||
캔들정보 = 1
|
||||
캔들정보 = 1,
|
||||
보유List = 2,
|
||||
주문하기 = 3,
|
||||
}
|
||||
|
||||
public enum Side
|
||||
{
|
||||
[Description("buy")]
|
||||
buy = 0,
|
||||
[Description("sell")]
|
||||
sell =1
|
||||
}
|
||||
|
||||
public enum OrderType
|
||||
{
|
||||
[Description("limit")]
|
||||
limit = 0,
|
||||
[Description("market")]
|
||||
market = 1,
|
||||
}
|
||||
|
||||
#region 선물거래 관련
|
||||
public enum FutureMarginMode
|
||||
{
|
||||
[Description("isolated")]
|
||||
isolated = 0,
|
||||
[Description("crossed")]
|
||||
crossed = 1,
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum FutureSide
|
||||
{
|
||||
BuyShort = 0,
|
||||
BuyLong = 1,
|
||||
SellShort = 0,
|
||||
SellLong = 1,
|
||||
}
|
||||
#endregion
|
||||
|
||||
// 시가/고가/종가/저가
|
||||
public enum CandlePriceType
|
||||
{
|
||||
@@ -150,8 +192,7 @@ namespace BitgetAPI
|
||||
캔들 = 1,
|
||||
거래량 = 2
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region 업비트 URL
|
||||
public static string UpbitURL = "https://api.upbit.com/";
|
||||
public static string UpbitURL_MarketInfo = "https://api.upbit.com/v1/market/all";
|
||||
@@ -176,8 +217,10 @@ namespace BitgetAPI
|
||||
public static string BitgetURL_MarketInfo_FUTURE = "https://api.bitget.com/api/v2/mix/market/tickers?productType=USDT-FUTURES";
|
||||
|
||||
public static string BitgetURL_MarketCandle_Coin = "https://api.bitget.com/api/v2/spot/market/candles?symbol={0}&granularity={1}in&startTime={2}&endTime={3}&limit={4}";
|
||||
public static string BitgetURL_MarketCandle_Future = "https://api.bitget.com/api/v2/mix/market/candles?symbol={0}&granularity={1}&limit={2}&productType={3}";
|
||||
public static string BitgetURL_MarketCandle_Future = "https://api.bitget.com/api/v2/mix/market/candles?symbol={0}&granularity={1}&limit={2}&productType={3}";
|
||||
|
||||
public static string BitgetURL_AccountList_Future = @"https://api.bitget.com/api/v2/mix/account/accounts?productType=USDT-FUTURES";
|
||||
public static string BitgetURL_BuySellOrder_Future = @"https://api.bitget.com/api/v2/mix/order/place-order?";
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -1,15 +1,29 @@
|
||||
using BitgetApi.Data;
|
||||
using BitgetAPI.IndicatorConditionSetup;
|
||||
using BitgetAPI.WebService;
|
||||
using DevExpress.Utils.CodedUISupport;
|
||||
using DevExpress.Utils.Filtering.Internal;
|
||||
using DevExpress.Utils.IoC;
|
||||
using DevExpress.XtraPrinting.HtmlExport.Native;
|
||||
using DevExpress.XtraPrinting.Native;
|
||||
using DevExpress.XtraSpellChecker;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using static BitgetAPI.CommonProperty;
|
||||
using System.Web;
|
||||
using System.Windows.Media.Media3D;
|
||||
using DevExpress.XtraPrinting;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
|
||||
using static DevExpress.XtraPrinting.Native.ExportOptionsPropertiesNames;
|
||||
using System.Security.Cryptography;
|
||||
using System.Globalization;
|
||||
|
||||
|
||||
namespace BitgetAPI.IndicatorConditionSetup
|
||||
{
|
||||
@@ -17,6 +31,11 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
{
|
||||
CommonProperty commonProperty = CommonProperty.Instance;
|
||||
|
||||
//영호 Key
|
||||
private string YHKIM_AccessKey = "bg_f93aa530288b6ec9d62095994c51972a";
|
||||
private string YHKIM_SecreteKey = "2fce18bcd12ca23a7920c48295a58da031443ea383af8114ed599c1b14ac678e";
|
||||
private string YHKIM_PassphraseKey = "dudgh0505";
|
||||
|
||||
// 스레드 시작/종료 플래그
|
||||
public bool Is_th_SignalInfo;
|
||||
public Dictionary<string, Dictionary<string, object>> 전저점 = new Dictionary<string, Dictionary<string, object>>();
|
||||
@@ -67,6 +86,8 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
signals_LD.Clear();
|
||||
signals_SU.Clear();
|
||||
|
||||
GetFutureAccountList();
|
||||
|
||||
// 추후 공통화 및 소스정리 필요
|
||||
while (true)
|
||||
{
|
||||
@@ -818,6 +839,88 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
}
|
||||
}
|
||||
|
||||
public List<Dictionary<string, object>> GetFutureAccountList()
|
||||
{
|
||||
var timeSpan = DateTime.Now;
|
||||
|
||||
var timestamp = (((DateTimeOffset)timeSpan).ToUnixTimeSeconds() * 1000).ToString();
|
||||
|
||||
var reqStr = "/api/v2/mix/account/accounts";
|
||||
|
||||
var nvc = new NameValueCollection {
|
||||
{"ACCESS-KEY", YHKIM_AccessKey},
|
||||
{"ACCESS-SIGN", GenerateSignString(timestamp, "GET", reqStr, "productType=USDT-FUTURES", null, YHKIM_SecreteKey) },
|
||||
{"ACCESS-PASSPHRASE", YHKIM_PassphraseKey },
|
||||
{"ACCESS-TIMESTAMP",timestamp}
|
||||
};
|
||||
|
||||
return (List<Dictionary<string, object>>)WebConnection.SendWebServer(ExchangeWebReqType.BitgetAccountList_Future, BitgetURL_AccountList_Future, null, MCandleTimeType.M1, "", "", nvc);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Dictionary<string, object> FutureOrder(string symbol, FutureMarginMode marginMode, double size, double price, FutureSide futureSide, OrderType orderType)
|
||||
{
|
||||
var side = "";
|
||||
var tradeSide = "";
|
||||
|
||||
if(futureSide == FutureSide.BuyShort)
|
||||
{
|
||||
side = "sell";
|
||||
tradeSide = "open";
|
||||
}
|
||||
else if (futureSide == FutureSide.BuyLong)
|
||||
{
|
||||
side = "buy";
|
||||
tradeSide = "Open";
|
||||
}
|
||||
else if (futureSide == FutureSide.SellShort)
|
||||
{
|
||||
side = "sell";
|
||||
tradeSide = "close";
|
||||
}
|
||||
else if (futureSide == FutureSide.SellShort)
|
||||
{
|
||||
side = "buy";
|
||||
tradeSide = "close";
|
||||
}
|
||||
|
||||
if (orderType == OrderType.limit)
|
||||
price = 0;
|
||||
|
||||
var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
|
||||
|
||||
var timestamp = (timeSpan.TotalSeconds * 1000).ToString();
|
||||
|
||||
var reqStr = "/api/v2/mix/order/place-order";
|
||||
|
||||
var nvc = new NameValueCollection {
|
||||
{"ACCESS-KEY", new Guid().ToString()},
|
||||
{"ACCESS-SIGN", GenerateSignString(timestamp, "POST", reqStr, "", null, YHKIM_SecreteKey)},
|
||||
{"ACCESS-PASSPHRASE", YHKIM_PassphraseKey },
|
||||
{"ACCESS-TIMESTAMP", timestamp}
|
||||
};
|
||||
|
||||
var postStr = string.Format("{\"symbol\": \"{0}\", \"productType\": \"usdt - futures\", \"marginMode\": \"{1}\", \"marginCoin\": \"USDT\", \"size\": \"{2}\", \"price\": \"{3}\", \"side\": \"{4}\", " +
|
||||
"\"tradeSide\": \"{5}\", \"orderType\": \"{6}\", \"force\": \"gtc\", \"clientOid\": \"{8}\" }",
|
||||
symbol, Utils.Convertor.GetEnumDescription((Enum)marginMode), size.ToString(),
|
||||
price.ToString(), side, tradeSide, Utils.Convertor.GetEnumDescription((Enum)orderType), new Guid().ToString());
|
||||
|
||||
return (Dictionary<string, object>)WebConnection.SendWebServer(ExchangeWebReqType.BitgetOrder_Future, BitgetURL_BuySellOrder_Future, null, MCandleTimeType.M1, postStr, "", nvc);
|
||||
}
|
||||
|
||||
public string GenerateSignString(string timestamp, string method, string requestPath, string queryString, string body, string secretKey)
|
||||
{
|
||||
method = method.ToUpper();
|
||||
body = body == null ? "" : body;
|
||||
queryString = string.IsNullOrWhiteSpace(queryString) ? "" : "?" + queryString;
|
||||
string preHash = timestamp + method + requestPath + queryString + body;
|
||||
|
||||
var encSecretKey_byteData = System.Text.Encoding.UTF8.GetBytes(secretKey);
|
||||
var encPreHash_byteData = System.Text.Encoding.UTF8.GetBytes(preHash);
|
||||
|
||||
return Convert.ToBase64String(new HMACSHA256(encSecretKey_byteData).ComputeHash(encPreHash_byteData));
|
||||
}
|
||||
|
||||
public void calIchimokuProcess_Add()
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ using System.Runtime.InteropServices;
|
||||
using DevExpress.XtraEditors.Filtering;
|
||||
using DevExpress.XtraExport.Xls;
|
||||
using DevExpress.Utils.Filtering.Internal;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace BitgetAPI.WebService
|
||||
{
|
||||
@@ -40,7 +41,7 @@ namespace BitgetAPI.WebService
|
||||
|
||||
public static object SendWebServer(CommonProperty.ExchangeWebReqType exchangeWebReqType, string url = "",
|
||||
MarketCandleDataList marketCandleDataList = null, CommonProperty.MCandleTimeType interval = MCandleTimeType.M1,
|
||||
string postData = "", string subUri = "")
|
||||
string postData = "", string subUri = "", NameValueCollection headers = null)
|
||||
{
|
||||
object returnJsonData = null;
|
||||
|
||||
@@ -56,6 +57,8 @@ namespace BitgetAPI.WebService
|
||||
// 웹 전송 타입 지정
|
||||
var webConType = CommonProperty.WebConnectionType.GET;
|
||||
|
||||
if(postData.Length > 0) webConType = CommonProperty.WebConnectionType.POST;
|
||||
|
||||
// 1. WebRequest 객체 형성 및 HttpWebRequest 로 형변환
|
||||
// 2. 거래소에 따른 헤더 파일 처리(POST 일 경우만 지정함)
|
||||
|
||||
@@ -82,13 +85,13 @@ namespace BitgetAPI.WebService
|
||||
break;
|
||||
case CommonProperty.ExchangeWebReqType.BitgetCandleStick_Future:
|
||||
wReq = (HttpWebRequest)WebRequest.Create(new Uri(CommonProperty.BitgetURL_MarketCandle_Future));
|
||||
break;
|
||||
#endregion
|
||||
break;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
else wReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
|
||||
|
||||
|
||||
|
||||
// GET, POST 구분
|
||||
switch (webConType)
|
||||
{
|
||||
@@ -105,6 +108,12 @@ namespace BitgetAPI.WebService
|
||||
break;
|
||||
}
|
||||
|
||||
if (headers != null)
|
||||
{
|
||||
wReq.Headers.Add(headers);
|
||||
wReq.ContentType = "application/json";
|
||||
}
|
||||
|
||||
using (var wRes = (HttpWebResponse)wReq.GetResponse())
|
||||
{
|
||||
var respPostStream = wRes.GetResponseStream();
|
||||
@@ -144,7 +153,6 @@ namespace BitgetAPI.WebService
|
||||
|
||||
return commonProperty.marketInfoList;
|
||||
}
|
||||
break;
|
||||
case CommonProperty.ExchangeWebReqType.BitgetCandleStick_Coin:
|
||||
{
|
||||
|
||||
@@ -251,6 +259,15 @@ namespace BitgetAPI.WebService
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ExchangeWebReqType.BitgetAccountList_Future:
|
||||
{
|
||||
var datalist = JsonConvert.DeserializeObject<Dictionary<string, object>>(resResult);
|
||||
return JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(datalist["data"]?.ToString());
|
||||
}
|
||||
case ExchangeWebReqType.BitgetOrder_Future:
|
||||
{
|
||||
return JsonConvert.DeserializeObject<Dictionary<string, object>>(resResult);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user