人間には限界があり、感情の影響を受けることは誰もが知っています。主導権を握るために、プログラマティック取引が誕生し、API インターフェースがその中間の橋渡しとなります。
API インターフェイスとは何ですか? API インターフェイスは株式プログラム取引に必要なものです。車の車輪と同様、これなしではプログラムによるトランザクションは行われません。
ただし、API インターフェイスの使用は、クリックするだけでは利用できず、プログラミング言語をロードして呼び出すことで接続されます。
今日は、C# で呼び出される実際の API トランザクション インターフェイスの例を共有したいと思います。
using System.Runtime.InteropServices;
using System.Text;
namespace MetaTradeDemo;
/// <summary>
/// MetaTrade 接口
/// </summary>
public static class MetaTrade
{
/* ---------------------------------------------------------------------------------
* 简单说明:
* 1.此文件为 .Net 与 MetaTrade 接口混合调用的接口文件
* 2.通常不需要修改此文件内容, 除非你非常了解 .Net 与 C++ 的调用规范
* 3.本接口在 .net6 下测试通过, .net6 为当前长期支持版本, 强烈建议您也使用这个版本
* ---------------------------------------------------------------------------------
*/
/// <summary>
/// 初始化接口
/// 调用此方法将会检验授权, 并返回授权的账户数量
/// 建议在程序启动时, 调用此方法, 以便再进行后续操作
/// </summary>
/// <returns>已授权的账户数</returns>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern int Init();
/// <summary>
/// 反初始化接口
/// 建议在程序退出出调用些方法
/// </summary>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern void Deinit();
/// <summary>
/// 登录账户
/// </summary>
/// <param name="ip">服务端 Ip 地址</param>
/// <param name="port">端口号</param>
/// <param name="version">版本号, 默认为空</param>
/// <param name="yybId">营业部, 默认为零</param>
/// <param name="account">账号, 同授权账号</param>
/// <param name="tradeAccount">资金账号</param>
/// <param name="jyPassword">交易密码</param>
/// <param name="txPassword">通讯密码</param>
/// <param name="errorInfo">错误信息,一般要分配256字节的空间,出错时为非空字符串</param>
/// <returns>客户端 Id</returns>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern int Logon(string ip, short port, string version, short yybId, string account, string tradeAccount, string jyPassword, string txPassword, StringBuilder errorInfo);
/// <summary>
/// 注销账户
/// </summary>
/// <param name="clientId">客户端 Id</param>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern void Logoff(int clientId);
#region + QueryData / SendOrder / CancelOrder / GetQuote / Repay
/// <summary>
/// 查询各种交易数据
/// </summary>
/// <param name="clientId">客户端 Id</param>
/// <param name="category">信息种类:0资金,1股份,2当日委托,3当日成交,4可撤单,5股东代码,6融资余额,7融券余额,8可融证券</param>
/// <param name="result">返回信息,一般要分配1024*1024字节的空间,出错时为空字符串。</param>
/// <param name="errorInfo">错误信息,一般要分配256字节的空间,出错时为非空字符串</param>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern void QueryData(int clientId, int category, StringBuilder result, StringBuilder errorInfo);
/// <summary>
/// 委托下单
/// </summary>
/// <param name="clientId">客户端 Id</param>
/// <param name="category">委托种类:0买入,1卖出,2融资买入,3融券卖出,4买券还券,5卖券还款,6现券还券</param>
/// <param name="entrustType">委托类型:0上海限价委托;深圳限价委托,1深圳对方最优价格,2深圳本方最优价格,3深圳即时成交剩余撤销,4上海五档即成剩撤;深圳五档即成剩撤,5深圳全额成交或撤销,6上海五档即成转限价</param>
/// <param name="gddm">股东代码</param>
/// <param name="zqdm">证券代码</param>
/// <param name="price">委托价格</param>
/// <param name="quantity">委托数量</param>
/// <param name="result">返回信息,一般要分配1024*1024字节的空间,出错时为空字符串。</param>
/// <param name="errorInfo">错误信息,一般要分配256字节的空间,出错时为非空字符串</param>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern void SendOrder(int clientId, int category, int entrustType, string gddm, string zqdm, float price, int quantity, StringBuilder result, StringBuilder errorInfo);
/// <summary>
/// 委托撤单
/// </summary>
/// <param name="clientId">客户端 Id</param>
/// <param name="exchangeId">交易所 Id:A1上海,A0深圳(部分券商是2)</param>
/// <param name="entrustId">委托编号</param>
/// <param name="result">返回信息,一般要分配1024*1024字节的空间,出错时为空字符串。</param>
/// <param name="errorInfo">错误信息,一般要分配256字节的空间,出错时为非空字符串</param>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern void CancelOrder(int clientId, string exchangeId, string entrustId, StringBuilder result, StringBuilder errorInfo);
/// <summary>
/// 查询五档行情
/// </summary>
/// <param name="clientId">客户端 Id</param>
/// <param name="zqdm">证券代码</param>
/// <param name="result">返回信息,一般要分配1024*1024字节的空间,出错时为空字符串。</param>
/// <param name="errorInfo">错误信息,一般要分配256字节的空间,出错时为非空字符串</param>
[DllImport("MetaTrade.dll", CharSet = CharSet.Ansi)]
public static extern void GetQuote(int clientId, string zqdm, StringBuilder result, StringBuilder errorInfo);
上記は、C# での MetaTrade インターフェイスのデモ例です。.NET バージョンは .NET6 であることが望ましいことに注意してください。
パラメータの展開は簡単です。接続後の安定性が高い。戦略に関しては、感情に左右されず、単に五胡が飛び立つだけです。