ホームページ > バックエンド開発 > Python チュートリアル > mt5 でシグナルを複製する Telegram ボット

mt5 でシグナルを複製する Telegram ボット

Linda Hamilton
リリース: 2024-12-15 07:56:08
オリジナル
643 人が閲覧しました

Telegram bot para replicar sinais no mt5

コードをステップごとに詳細に分析して説明します。このスクリプトは、Telethon ライブラリ を使用して Telegram に接続し、MetaTrader 5 (MT5) で注文するために使用されるグループからシグナルを受信します。コードの実行には、MT5 への接続、Telegram 上のメッセージのリスニング、およびそれらのメッセージに基づいた売買注文の実行が含まれます。

1. ライブラリのインポート

from telethon import TelegramClient, events
import MetaTrader5 as mt5
import asyncio
import logging
from datetime import datetime
import signal
import os
import sys
import pkg_resources
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • Telethon: Telegram と対話するためのライブラリ (メッセージの送受信)。
  • MetaTrader5: MetaTrader 5 プラットフォームとの対話を可能にするライブラリ。取引の自動化に使用されます。
  • asyncio: プログラムをブロックせずに Telegram でメッセージを待機するなど、非同期操作を処理します。
  • ロギング: コードの追跡とデバッグに役立つログ メッセージを記録します。
  • datetime: 日付と時刻を操作します。
  • signal: 割り込み信号 (Ctrl C) などのシステム信号をキャプチャするために使用されます。
  • os、sys、pkg_resources: ファイル、ディレクトリ、システム リソースの操作用。

2. 環境情報表示

print("Python executando de:", sys.executable)
print("Ambiente virtual:", sys.prefix)
print("Versão do Python:", sys.version)
print("VIRTUAL_ENV:", os.environ.get('VIRTUAL_ENV'))
ログイン後にコピー
ログイン後にコピー

ここで、コードは、Python のバージョン、仮想環境のパス、Python の実行場所など、Python が実行されている環境に関する情報を出力します。

3. インストールされているパッケージをリストする

installed_packages = [d for d in pkg_resources.working_set]
for package in installed_packages:
    print(package)
ログイン後にコピー
ログイン後にコピー

このコードは、pkg_resources ライブラリを使用して、現在の環境にインストールされているすべての Python パッケージを表示します。

4. ロギング構成

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
ログイン後にコピー
ログイン後にコピー
  • INFO レベル以上でメッセージを記録するようにログを設定します。
  • 形式は、日付、重大度レベル、メッセージを含むログ メッセージの形式を定義します。

5. 電報設定

API_ID = '78787878'
API_HASH = '12e957773a9a554cb6e32997122706f6'
PHONE_NUMBER = '+5512991111111'
GROUP_USERNAME = '@Nas100freepip'
ログイン後にコピー
ログイン後にコピー
  • API_ID および API_HASH: Telethon を使用するために必要な Telegram API 資格情報。
  • PHONE_NUMBER: ボットの電話番号。
  • GROUP_USERNAME: ボットがメッセージを読み取る Telegram グループの名前。

6. MT5アカウント設定

CONTAS_MT5 = [
    {"login": 1690062, "senha": '5jsXlBg3~T', "servidor": 'ACGMarkets-Live', "us30": "US30.raw", "nas100": "NAS100.raw", "lote": 4.00}
]
ログイン後にコピー
ログイン後にコピー

ボットが注文を実行するために使用できる MT5 アカウントのリストを定義します。各アカウントには以下が含まれます:

  • login: MetaTrader 5 のアカウントのログイン番号。
  • password: アカウントのパスワード。
  • server: ブローカーのサーバー。
  • us30 および nas100: 取引される資産のシンボル。
  • バッチ: 注文のバッチサイズ。

7. MT5への再接続機能

from telethon import TelegramClient, events
import MetaTrader5 as mt5
import asyncio
import logging
from datetime import datetime
import signal
import os
import sys
import pkg_resources
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この関数は、最大試行回数 (max_tries) まで、特定のアカウントの MetaTrader 5 への再接続を試みます。何回試行しても再接続に失敗した場合は、False を返します。

8. MT5への注文送信機能

print("Python executando de:", sys.executable)
print("Ambiente virtual:", sys.prefix)
print("Versão do Python:", sys.version)
print("VIRTUAL_ENV:", os.environ.get('VIRTUAL_ENV'))
ログイン後にコピー
ログイン後にコピー

