C#版支持多账户的交易api实现
能够部署到自己的自动化交易系统的API接口
也可以生成为DLL接口,采用Python等编程语言进行量化自动交易实现。
也可以在自己熟悉的编程语言中接入。
采用C# Dotnet Core架构异步处理,可以任意部署到自己的系统中。
不经过外部中转,直连券商交易,无界面运行,非模拟按键操作。
支持几乎大部分券商。
支持系统 Centos,Ubuntu,Docker,Windows等
支持32位,64位不限
[HttpPost("TradeInit")]
[Description("初始化API")]
public async Task<JsonResult> TradeInit([FromForm] IFormCollection form)
{
var result = await Task.Run(() =>
{
var ret = Api.Init();
if (ret.Contains("OK"))
{
Dictionary<string, string> data = new Dictionary<string, string>()
{
{"Expire",ret.Split(':')[1] },
{"Version",ret.Split(':')[2] }
};
return new ReturnResult<object>(ReturnResult.OK, $"初始化完成,{ret}", data);
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, ret, "");
});
return Json(result);
}
[HttpPost("Connect")]
[Description("连接服务器")]
public async Task<JsonResult> Connect([FromForm] IFormCollection form)
{
var result = await Task.Run(() => {
var ret = Api.Connect();
if (ret.Contains("OK"))
{
return new ReturnResult<object>(ReturnResult.OK, "已连接服务器","");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, ret,"");
});
return Json(result);
}
[HttpPost("Disconnect")]
[Description("断开服务器连接")]
public async Task<JsonResult> Disconnect([FromForm] IFormCollection form)
{
var result = await Task.Run(() => {
var ret = Api.Disconnect();
if (ret)
{
return new ReturnResult<object>(ReturnResult.OK, "已连断开服务器连接", "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, "断开连接失败", "");
});
return Json(result);
}
[HttpPost("GetCode")]
[Description("发送验证码")]
public async Task<JsonResult> GetCode([FromForm] IFormCollection form)
{
string mobile = form["mobile"];
var result = await Task.Run(() => {
if (Api.GetLoginMobileCode(mobile, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg,"");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("VerifyMobile")]
[Description("验证手机号")]
public async Task<JsonResult> VerifyMobile([FromForm] IFormCollection form)
{
string mobile = form["mobile"];
string code = form["code"];
var result = await Task.Run(() => {
if (Api.LoginMobile(mobile, code, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg,"");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("Login")]
[Description("登录券商")]
public async Task<JsonResult> Login([FromForm] IFormCollection form)
{
string account = form["account"];
string password = form["password"];
string qsid = form["qsid"];
int islr = int.Parse(form["islr"]);
string wtid = form["wtid"];
string type = form["type"];
var result = await Task.Run(() => {
if (Api.SecuritiesLogin(account, password, qsid, wtid,out string msg, islr, type))
{
var token = msg.Split('|')[1];
msg = msg.Split('|')[0];
Dictionary<string, string> data = new Dictionary<string, string>()
{
{"Token",token }
};
return new ReturnResult<object>(ReturnResult.OK, msg, data);
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetBalance")]
[Description("查询资金股份")]
public async Task<JsonResult> GetBalance([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
var result = await Task.Run(() => {
if (Api.QueryData(account, token, 0, out string msg))
{
if (msg.JsonValid())
{
var jsonObject = JsonSerializer.Deserialize<Dictionary<string, object>>(msg);
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetPosition")]
[Description("查询持仓")]
public async Task<JsonResult> GetPosition([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
var result = await Task.Run(() => {
if (Api.QueryData(account, token, 1, out string msg))
{
if (msg.JsonValid())
{
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(msg);
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetTodayEntrusts")]
[Description("查询当日成交")]
public async Task<JsonResult> GetTodayEntrusts([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
var result = await Task.Run(() => {
if (Api.QueryData(account, token, 2, out string msg))
{
if (msg.JsonValid())
{
var json = msg.ToJObject()["成交列表"];
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json.ToJsonStr());
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetTodayTrades")]
[Description("查询当日委托")]
public async Task<JsonResult> GetTodayTrades([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
var result = await Task.Run(() => {
if (Api.QueryData(account, token, 3, out string msg))
{
if (msg.JsonValid())
{
var json = msg.ToJObject().ContainsKey("委托列表") ? msg.ToJObject()["委托列表"] : msg.ToJObject()["委托撤单查询"];
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json.ToJsonStr());
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetHistoryEntrusts")]
[Description("查询历史成交")]
public async Task<JsonResult> GetHistoryEntrusts([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string start = form["start"];
string end = form["end"];
var result = await Task.Run(() => {
if (Api.QueryHistoryData(account, token, 0, start, end, out string msg))
{
if (msg.JsonValid())
{
var json = msg.ToJObject().ContainsKey("历史成交列表") ? msg.ToJObject()["历史成交列表"] : msg.ToJObject()["历史成交查询"];
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json.ToJsonStr());
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg,"");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetHistoryTrades")]
[Description("查询历史委托")]
public async Task<JsonResult> GetHistoryTrades([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string start = form["start"];
string end = form["end"];
var result = await Task.Run(() => {
if (Api.QueryHistoryData(account, token, 1, start, end, out string msg))
{
if (msg.JsonValid())
{
var json = msg.ToJObject().ContainsKey("历史委托列表") ? msg.ToJObject()["历史委托列表"] : msg.ToJObject()["历史委托查询"];
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json.ToJsonStr());
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("Buy")]
[Description("买入")]
public async Task<JsonResult> Buy([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string code = form["code"];
string price = form["price"];
string vol = form["vol"];
var result = await Task.Run(() => {
if (Api.TradeOrder(account, token, 0,code, price, vol, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("Sell")]
[Description("卖出")]
public async Task<JsonResult> Sell([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string code = form["code"];
string price = form["price"];
string vol = form["vol"];
var result = await Task.Run(() => {
if (Api.TradeOrder(account, token, 1, code, price, vol, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("TradeOrder")]
[Description("交易下单")]
public async Task<JsonResult> TradeOrder([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
int category = int.Parse(form["category"]);
string code = form["code"];
string price = form["price"];
string vol = form["vol"];
var result = await Task.Run(() => {
if (Api.TradeOrder(account, token, category, code, price, vol, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("Cancel")]
[Description("撤单")]
public async Task<JsonResult> Cancel([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string code = form["code"];
string htbh = form["htbh"];
var result = await Task.Run(() => {
if (Api.CancelOrder(account, token, code, htbh, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("BuyBackLend")]
[Description("逆回购借出")]
public async Task<JsonResult> BuyBackLend([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string code = form["code"];
string price = form["price"];
string vol = form["vol"];
var result = await Task.Run(() => {
if (Api.BuyBackLend(account, token, code, price, vol, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("LendCancelOrder")]
[Description("逆回购撤单")]
public async Task<JsonResult> LendCancelOrder([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
string code = form["code"];
string htbh = form["htbh"];
var result = await Task.Run(() => {
if (Api.LendCancelOrder(account, token, code, htbh, out string msg))
{
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetLendTrades")]
[Description("查询逆回购当日委托")]
public async Task<JsonResult> GetLendTrades([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
var result = await Task.Run(() => {
if (Api.LendQueryData(account, token, 0, out string msg))
{
if (msg.JsonValid())
{
var json = msg.ToJObject().ContainsKey("委托列表") ? msg.ToJObject()["委托列表"] : msg.ToJObject()["委托撤单查询"];
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json.ToJsonStr());
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}
[HttpPost("GetLendPosition")]
[Description("查询逆回购当日成交")]
public async Task<JsonResult> GetLendPosition([FromForm] IFormCollection form)
{
string account = form["account"];
string token = form["token"];
var result = await Task.Run(() => {
if (Api.LendQueryData(account, token, 1, out string msg))
{
if (msg.JsonValid())
{
var json = msg.ToJObject()["成交列表"];
var jsonObject = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json.ToJsonStr());
return new ReturnResult<object>(ResultStatusCode.OK, jsonObject, jsonObject.Count());
}
return new ReturnResult<object>(ReturnResult.OK, msg, "");
}
return new ReturnResult<object>(System.Net.HttpStatusCode.RequestTimeout, msg, "");
});
return Json(result);
}