Telegramシグナルボットの改良 – 価格情報を正確にパースする方法、シグナルの読取不良を防ぐために…

はじめに

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)を検索しているだけでした。これにより、以下のような問題が発生しました:

  1. 改行やフォーマットを無視:
    • メッセージが複数行にわたる場合、改行を無視してすべての行をつなげてしまい、シグナルのパースに失敗していました。
  2. 価格情報の抽出ができない:
    • メッセージ内の価格情報やTP、SLといった取引に必要な情報は無視され、BUYやSELLのような単純なキーワードだけが認識されていました。

改善のポイント

この問題を解決するために、次の改善を行いました:

  1. 正規表現を使用した価格情報のパース: メッセージの内容に応じて、取引価格、TP、SLなどを正規表現で抽出するようにしました。これにより、メッセージの書式に依存せず、柔軟に情報を取得できるようになりました。
  2. 改行を保持して処理: メッセージの改行を削除せずに、そのまま処理することで、メッセージ内の構造を壊さずにパースできるようにしました。
  3. フォーマットされた情報をリストとして返す: シグナルメッセージの内容(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 “”


改善内容の詳細

  1. 正規表現の使用: 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.]+)'

    これにより、複数行のメッセージや異なるフォーマットにも柔軟に対応できるようになりました。

  2. メッセージの構造を保持: メッセージが複数行に分かれていても、改行を保持することで、元の構造に基づいて情報を正確に取得できるようにしています。
  3. リスト形式での処理: シグナルの内容(BUY, SELL, TP, SLなど)をリスト形式で保持し、処理の流れを簡潔にしました。このリスト形式により、ファイルへの書き込みもスムーズに行えます。

まとめ

今回の改善により、Telegramボットがメッセージから取引に必要な詳細情報(価格、TP、SLなど)を正確にパースできるようになり、より堅牢なシグナル処理が可能となりました。改行を含むメッセージや複雑なフォーマットにも対応できるため、今後の拡張やメンテナンスも容易になります。

APIキーや保存パスは公開されていませんが、コードのロジックがどのように機能しているかを理解するための参考にしてください。

FX

ディープフェイク・AI詐欺の最新手口 ❄️ 声も顔も信用できない時代へ——2026年、生成AIが詐欺を「産業化」した全手口と1210%増加の衝撃
2025年、AI詐欺は前年比1,210%という数字で急増した。従来の詐欺全体の増加率が195%であったことを考えると、この数字の異常さは明白である。生成AIの登場は詐欺の「質」と「量」を同時に爆発させ、人間の感覚器官——視覚と聴覚——を信頼の根拠にすることをほぼ不可能にした。 🧸「1210%って……もはや別次元の数字だよね。しろくまちゃん、具体的にどんな手口があるの?」 🐻‍❄️「フォフォ、今から5つの主要手口を解説するのじゃ。聞いているうちに「これはもう人間には止められない」と思うかもしれんが、最後まで聞いておくれ🐻‍❄️✨」 手口①——ディープフェイク動画:顔が見えても「本人」ではない 実在の経営者、著名投資家、芸能人の顔と声を精巧に合成した動画が、投資広告として拡散されている。かつては唇の動きのズレや不自然な瞬きで見分けることができたが、2026年現在のディープフェイク技術はそのような「粗さ」を完全に排除している。ScamWatch HQのデータでは、2025年にディープフェイク動画詐欺は700%急増し、ある専門機関は2025年第4四半期だけで15万9千件以上の事例を検知

続きを読む

6ステップ詐欺プロセスの全解剖 ❄️ タップした瞬間から始まっている——SNS投資詐欺「6段階の罠」を完全図解、あなたはどこで気づけるか
40代・50代が狙われる理由と心理の罠 ❄️「自分は騙されない」と思っている人ほど危ない——2026年SNS投資詐欺、中高年が標的になる本当の理由
【FX検証】SODA(CRT2nd) 建設的評価 🐻‍❄️ 報告135pips vs 推測797pips超・SLトレーリング戦略の柔軟検証(2026年3月9日〜16日)
【FX検証】SODA(TTT)建設的評価🐻‍❄️ 報告+1,356pips/推測+67pips・報告+196万円/推測+10万円の柔軟的検証(2026年2月9日-15日)

「FX」記事をもっと見る