この関数は、アクション (買いまたは売り) のタイプに応じて、買い​​注文または売り注文を MetaTrader 5 に送信します。機能:

  • シンボルの利用可能性を確認します。
  • 必要な情報 (価格、数量、注文の種類など) を使用して注文を準備します。
  • MT5 に注文を送信します。

9. テレグラムから受信したメッセージを処理しています

installed_packages = [d for d in pkg_resources.working_set]
for package in installed_packages:
    print(package)
ログイン後にコピー
ログイン後にコピー
  • Telegram メッセージを受信し、それを処理して資産 (us30 や nas100 など) とアクション (購入または売却) を識別します。
  • アクティブなアカウントごとに、send_order 関数を使用して注文を送信してみます。注文が失敗した場合、アカウントはアクティブなアカウント リストから削除されます。

10. MT5との接続確認機能

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
ログイン後にコピー
ログイン後にコピー

この機能は、アクティブなアカウントごとに MetaTrader 5 への接続を定期的にチェックします。アカウントが再接続に失敗すると、そのアカウントはリストから削除されます。

11. 割り込み信号の処理

API_ID = '78787878'
API_HASH = '12e957773a9a554cb6e32997122706f6'
PHONE_NUMBER = '+5512991111111'
GROUP_USERNAME = '@Nas100freepip'
ログイン後にコピー
ログイン後にコピー

Ctrl C コマンドやプロセス終了などの割り込み信号 (SIGINT または SIGTERM) をキャプチャし、プログラムを正常に終了します。

12. メイン関数

CONTAS_MT5 = [
    {"login": 1690062, "senha": '5jsXlBg3~T', "servidor": 'ACGMarkets-Live', "us30": "US30.raw", "nas100": "NAS100.raw", "lote": 4.00}
]
ログイン後にコピー
ログイン後にコピー
  • シグナルハンドラーを構成します。
  • MT5 アカウントの接続を初期化します。
  • 指定されたグループ内の新しいメッセージをリッスンする Telegram クライアントを作成します。メッセージが到着すると、それが処理され、対応する注文が送信されます。
  • 割り込み信号を受信するまで待機してプログラムを終了します。

13. コードの実行

async def reconectar_mt5(conta, max_tentativas=3):
    for tentativa in range(max_tentativas):
        try:
            if mt5.initialize(path=MT5_PATH, login=conta['login'], server=conta['servidor'], password=conta['senha']):
                logger.info(f"Reconexão bem-sucedida para conta {conta['login']}")
                return True
            else:
                logger.warning(f"Tentativa {tentativa + 1} de reconexão falhou para conta {conta['login']}: {mt5.last_error()}")
        except Exception as e:
            logger.error(f"Erro durante a tentativa {tentativa + 1} de reconexão para conta {conta['login']}: {e}")
        await asyncio.sleep(5)
    logger.error(f"Falha ao reconectar à conta {conta['login']} após {max_tentativas} tentativas")
    return False
ログイン後にコピー

main() 関数は、非同期コードの実行を管理するために asyncio.run() を使用して実行されます。


結論:

このコードは、Telegram を使用して売買シグナルを受信し、これらのシグナルを処理し、MetaTrader 5 に注文を送信して、受信した指示に従って市場を取引する自動取引ボットです。このコードは、非同期機能を使用して複数の

を処理します。

前に説明した詳細を含む完全なコードは次のとおりです。

from telethon import TelegramClient, events
import MetaTrader5 as mt5
import asyncio
import logging
from datetime import datetime
import signal
import os
import sys
import pkg_resources
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

機能の概要:

  1. reconnect_mt5: 最大試行回数まで MetaTrader 5 への再接続を試行します。
  2. send_order: 受信したシグナルに基づいて買い注文または売り注文を MetaTrader 5 に送信します。
  3. process_signal: Telegram から受信したメッセージを解釈し、MetaTrader 5 で対応する注文を実行します。
  4. verify_connections: MetaTrader 5 への接続がアクティブかどうかを確認し、必要に応じて再接続を試みます。
  5. signal_handler: プログラムを終了する割り込み信号を処理します

以上がmt5 でシグナルを複製する Telegram ボットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート