ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MT4跟单系统制作第一篇 MT4Api接口

2021-11-20 20:31:54  阅读:397  来源: 互联网

标签:return string MT4Api 跟单 MT4 public double new quoteClient


namespace DoFollowFx.Com
{
    public class Mt4Manager
    {
        private MainServer _mainServer;

        private QuoteClient _quoteClient;

        private OrderClient _orderClient;

        private Server[] _slaves;

        public int Id { get; }

        public int Type { get; }

        public uint User { get; }

        public string PlatformName { get; }

        public string Password { get; set; }

        public string PlatformPath { get; }

        private Action<object, Mt4ManagerOrderUpdateEventArgs> _onMt4ManagerOrderUpdateHandler;

        private Action<object, Mt4ManagerConnectEventArgs> _onMt4ManagerOnConnectHandler;

        private Action<object, Mt4ManagerDisconnectEventArgs> _onMt4ManagerOnDisconnectHandler;

        public Mt4Manager(int id,string platformName, string platformPath,uint user,string password, int type, Action<object, Mt4ManagerConnectEventArgs> onMt4ManagerOnConnectHandler,
            Action<object, Mt4ManagerDisconnectEventArgs> onMt4ManagerOnDisconnectHandler,Action<object, Mt4ManagerOrderUpdateEventArgs> onMt4ManagerOrderUpdateHandler)
        {
            Id = id;
            PlatformName = platformName;
            User = user;
            Type = type;
            Password = password;
            PlatformPath = platformPath;
            _onMt4ManagerOrderUpdateHandler = onMt4ManagerOrderUpdateHandler;
            _onMt4ManagerOnConnectHandler = onMt4ManagerOnConnectHandler;
            _onMt4ManagerOnDisconnectHandler = onMt4ManagerOnDisconnectHandler;

            _quoteClient = new QuoteClient();
            _orderClient = new OrderClient();
            _mainServer = QuoteClient.LoadSrv(PlatformPath,out _slaves);

            if (_onMt4ManagerOrderUpdateHandler != null)
                _quoteClient.OnOrderUpdate += new OrderUpdateEventHandler(OnOrderUpdate);

            if (_onMt4ManagerOnConnectHandler != null)
                _quoteClient.OnConnect += new ConnectEventHandler(OnConnect);

            if (_onMt4ManagerOnDisconnectHandler != null)
                _quoteClient.OnDisconnect += new DisconnectEventHandler(OnDisconnect);
        }

        public double GetBalance()
        {
            return _quoteClient.AccountBalance;
        }

        public double GetEquity()
        {
            return _quoteClient.AccountEquity;
        }

        public double GetProfit()
        {
            return _quoteClient.AccountProfit;
        }


        public double GetCredit()
        {
            return _quoteClient.AccountCredit;
        }

        public double GetFreeMargin()
        {
            return _quoteClient.AccountFreeMargin;
        }

        public double GetMargin()
        {
            return _quoteClient.AccountMargin;
        }

        public int GetLeverage()
        {
            return _quoteClient.AccountLeverage;
        }

        public int GetMode()
        {
            return _quoteClient.AccountMode;
        }

        public string GetName()
        {
            return _quoteClient.AccountName;
        }

        public DateTime GetServerTime()
        {
            return _quoteClient.ServerTime;
        }

        public bool IsDemoAccount()
        {
            return _quoteClient.IsDemoAccount;
        }

        public double GetMarginLevel()
        {
            return Math.Round(_quoteClient.AccountMargin != 0 ? _quoteClient.AccountEquity / _quoteClient.AccountMargin * 100 : 0,2, MidpointRounding.AwayFromZero);
        }

        public string[] GetSymbols()
        {
            return _quoteClient.Symbols;
        }

        public void Init()
        {

        }

        public void Connect()
        {
            if (IsConnected())
                return;

            try
            {
                _quoteClient.Init(User, Password, _mainServer.Host, _mainServer.Port);
                _orderClient.Init(_quoteClient);
                _quoteClient.Connect();
            }
            catch (Exception ex)
            {
                bool isConnected = false;
                foreach (var i in _slaves)
                {
                    _quoteClient.Init(User, Password, i.Host, i.Port);
                    _orderClient.Init(_quoteClient);
                    try
                    {
                        _quoteClient.Connect();
                        isConnected = true;
                        break;
                    }
                    catch { }
                }

                if (!isConnected)
                    throw ex;
            }

            try
            {
                _orderClient.Connect();
            }
            catch (Exception ex)
            {
                _quoteClient.Disconnect();
                throw ex;
            }
        }

        public void Disconnect()
        {
            try
            {
                _quoteClient.Disconnect();
                _orderClient.Disconnect();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool IsConnected()
        {
            return _quoteClient.Connected && _orderClient.Connected;
        }

        public QuoteEventArgs GetQuote(string symbol)
        {
            if (IsConnected())
                return _quoteClient.GetQuote(symbol);
            else
                throw new Exception("Mt4未连接");
        }

        public Order OrderSend(string symbol, Op operation, double lots, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, DateTime expiration)
        {
            if (IsConnected())
                return _orderClient.OrderSend(symbol, operation, lots, price, slippage, stoploss, takeprofit, comment, magic, expiration);
            else
                throw new Exception("Mt4未连接");
        }

        public Order OrderClose(string symbol, int ticket, double lots, double price, int slippage)
        {
            if (IsConnected())
                return _orderClient.OrderClose(symbol, ticket, lots, price, slippage);
            else
                throw new Exception("Mt4未连接");
        }

        public ConGroupSec GetSymbolGroupParams(string symbol)
        {
            if (IsConnected())
                return _quoteClient.GetSymbolGroupParams(symbol);
            else
                throw new Exception("Mt4未连接");
        }

        public Order[] GetOpenOrders()
        {
            if (IsConnected())
                return _quoteClient.GetOpenedOrders();
            else
                throw new Exception("Mt4未连接");
        }

        public Order GetOpenOrder(int ticket)
        {
            if (IsConnected())
                return _quoteClient.GetOpenedOrder(ticket);
            else
                throw new Exception("Mt4未连接");
        }

        public Order[] DownloadOrderHistory(DateTime from,DateTime to)
        {
            if (IsConnected())
                return _quoteClient.DownloadOrderHistory(from, to);
            else
                throw new Exception("Mt4未连接");
        }

        private void OnOrderUpdate(object sender, OrderUpdateEventArgs update)
        {
            _onMt4ManagerOrderUpdateHandler(this, new Mt4ManagerOrderUpdateEventArgs(Id,PlatformName,User,Type,update));
        }

        private void OnConnect(object sender, ConnectEventArgs args)
        {
            _onMt4ManagerOnConnectHandler(this, new Mt4ManagerConnectEventArgs(Id, PlatformName, User, Type, args));
        }

        private void OnDisconnect(object sender, DisconnectEventArgs args)
        {
            _onMt4ManagerOnDisconnectHandler(this, new Mt4ManagerDisconnectEventArgs(Id, PlatformName, User, Type, args));
        }
    }
}

标签:return,string,MT4Api,跟单,MT4,public,double,new,quoteClient
来源: https://blog.csdn.net/hahawei1234/article/details/121444975

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有