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

 
Дмитрий Прокопьев:

试过了,这完全取决于它所运行的硬件。

一个实例会吃掉大约45-50Mb的内存和2.5-4%的CPU。(是的,CPU百分比取决于CPU类型,在我的情况下,英特尔至强L5640 @ 2.27GHz)。

同样的,Python的一个实例。

如果python运行时有历史记录,+200-300Mb RAM。CPU几乎没有用完。

嗯,为什么,这取决于你的目标或想法。

明白了。谢谢你提供的信息。

 
开发人员,请制作API函数copy_buffer()。从模拟 中获取指标数据。
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
开发人员,请制作API-函数copy_buffer()。通过模拟量 获取指标数据。

Python中不是有一个指标包吗?或者是某种特殊的指标。这个似乎很有效https://github.com/twopirllc/pandas-ta

twopirllc/pandas-ta
twopirllc/pandas-ta
  • twopirllc
  • github.com
Technical Analysis (TA) is an easy to use library that is built upon Python's Pandas library with more than 80 Indicators. These indicators are comminly used for financial time series datasets with columns or labels similar to: datetime, open, high, low, close, volume, et al. Many commonly used indicators are included, such as: Moving Average...
 
Vladimir Perervenko:

Python中不是有一个指标包吗?或者是某种特殊的指标。这个似乎很有效https://github.com/twopirllc/pandas-ta

copy_buffer() 意味着为你的 计算获得一个数据数组。
copy_buffer() 应该是双向工作的。
缺少的是一个双向的阵列传输。

 
Roman:

symbols_total 和symbol_name函数 缺失
要获得这样的符号列表。

在5.0.29中增加了 symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]),需要最新的测试版的终端才能工作。

另外,在所有函数orders_get(),position_get(),history_orders_get(),history_deals_get()中增加了按组过滤的可能性 - group="EURUSD, USDGBP", *RU*"。
order_check(), order_send()方法将返回请求字段中执行的初始请求。

 
Roman:

copy_buffer() 意味着获得一个数据数组用于自己的 计算。
copy_buffer() 应该在两个方向上工作。
现在缺少的是数组的双向传递。

github上有很多,既有b/gbin库,也有付费包......。

不要把使用MQL5的工作模式转移到python中。它们是不同的,有不同的目的。

 
Almaz:

在5.0.29中增加了 symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]),需要最新的测试版的终端才能工作。

此外,在所有函数orders_get(), positions_get(), history_orders_get(), history_deals_get()中,我们增加了按组过滤的功能 - group="EURUSD, "USDGBP", *RU*"。
order_check(), order_send()方法将返回请求字段中执行的初始请求。

而_todict()的列表还不能返回?

 
Дмитрий Прокопьев:

他们还不能返回_todict()的列表吗?

是的,他们可以,请看这个例子。

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

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

# подключимся к торговому счету с указанием пароля и сервера
authorized=mt5.login(25115284, password="gqsdfgtdm",server="MetaQuotes-Demo")
if(authorized):
    # выведем данные о торговом счете
    print(mt5.account_info())
else:
    print("failed to connect to trade account 25115284 with password=gqz0lbdm")

account_info_dict=mt5.account_info(). _asdict()
for prop in account_info_dict:
    print("{}={}".format(prop,account_info_dict[prop]))

mt5.shutdown()

结果

