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

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

常数是否也有变化?

在输出方面。

是的,常数已经去掉了MT5_的前缀,下面是一个使用的例子。

from datetime import datetime
import MetaTrader5 as mt5

mt5.initialize()
mt5.wait()

print(mt5.terminal_info())
print(mt5.version())

ticks1 = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 10000, mt5.COPY_TICKS_ALL)
ticks2 = mt5.copy_ticks_range("AUDUSD", datetime(2020,1,27,13), datetime(2020,1,28,13,1), mt5.COPY_TICKS_ALL)

rates1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020,1,28,13), 1000)
rates2 = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
rates3 = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13))

mt5.shutdown()

print('ticks1(', len(ticks1), ')')
print('ticks2(', len(ticks2), ')')
print('rates1(', len(rates1), ')')
print('rates2(', len(rates2), ')')
print('rates3(', len(rates3), ')')

import matplotlib.pyplot as plt

plt.plot(rates2['time'], rates2['low'], 'g-')
plt.plot(rates2['time'], rates2['high'], 'r-')

plt.show()

更复杂的例子--专家顾问在两条移动平均线 上进行交易,不使用历史记录。

import MetaTrader5 as mt5
import time

mt5.initialize()
mt5.wait()

info = mt5.terminal_info()
if info.trade_allowed == False:
    print("Auto-trading disabled in Terminal, enable it")
    quit()

symbol = "EURUSD" #  currency
lot = 0.01;       #  buy lot
interval = 5      #  price requesting interval in sec
long_len = 11     # long moving average length
short_len = 7     # short moving average length
long_ma = []      # long ma list
short_ma = []     # short ma list
ticket = 0        #  ticket for sell

mt5.symbol_select(symbol)

#  wait some time
time.sleep(1)

print("\nPreparing...")
for i in range(long_len):
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2

    long_ma.append(avg)
    if i >= long_len - short_len:
        short_ma.append(avg)
    time.sleep(interval)

print("\nWorking...")
while True:
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2
    
    # short values
    prev_short = sum(short_ma) / short_len
    short_ma.pop(0)
    short_ma.append(avg)
    short = sum(short_ma) / short_len
    
    # long values
    prev_long = sum(long_ma) / long_len
    long_ma.pop(0)
    long_ma.append(avg)
    long = sum(long_ma) / long_len

    #  buy signal
    if prev_short < prev_long and short > long:
        print("BUY: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Buy(symbol, lot)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Buy failed: ", r)
        else:
            ticket = r.order
    elif prev_short > prev_long and short < long and ticket>0:
        print("CLOSE: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Sell(symbol, lot, ticket=ticket)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Sell failed: ", r)
        else:
            ticket = 0
           
    time.sleep(interval)

mt5.shutdown()
 
Almaz:

是的,常数去掉了MT5_的前缀,这里是一个使用的例子。

一个更复杂的例子是一个在两条移动平均线 上进行交易的EA,不使用历史记录。

谢谢你。

解放军的演变是好的。向开发者提问--pinova库的路线图在哪里?

我们还能期待哪些创新,不期待什么?

 
我想了解一下文件的最新情况,是的。
 

在测试服务器(MetaQuotes-Beta服务器,地址为78.140.180.203:443),有新功能的终端2323的测试版是可用的。 公开测试版将于明天发布。

我们还发布了用于Python的新MetaTrader 5.0.20版本(pip install --upgrade metatrader5),其中有新的账户切换语法。

import MetaTrader5 as mt5

mt5.initialize(timeout=10000)
mt5.initialize(login=25035662, password="oxeb7lpb", server="MetaQuotes-Demo")
mt5.login(25035662)
mt5.login(25035662, timeout=10000)
mt5.login(25035662, "oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb", server="MetaQuotes-Demo")

现在可以直接在初始化中指定授权,包括完整和简短的形式。

等待功能被取消了,现在带有等待的完整初始化周期直接在initialize中执行,在这里你可以指定以毫秒为单位的等待时间。

Python 库已经保证能够找到终端的最新活动拷贝,即使它是以便携模式安装的 (/portable key) 。


Python程序已经直接显示在导航器中。


本周五的版本将允许像平常的MQL5脚本 一样运行它们,并且它们将被绑定到图表上。


稍后我们将在Python库中增加对所有(包括自定义)指标的读模式的访问。这将使python的工作更有成效。但这还不是一个优先事项,我们会在更晚的时候做这件事。

 
Renat Fatkhullin:

还发布了MetaTrader 5.0.20的Python新版本(pip install --upgrade metatrader5),具有新的切换账户 的语法。

比MQL5有更多的功能。

 

与此同时,我们正在扩大编辑器的功能,在下一个版本中(本周五不会出现),将完全可以使用Clang/LLVM和Microsoft Visual Studio来编译C++程序。


也许我们也会包括C#。


充分使用SQLite数据库的广泛工作:SQLite:在MQL5中与SQL数据库进行本地工作

这使你能够轻松地在不同的系统之间和终端内部操作和交换大量的数据。

 
fxsaber:

比MQL5有更多的功能。

我们是否达到了目的?

 
Renat Fatkhullin:

与此同时,我们正在扩大编辑器的功能,在下一个版本中(不会在周五到来)
,将完全能够使用Clang/LLVM和Microsoft Visual Studio来编译C++程序。

将添加一个链接器,用于链接
项目 中的.lib文件?

 
Roman:

用于连接项目中的.lib文件
是否会增加一个链接器?

在项目中可以指定多个目标变体。



DLL/EXE文件有自定义的定义、库和额外的参数供编译器使用。

链接器是由Clang或Visual Studio自动使用的。它不需要被明确指定。

 
fxsaber:

比MQL5有更多的功能。

正是由于这个原因,MetaTrader 5平台 有更多的功能。

就其本身而言,如果没有向其提供数据并提供交易执行的信息和交易平台(平台不是一个终端,而是具有基础设施和生态系统的整个服务器群),任何 语言都是无用的。

我们的目标是提出一个无缝的平台,有一套广泛的自动交易工具,涵盖不同的消费者群体。

Python是ML领域的明显赢家,是一种非常有效的做研究的语言。尽管你不能把它弄到测试器中,但它在直接集成模式下也很好。


顺便说一下,与其他Python库(通常是迎面写来的,而且优化得很差)不同,我们对大量图表数据的回报进行了强有力的优化。这意味着你可以有效地在内存中快速获得深层历史。