MetaTrader 5 Python用户组 - 如何在Metatrader中使用Python - 页 51

 
MetaQuotes:

python库5.0.25的新版本已经发布

请通过以下方式更新。

先生们,我们是否可以要求增加类似的对象。

TradePosition(ticket=55970661, time=1583523524, time_msc=1583523524484, time_update=1583523524, time_update_msc=1583523524484, 
type=1, magic=0, identifier=55970661, reason=0, volume=0.04, price_open=1.13022, sl=0.0, tp=0.0, price_current=1.13179, swap=0.0, 
profit=-6.28, symbol='EURUSD', comment='', external_id='55970661')

添加 pls 或 __dict__, 或 as_dict()

在Python中,使用标准的结构、相同的dict/list来操作要方便得多。

('__add__', <method-wrapper '__add__' of TradePosition object at 0x085A1808>)
('__class__', <class 'TradePosition'>)
('__contains__', <method-wrapper '__contains__' of TradePosition object at 0x085A1808>)
....
....
....
('symbol', 'EURUSD')
('ticket', 55970661)
('time', 1583523524)
('time_msc', 1583523524484)
('time_update', 1583523524)
('time_update_msc', 1583523524484)
('tp', 0.0)
('type', 1)
('volume', 0.04)

如果能从这个班级(和其他类似的班级)抽出口令,并与之合作,那就太好了。

 

关于initialize()的问题,有

initialize(
   path                      // path to the MetaTrader 5 terminal EXE file
   timeout=TIMEOUT,          // timeout
   login=LOGIN,              // account number
   password="PASSWORD",      // password
   server="SERVER"           // server name as it is specified in the terminal
   )

分别在两个运行/portable的终端的路径路径中。

'c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe'

и 

'c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe'

但所有的初始化 调用都是针对终端的最后一个运行实例。

分别是MT build 2360和MetaTrader5-5.0.26-cp38-cp38-win32.whl

怎么了?路径应该和其他逻辑一起使用,还是应该把其他东西传给/portable?

 

请展示实际的代码。

我们还不接受路径中的参数。

 
Renat Fatkhullin:

请展示实际的代码。

我们还不接受路径中的参数。

以下是代码。

import MetaTrader5 as mt5

def check_order ():
    if mt5.initialize(path='c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe', 
                            login=25153683, server='MetaQuotes-Demo', password=''):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5.TRADE_ACTION_DEAL,
                        "symbol": symbol,
                        "volume": 0.01,
                        "type": mt5.ORDER_TYPE_BUY,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask-100*point,
                        "tp": mt5.symbol_info_tick(symbol).ask+100*point,
                        "deviation": 10,
                        "magic": 234000,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		 mt5.shutdown()


    if mt5.initialize(path='c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe', 
                            login=50518455, server='Alpari-MT5-Demo', password=''):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5.TRADE_ACTION_DEAL,
                        "symbol": symbol,
                        "volume": 0.01,
                        "type": mt5.ORDER_TYPE_BUY,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask-100*point,
                        "tp": mt5.symbol_info_tick(symbol).ask+100*point,
                        "deviation": 10,
                        "magic": 234000,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		 mt5.shutdown()


if __name__ == "__main__":
    check_order()

最后运行的终端。

"c:\Works\MT5 - terminals\ForexClub MT5\terminal64.exe" 

从截图来看,这个电话打到了最后一个正在运行的。

我想打电话给那些被访问的具体的人。

 
Renat Fatkhullin:

我们还不接受轨道中的参数。

嗯......。我不太理解这一点,有值但没有参数,这就是我把连接参数从配置中拿出来的地方。

            if mt5.initialize(path=acc['path'], login=acc['login'], server=acc['server'], password=acc['pass']):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
 
Дмитрий Прокопьев:

关于initialize()的问题,有

分别在两个运行/portable的终端的路径路径中。

但所有的初始化 调用都是针对终端的最后一个运行实例。

分别是MT build 2360和MetaTrader5-5.0.26-cp38-cp38-win32.whl

怎么了?路径应该和其他逻辑一起使用,还是应该把其他东西传给/portable?

你想在一个脚本中让2个终端同时工作吗?这是不可能的,下一个初始化调用将中断与第一个终端的连接,为此你需要输入连接实体来区分不同的终端。它只适用于当前的一个连接。

initialize还有一个参数(尚未记录)mt5.initialize(blabla, portable=True) 在便携模式下启动终端 硬。

 
Almaz:

你想在一个脚本中同时操作2个终端吗?这是不可能的,下一个初始化调用将中断与第一个终端的连接,你需要输入一个连接实体来区分不同的终端。它只适用于当前的一个连接。

initialize还有一个参数(尚未记录)mt5.initialize(blabla, portable=True) 可以在便携模式下启动终端

是的,你应该在便携式 模式下运行的多个终端工作。你不能同时与两个不同的终端进行初始化连接。这里没有问题。

我试着用它来逐一解决终端。

if mt5.initialize(login=11111, path='/works/MT5-1'...):
        ...   
        mt5.shutdown()
else:
   print('error')

if mt5.initialize(login=2222, path='/works/MT5-2'...):
        ...   
        mt5.shutdown()
else:
   print('error')

在这个计划中,它不起作用。在所有情况下,它都会崩溃到系统中最后一个手动启动的终端。即使它是由

path='/works/MT5-3'
mt5.initialize(blabla, portable=True)- 并没有什么帮助,它仍然提示系统中最后启动终端
 

这里有一个问题。

关于交易、自动交易系统和策略测试的论坛

MetaTrader 5 Python用户组 - 摘要

nikoli shen, 2020.03.07 15:46

使用python自带的pip版本下载MetaTrader 5软件包时出现了问题。一个变通的办法是更新管道。在Windows中更新pip的命令:
python -m pip install -U pip

或在venv中,使用

(inside virtualenv):easy_install -U pip

 
Almaz:

你想在一个脚本中同时操作2个终端吗?这是不可能的,下一个初始化调用将中断与第一个终端的连接,你需要输入一个连接实体来区分不同的终端。它只适用于当前的一个连接。

initialize还有一个参数(尚未记录)mt5.initialize(blabla, portable=True) 在便携模式下启动终端 硬。

请注意,mt5.terminal_info()显示了

mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=42381,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')
mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=40849,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')

valuepath='C:\Works\\\\\MT5 - terminals\MetaTrader 5',data_path='C:\Works\\\\MT5 - terminals\MetaTrader 5',commondata_path='C:Users\rip\AppData\\Roaming\MetaQuotes\Terminal\Common'

是相同的。它应该是这样的吗?

代码如下。

import MetaTrader5 as mt5

def check_order ():
    if mt5.initialize(path='c:\\Works\\MT5 - terminals\\MetaTrader 5\\terminal64.exe', 
                            login=25153683, server='MetaQuotes-Demo', password='',  portable=True):
        print("mt5.version(): ", mt5.version())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

    if mt5.initialize(path='c:\\Works\\MT5 - terminals\\Alpari MT5\\terminal64.exe', 
                            login=50518455, server='Alpari-MT5-Demo', password='',  portable=True):
        print("mt5.version(): ", mt5.version())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

if __name__ == "__main__":
    check_order()
 
Almaz:

你想在一个脚本中同时操作2个终端吗?这是不可能的,下一个初始化调用将中断与第一个终端的连接,你需要输入一个连接实体来区分不同的终端。 它只适用于当前的一个连接。


原则上是否可以创建一个实体(连接)?我认为没有那么大的必要,但为了将来的参考。

当在图表上安装另一个脚本(Py)时,第一个脚本被重置。这是它应该有的样子吗?