MetaTrader 5 Python User Group - メタトレーダーで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()

より複雑な例 - 履歴を使用せず、2つの移動平均で 取引するExpert Advisor。

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_の接頭辞が削除されています、使用例はこちらです。

より複雑な例として、ヒストリーを使用せずに2本の移動平均 線で取引するEAがあります。

ありがとうございます。

リブの進化は良いことだ。開発者に質問です - pinova lib のロードマップはどこですか?

どんなイノベーションが期待できるのか、何を期待してはいけないのか。

 
ドキュメントのアップデートを希望します、ええ
 

テストサーバー(MetaQuotes-Beta server, address 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")

初期設定において、フルネームと短縮形の両方で直接認可を指定することが可能になりました。

wait機能は廃止され、initializeで直接、待ち時間を含む完全な初期化サイクルが実行され、待ち時間をミリ秒で指定することができるようになりました。

Pythonライブラリは、ポータブルモード(/portableキー)でインストールされた場合でも、ターミナルの最新のアクティブなコピーを見つけることが既に保証されています。


Pythonのプログラムは、すでにナビゲータに直接表示されています。


今週の金曜日のリリースでは、通常のMQL5スクリプトとして 実行できるようになり、チャートにバインドされるようになります。


後ほど、Pythonライブラリにリードモードでのすべての(カスタムも含む)インジケータへのアクセスを追加します。これにより、pythonでの作業がより生産的になります。しかし、これはまだ優先順位が低いので、ずっと後になってからやります。

 
Renat Fatkhullin:

また、口座切り替えの 構文が新しくなったPython版MetaTrader 5.0.20 (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ライブラリ(真正面から書かれていて最適化が不十分なことが多い)と異なり、膨大なチャートデータの見返りを強く最適化しています。つまり、深い歴史を効率よくメモリに収め、素早く取得することができるのです。