はじめに
Telegramボットを使用して、金融取引に関するシグナル(例:買い・売りシグナル、テイクプロフィット(TP)、ストップロス(SL)など)をチャットから読み込み、ファイルに書き込むボットの作成を進めていた際に、特定のメッセージ形式が正しく処理されないという問題に直面しました。
例えば、次のようなシグナルメッセージ:
Gold buy now @ 2571.00 - 2568.00
tp : 2577.00
tp2 : 2600.00
sl : 2565.00
このメッセージ内には、売買シグナル(BUY)、エントリープライス、テイクプロフィット(TP)、ストップロス(SL)の情報が含まれていますが、元のコードでは “BUY” しか認識せず、重要な価格情報を無視してしまうという問題が発生しました。
問題点
初期のコードでは、メッセージを単純に大文字に変換し、キーワード(BUY, SELL)を検索しているだけでした。これにより、以下のような問題が発生しました:
- 改行やフォーマットを無視:
- メッセージが複数行にわたる場合、改行を無視してすべての行をつなげてしまい、シグナルのパースに失敗していました。
- 価格情報の抽出ができない:
- メッセージ内の価格情報やTP、SLといった取引に必要な情報は無視され、BUYやSELLのような単純なキーワードだけが認識されていました。
改善のポイント
この問題を解決するために、次の改善を行いました:
- 正規表現を使用した価格情報のパース: メッセージの内容に応じて、取引価格、TP、SLなどを正規表現で抽出するようにしました。これにより、メッセージの書式に依存せず、柔軟に情報を取得できるようになりました。
- 改行を保持して処理: メッセージの改行を削除せずに、そのまま処理することで、メッセージ内の構造を壊さずにパースできるようにしました。
- フォーマットされた情報をリストとして返す: シグナルメッセージの内容(BUY, SELL, TP, SLなど)をリスト形式で処理し、ファイルに書き込む際にもそのフォーマットを保持しました。
改善後のコード
以下に、改善した process_message
関数の概要を示します(APIキーや特定のディレクトリパスなどは省略してあります)。
import re
class TelegramSignalBot:
def process_message(self, message):
“””メッセージをパースし、シグナルを抽出”””
try:
# メッセージの改行を維持する
message = message.upper()
print(“Processed message:”, message)
signals = []
# CLOSE と SECURE を優先
if “CLOSE” in message:
signals.append(“ALLCLOSE”)
if “SECURE” in message:
signals.append(“ALLCLOSE”)
if “HIT” in message:
signals.append(“ALLCLOSE”)
if “BREAKEVEN” in message:
signals.append(“ALLCLOSE”)
# その後に BUY と SELL を処理
if “BUY” in message:
signals.append(“BUY”)
if “SELL” in message:
signals.append(“SELL”)
# TP, SL, および価格情報の抽出
tp_match = re.search(r’TP\s*:\s*([\d.]+)’, message)
tp2_match = re.search(r’TP2\s*:\s*([\d.]+)’, message)
sl_match = re.search(r’SL\s*:\s*([\d.]+)’, message)
price_match = re.search(r’@[\s]*([\d.]+)[\s]*-[\s]*([\d.]+)’, message)
if tp_match:
signals.append(f”TP: {tp_match.group(1)}”)
if tp2_match:
signals.append(f”TP2: {tp2_match.group(1)}”)
if sl_match:
signals.append(f”SL: {sl_match.group(1)}”)
if price_match:
signals.append(f”ENTRY: {price_match.group(1)} – {price_match.group(2)}”)
if len(signals) == 0:
return message
else:
return signals
except Exception as e:
print(f”Error processing message: {e}”)
return “”
改善内容の詳細
- 正規表現の使用:
re.search
を使用して、次のようなパターンで価格情報やシグナルを抽出しています:TP
(テイクプロフィット):r'TP\s*:\s*([\d.]+)'
TP2
:r'TP2\s*:\s*([\d.]+)'
SL
(ストップロス):r'SL\s*:\s*([\d.]+)'
価格情報
:r'@[\s]*([\d.]+)[\s]*-[\s]*([\d.]+)'
これにより、複数行のメッセージや異なるフォーマットにも柔軟に対応できるようになりました。
- メッセージの構造を保持: メッセージが複数行に分かれていても、改行を保持することで、元の構造に基づいて情報を正確に取得できるようにしています。
- リスト形式での処理: シグナルの内容(BUY, SELL, TP, SLなど)をリスト形式で保持し、処理の流れを簡潔にしました。このリスト形式により、ファイルへの書き込みもスムーズに行えます。
まとめ
今回の改善により、Telegramボットがメッセージから取引に必要な詳細情報(価格、TP、SLなど)を正確にパースできるようになり、より堅牢なシグナル処理が可能となりました。改行を含むメッセージや複雑なフォーマットにも対応できるため、今後の拡張やメンテナンスも容易になります。
APIキーや保存パスは公開されていませんが、コードのロジックがどのように機能しているかを理解するための参考にしてください。
【驚愕】総額140万円分のFXシグナルが“たった2万円”で永久入手!?
🎯最前線の理論 × 実践力で磨き上げた──常勝の“シグナル配信スタンド”が、今ここに。
ICT・ダウ理論・マレーシアSnR・SmartTrade…
世界を席巻するあらゆる近代投資理論を融合し、
実戦トレーダーたちが”共同開発”した精鋭シグナル群──
その名も、SODAシリーズ!
🌟SODA(FREE)🌟:🆓まずは無料で!高精度お試しチャンネル🎵
🥇SODA(MB GOLD):金取引のプロが放つ、一撃必殺の破壊力💥
🥈SODA(ICT THE BEST):ダウ理論×ICTの黄金比。週間500pipsは当たり前。
🎯SODA(DG):狙撃手のような的確エントリー🔫精度の鬼。
🌍SODA(UK):マイナー通貨も網羅!真のオールラウンダー🌈
🧠SODA(PK):SmartTradeで“考えるトレード”をサポート🎓✨
💬ウソ偽りナシ、淡々と“勝ち”を積み上げる。
再現性の高い手法とリアルな結果に裏打ちされた、信頼のシグナル配信を──
📩まずは無料でその“本物”を、体感していただきたいと思います。
💡🤝互助サービス入会のご案内🤝💡
- 入会価格はわかりやすく一律 ¥2万円(払い切り) です。
- 一度のお支払いで一生涯使えます!
- 💳お支払い方法:PayPayマネー送金、PayPay振込に対応しています🏦
🧐よくあるご質問Q&A✨
- ⏳シグナルの配信期間はいつまでですか?
→ 入会から無制限です。 - 💻VPSは必要ですか?
→ EAを動かす場合はVPSが必要です。月額10ドルで利用できる安定したVPSもご案内しています。 - ⚠️法的なリスクはありますか?
→ FX取引にはリスクが伴います。当グループのシグナルは参考情報として提供されていますので、自己責任での取引をお願いします。
お気軽に相談ください
「まずはどんなのか、覗いてみたい」「1月だけ全機能を使ってみたい」など、お試しなど、あらゆるご要望にお応えします。まずはお気軽にメッセージを送ってみてください。