(MT4ClientApi)MT4跟单之异步函数篇

发布于 2019-11-01 23:58:25

所有交易函数(OrderSend,OrderClose,OrderModify,OrderDelete)和Connect功能都有Async 后缀的异步函数。 异步函数的是进入另一个线程,需要使用事件OnConnect(ConnectAsync)和OnOrderProgress(交易函数)来接收结果。 以下示例如何同时发送两个订单。 这可用于跟单,在从信号账户获得订单更新后,您可以同时将该更新发送给所有跟单账号。

void Run()
{
    try
    {
	    MainServer srv = QuoteClient.LoadSrv(
        @"C:\srv\CreatForex-Demo.srv");
        QuoteClient qc = new QuoteClient(99999, "abcd123", srv.Host, srv.Port);
        Console.WriteLine("正在连接...");
        qc.Connect();
        OrderClient oc1 = new OrderClient(qc);
        oc1.OnOrderProgress += new OrderProgressEventHandler(oc_OnOrderProgress);
        OrderClient oc2 = new OrderClient(qc);
        oc2.OnOrderProgress += new OrderProgressEventHandler(oc_OnOrderProgress);
        Console.WriteLine("已连接到服务器!!!");
        while (qc.GetQuote("EURUSD") == null)
            Thread.Sleep(10);
        double ask = qc.GetQuote("EURUSD").Ask;
        int id1 = oc1.OrderSendAsync("EURUSD", Op.Buy, 0.1, ask, 0, 0, 0, null, 0, new DateTime());
        Console.WriteLine("Order with RequestID = " + id1 + " sent");
        int id2 = oc2.OrderSendAsync("EURUSD", Op.Buy, 0.1, ask, 0, 0, 0, null, 0, new DateTime());
        Console.WriteLine("Order with RequestID = " + id2 + " sent");
        Console.WriteLine("任意键退出...");
        Console.ReadKey();
        qc.Disconnect();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        Console.WriteLine("任意键退出...");
        Console.ReadKey();
    }
}
void oc_OnOrderProgress(object sender, OrderProgressEventArgs args)
{
    if (args.Exception == null)
    {
        Console.WriteLine("ReuestID = " + args.TempID + ", State = " + args.Type);
        if (args.Type == ProgressType.Opened)
            Console.WriteLine("ReuestID = " + args.TempID + ", Ticket = " + args.Order.Ticket);
    }
    else
    {
        Console.WriteLine(args.Exception.Message);
    }
}


0 条评论

发布
问题