AccountInfo(login=25115284, trade_mode=0, leverage=100, limit_orders=200, margin_so_mode=0, trade_allowed=True, trade_expert=True, margin_mode=2, currency_digits=2, fifo_close=False, balance=99511.4, credit=0.0, profit=9.04, equity=99520.44, margin=98.18, margin_free=99422.26, margin_level=101365.28824607862, margin_so_call=50.0, margin_so_so=30.0, margin_initial=0.0, margin_maintenance=0.0, assets=0.0, liabilities=0.0, commission_blocked=0.0, name='MetaQuotes Dev Demo', server='MetaQuotes-Demo', currency='USD', company='MetaQuotes Software Corp.')
login=25115284
trade_mode=0
leverage=100
limit_orders=200
margin_so_mode=0
trade_allowed=True
trade_expert=True
margin_mode=2
currency_digits=2
fifo_close=False
balance=99511.4
credit=0.0
profit=9.04
equity=99520.44
margin=98.18
margin_free=99422.26
margin_level=101365.28824607862
margin_so_call=50.0
margin_so_so=30.0
margin_initial=0.0
margin_maintenance=0.0
assets=0.0
liabilities=0.0
commission_blocked=0.0
name=MetaQuotes Dev Demo
server=MetaQuotes-Demo
currency=USD
company=MetaQuotes Software Corp.
 
Rashid Umarov:

他们可以,见例子

结果

谢谢你,我已经看到了这个例子,它是有效的。

我的问题有点不同。

    if mt5.initialize('c:\\Works\\MT5 - terminals\\RoboForex - MT5\\terminal64.exe',
                            login=500036189, server='RoboForex-MetaTrader 5', password='',  portable=True):
        positions = mt5.positions_get()
        print(positions)
        pList = []
        for elem in positions:
            pList.append(elem._asdict())

positions_get - 它向我返回一个TradePosition的列表。原则上是可以的,我们可以把它扔到pandas中,并且工作得很好。

(TradePosition(ticket=164661016, time=1585075408, time_msc=1585075408163, time_update=1585075408, time_update_msc=1585075408163, type=1, magic=0, identifier=164661016, reason=0, volume=0.01, price_open=120.306, sl=0.0, tp=0.0, price_current=120.279, swap=0.0, profit=0.24, symbol='EURJPY', comment='', external_id=''), 
 TradePosition(ticket=164661051, time=1585075426, time_msc=1585075426062, time_update=1585075426, time_update_msc=1585075426062, type=0, magic=0, identifier=164661051, reason=0, volume=0.01, price_open=1.07798, sl=0.0, tp=0.0, price_current=1.07806, swap=0.0, profit=0.08, symbol='EURUSD', comment='', external_id=''))

但这并不限于熊猫,如果你想得到这样的东西。

[{'ticket': 164661016, 'time': 1585075408, 'time_msc': 1585075408163, 'time_update': 1585075408, 'time_update_msc': 1585075408163, 'type': 1, 'magic': 0, 'identifier': 164661016, 'reason': 0, 'volume': 0.01, 'price_open': 120.306, 'sl': 0.0, 'tp': 0.0, 'price_current': 120.328, 'swap': 0.0, 'profit': -0.2, 'symbol': 'EURJPY', 'comment': '', 'external_id': ''}, 
{'ticket': 164661051, 'time': 1585075426, 'time_msc': 1585075426062, 'time_update': 1585075426, 'time_update_msc': 1585075426062, 'type': 0, 'magic': 0, 'identifier': 164661051, 'reason': 0, 'volume': 0.01, 'price_open': 1.07798, 'sl': 0.0, 'tp': 0.0, 'price_current': 1.07881, 'swap': 0.0, 'profit': 0.83, 'symbol': 'EURUSD', 'comment': '', 'external_id': ''}]

我们必须以某种方式转换它,熊猫或为...那是很多不必要的姿态。

_asdict()变得更加方便,如果开发者不是MQL5程序员,而是,比如说,Pythonist ...或数据科学家,列表/决定是

list/dict是python的主要元素。 许多lib使用list/dict来创建数据传输。

图元也被大量使用,但只有当你想严格控制其中的数据类型 时才会使用。

并有一个错误处理程序来处理不正确的使用或分配。某个地方...:)我可能是错的。

 
Дмитрий Прокопьев:

github上有很多,既有b/gbin库,也有付费包......。

不要把使用MQL5的工作模式转移到python中。它们是不同的,有不同的目标。

你这话是什么意思?把一个数组 从mql5复制到 py再复制回来?
你至少应该仔细阅读我们正在谈论的内容。
你不必只为自己考虑。如果你不需要,别人也需要。