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

 
Maxim Dmitrievsky:

Renat,对ONNX的支持是否有任何更新?

没有。

目前还没有需求,也没有准备好的观众。

 

过去一年中发生了很多变化,旧的脚本不再起作用。

有一个终端MT5 build 2361,32bit在Windows 7上。终端本身可以工作,但连接Python脚本的工作却停止了(尽管在年初时它还在工作)。

很明显,由于终端的更新,其他方面都没有变化。对于测试,运行一个简单的脚本

import MetaTrader5 as mt5
from time import sleep

mt5.initialize()
print('start')
print(mt5.terminal_info())
sleep(10) 

mt5.shutdown()
print('end')

问题是我应该安装什么版本的MetaTrader5 python模块来使其重新工作?(或如何回滚终端的更新?)

我试过不同版本的模块--都有错误。那些较新的设备会发出-10003,"IPC初始化失败,未找到MetaTrader 5 x64"。

其中一些初始化并运行终端,但它们返回RuntimeError: IPC recv failed in 'py_test.py'。

最早的5.0.10有其他的命令,但它们也不起作用。

终端无法更新到较新的版本,以前有一些工作版本的Python模块,但我现在找不到了。

64位版本的终端需要操作系统的更新和很多其他的更新,再加上64位操作系统吃的内存和磁盘空间要多很多倍,不好选择。一般来说,自动更新任何东西的政策是不好的。如果它起作用,不要碰它。

一般来说,你应该在文档中设置一个表格,说明哪些版本与哪些版本兼容,如果你不支持与旧版本的兼容,就会强制更新。

Автоматическое обновление - Для продвинутых пользователей - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему отключить нельзя. Порядок обновления При подключении к торговому серверу происходит проверка наличия обновлений платформы. Если найдено обновление какого-либо из компонентов торговой платформы...
 
Lyuk:


对32位操作系统的支持在许多构建之前就已经被禁用。从那时起,终端已经发生了很大的变化。因此,你的问题的可能解决方案是:你必须使用64位的Windows 10。

 

但有一个兼容的终端和模块的构建,你可以直接安装它们,没有任何新功能。

而要求Windows 10 64位对于像终端这样的程序来说是太多了。它太重,太贪婪,不可靠,无法运行任何需要长期运行的东西。自动更新也有问题。很遗憾,MT被捆绑在这个系统上。

 
Vladimir Karputov:

你必须使用64位Windows 10。

Windows 7 x64有什么问题?我是不是又错过了一次更新?

 
Aleksey Vyazmikin:

Windows 7 x64有什么问题?我又错过了一条新闻吗?

在我看来,7比10好。在移动系统上没有定位。

 
Valeriy Yastremskiy:

对我来说,7比10好。没有对移动系统的定位。

我同意,我在10号文件上工作了将近一年,回家后对7号文件很满意。

 
Renat Fatkhullin:

没有。

只要没有需求,没有准备好的观众。

到目前为止,有4个人表达了需求,在机器学习主题中:)在我看来,如果有机会,有几篇关于这个主题的文章,pythonists就会开始移植模型。特别是讲英语的人。
 
2020.11.09 09:43:31.509 Terminal        MetaTrader 5 x64 build 2670 started for MetaQuotes Software Corp.
2020.11.09 09:43:31.510 Terminal        Windows 10 build 19042, Intel Core i7-9750 H  @ 2.60 GHz, 23 / 31 Gb memory, 1665 / 1861 Gb disk, IE 11, UAC, GMT+2
2020.11.09 09:43:31.510 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


我在MetaEditor和jupyter笔记本中都以脚本的形式运行它。

Python version:  sys.version_info(major=3, minor=7, micro=6, releaselevel='final', serial=0)
Scikit-Learn version:  0.23.1


我不能打印DataFrame对象的前五行。

我从'data文件夹'\Scripts\Python\copy_rates_from.py'中取出脚本,并添加了这几行

from datetime import datetime
import MetaTrader5 as mt5
# выведем данные о пакете MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)

# импортируем модуль pandas для вывода полученных данных в табличной форме
import pandas as pd
pd.set_option('display.max_columns', 500) # сколько столбцов показываем
pd.set_option('display.width', 1500)      # макс. ширина таблицы для показа
# импортируем модуль pytz для работы с таймзоной
import pytz

# установим подключение к терминалу MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()

# установим таймзону в UTC
timezone = pytz.timezone("Etc/UTC")
# создадим объект datetime в таймзоне UTC, чтобы не применялось смещение локальной таймзоны
utc_from = datetime(2020, 1, 10, tzinfo=timezone)
# получим 10 баров с EURUSD H4 начиная с 01.10.2020 в таймзоне UTC
rates = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_H4, utc_from, 10)

# завершим подключение к терминалу MetaTrader 5
mt5.shutdown()
# выведем каждый элемент полученных данных на новой строке
print("Выведем полученные данные как есть")
for rate in rates:
    print(rate)

# создадим из полученных данных DataFrame
rates_frame = pd.DataFrame(rates)

# выведем пять первых строк (метод 'head' pandas)
print("\nВыведем пять первых строк")
rates_frame.head()

rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')

# выведем данные
print("\nВыведем датафрейм с данными")
print(rates_frame)

rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')

# выведем данные
print("\nВыведем датафрейм с данными")
print(rates_frame)

而该方法并没有输出任何东西。

(1578614400, 1.11051, 1.11093, 1.11017, 1.11041, 2448, 1, 0)

Выведем пять первых строк

Выведем датафрейм с данными



为什么'head()'方法不起作用,而这个手法 却起作用。

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

新版MetaTrader 5 build 2650:图表的背景加载和MQL5分析器的改进

Rashid Umarov, 2020.11.10 14:03

试试吧

# выведем пять первых строк (метод 'head' pandas)
print("\nВыведем пять первых строк")
print( rates_frame.head())

结果

Выведем пять первых строк
         time     open     high      low    close  tick_volume  spread  real_volume
0  1578484800  1.11384  1.11386  1.11110  1.11200        12101       0            0
1  1578499200  1.11200  1.11308  1.11087  1.11180        13243       0            0
2  1578513600  1.11180  1.11180  1.11018  1.11041         5709       0            0
3  1578528000  1.11053  1.11194  1.11033  1.11174         4409       0            0
4  1578542400  1.11174  1.11190  1.11126  1.11183         2964       0            0



有用吗?

 
Vladimir Karputov:

为什么'head()'方法没有起作用,而这个演习


有用吗?

因为head()方法(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html) 返回一个对象,而不是输出到日志。为了看到内容,你需要明确地将对象发送到print()。

为了方便起见,这条蟒蛇 会像调用print()一样输出对象。