Mengapa agen persiapan pagi adalah robot ROI tertinggi yang bisa Anda bangun terlebih dahulu
Jika Anda berdagang FX secara discretionary atau menjalankan buku semi otomatis, 45 menit termahal dari hari Anda adalah yang sebelum London dibuka. Kalender rilis, memeriksa silang yang sidik jari adalah tingkat satu, melihat konsensus, memindai malam bergerak pada USD/JPYAku akan pergi. EUR/USDAku akan pergi. GBP/USD, dan mencoba mengingat pembicara bank sentral yang penting hari ini. itu berulang, rentan terhadap kesalahan, dan memaksa Anda untuk membangun kembali konteks setiap pagi dari nol.
Ini adalah persis jenis tugas yang agen AI lakukan lebih baik dari manusia: ruang lingkup terbatas, input terstruktur, output deterministik. agen acara FX real-time yang berjalan sebelum hari perdagangan Anda, menarik data acara langsung dari FXMacroData, peringkat rilis hari ini oleh kemungkinan dampak pasar, dan memberikan briefing terstruktur Anda dapat membaca dalam 90 detik.
Pada akhirnya Anda akan memiliki skrip yang dapat Anda jadwalkan di mesin manapun laptop, Raspberry Pi, cloud VM yang mengubah persiapan pagi dari pekerjaan rumah menjadi daftar periksa.
Agen Python yang berjalan pada pukul 06:30 UTC setiap hari, menanyakan kalender rilis FXMacroData untuk 24 jam ke depan di seluruh G10, memberi peringkat peristiwa berdasarkan dampak, meringkasnya melalui LLM, dan mendorong briefing terstruktur ke Telegram atau Slack.
Persyaratan
- Python 3.10+ dan pip.
- Kunci API FXMacroData dari Manajemen APIAku tidak tahu.
- Sebuah titik akhir LLM yang Anda kendalikan.
- Claude antropik (disarankan untuk kualitas penalaran).
- OpenAI GPT-4 kelas.
- Hermes lokal / Llama melalui Ollama untuk biaya nol.
- Sebuah token bot Telegram (melalui
@BotFatheratau Slack yang masuk webhook URL baik berfungsi sebagai saluran pengiriman. - Seorang penjadwal.
cronpada Linux/macOS, Task Scheduler pada Windows, atau awan cron apa pun akan dilakukan.
Menginstal ketergantungan:
pip install requests python-dotenv
Buatlah .env file dengan rahasia Anda:
FXMD_API_KEY=your_fxmacrodata_key
LLM_PROVIDER=anthropic # or "openai" or "ollama"
ANTHROPIC_API_KEY=sk-ant-...
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...
Langkah 1: Tarik 24 jam berikutnya dari kalender rilis FXMacroData
Tugas pertama agen adalah mengetahui apa yang sebenarnya dijadwalkan. FXMacroData release calendar endpoint returns scheduled releases per currency, termasuk nama indikator, jadwal waktu UTC, nilai sebelumnya, dan peringkat pentingnya jika tersedia.
Carilah untuk setiap mata uang utama yang Anda perdagangan:
curl "https://fxmacrodata.com/api/v1/calendar/usd?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/calendar/eur?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/calendar/gbp?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/calendar/jpy?api_key=YOUR_API_KEY"
Bungkus ini di Python sehingga agen dapat diulang di seluruh daftar mata uang yang dapat dikonfigurasi:
import os
import requests
from datetime import datetime, timedelta, timezone
from dotenv import load_dotenv
load_dotenv()
API = "https://fxmacrodata.com/api/v1"
KEY = os.environ["FXMD_API_KEY"]
CURRENCIES = ["usd", "eur", "gbp", "jpy", "aud", "cad", "chf", "nzd"]
def fxmd_get(path, **params):
r = requests.get(
f"{API}{path}",
params={"api_key": KEY, **params},
timeout=25,
)
r.raise_for_status()
return r.json()
def upcoming_releases(hours_ahead: int = 24):
now = datetime.now(timezone.utc)
cutoff = now + timedelta(hours=hours_ahead)
releases = []
for ccy in CURRENCIES:
try:
data = fxmd_get(f"/calendar/{ccy}").get("data", [])
except requests.HTTPError:
continue
for ev in data:
try:
ts = datetime.fromisoformat(
ev["announcement_datetime"].replace("Z", "+00:00")
)
except (KeyError, ValueError):
continue
if now <= ts <= cutoff:
releases.append({
"currency": ccy.upper(),
"indicator": ev.get("indicator") or ev.get("name"),
"scheduled_utc": ts.isoformat(),
"prior": ev.get("prior_value"),
"consensus": ev.get("consensus") or ev.get("market_consensus"),
"importance": ev.get("importance") or ev.get("impact"),
})
releases.sort(key=lambda r: r["scheduled_utc"])
return releases
Langkah 2: Peringkat rilis berdasarkan kemungkinan dampak pasar
Tidak semua cetakan bergerak pasar. Gaji non-perhutananAku akan pergi. PCE intiAku akan pergi. Tingkat kebijakan FedAku akan pergi. CPI zona euroAku akan pergi. UK CPI, dan BoJ kebijakan suku bunga Sebuah flash perdagangan ritel untuk ekonomi kecil jarang penting.
Kode tabel berat eksplisit sehingga agen tidak perlu menebak. ini adalah bagian tunggal leverage tertinggi dari seluruh sistem berat badan Anda, tepi Anda.
TIER_1 = {
("USD", "non_farm_payrolls"), ("USD", "core_pce"), ("USD", "policy_rate"),
("USD", "inflation"), ("USD", "fomc_minutes"),
("EUR", "inflation"), ("EUR", "policy_rate"),
("GBP", "inflation"), ("GBP", "policy_rate"),
("JPY", "policy_rate"), ("JPY", "inflation"),
("AUD", "policy_rate"), ("CAD", "policy_rate"),
("CHF", "policy_rate"), ("NZD", "policy_rate"),
}
TIER_2 = {
("USD", "retail_sales"), ("USD", "ism_manufacturing"),
("EUR", "gdp"), ("EUR", "unemployment"),
("GBP", "gdp"), ("GBP", "retail_sales"),
("AUD", "inflation"), ("CAD", "inflation"),
}
def impact_score(event: dict) -> int:
key = (event["currency"], (event["indicator"] or "").lower())
if key in TIER_1:
return 3
if key in TIER_2:
return 2
return 1
def rank(releases):
return sorted(
releases,
key=lambda r: (-impact_score(r), r["scheduled_utc"]),
)
Sekarang Anda dapat meringkas hari ke dalam daftar terstruktur di mana peristiwa tier-1 muncul pertama terlepas dari waktu UTC.
Langkah 3: Tambahkan konteks semalam sehingga agen tahu apa yang sudah dipindahkan
Sebuah briefing pagi tidak lengkap tanpa snapshot dari pergerakan FX semalam. tarik harga spot terbaru untuk pasangan yang Anda pedulikan sehingga LLM dapat menenun tindakan harga ke dalam narasinya.
PAIRS = [("USD", "JPY"), ("EUR", "USD"), ("GBP", "USD"), ("AUD", "USD")]
def overnight_moves():
moves = []
for base, quote in PAIRS:
try:
data = fxmd_get(
"/forex",
base=base,
quote=quote,
).get("data", [])
except requests.HTTPError:
continue
if len(data) < 2:
continue
last = data[-1]["value"]
prev = data[-25]["value"] if len(data) >= 25 else data[0]["value"]
change_pct = (last - prev) / prev * 100
moves.append({
"pair": f"{base}/{quote}",
"last": round(last, 5),
"change_pct_24h": round(change_pct, 2),
})
return moves
Jika Anda juga ingin konteks posisi untuk perdagangan swing, tambahkan COT Tetaplah opsional briefing harus tetap berjalan tanpa itu.
Langkah 4: Membuat briefing dengan LLM
Agen sekarang memiliki tiga input terstruktur: acara peringkat, pergerakan FX semalam, dan timestamp UTC saat ini. Loloskan ke dalam model dengan kontrak output yang ketat sehingga briefing dapat diselesaikan dan konsisten setiap pagi.
import json
from anthropic import Anthropic
claude = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
SYSTEM_PROMPT = """You are an FX morning-prep analyst.
Given today's ranked releases and overnight moves, produce a briefing that:
- leads with the single most important event of the day,
- groups events by impact tier,
- flags 1-2 specific pairs to watch and why,
- ends with one disciplined risk caveat.
Do not give buy/sell instructions. Stay factual. Max 220 words."""
def generate_briefing(events, moves):
payload = json.dumps({
"utc_now": datetime.now(timezone.utc).isoformat(),
"ranked_events": events,
"overnight_moves": moves,
})
resp = claude.messages.create(
model="claude-3-5-sonnet-latest",
max_tokens=600,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": payload}],
)
return resp.content[0].text
Tiga hal membuat perintah ini dapat diandalkan:
- Masukan terstruktur. Model menerima JSON, bukan bahasa alami, jadi tidak pernah perlu mengekstrak tanggal atau angka dari teks.
- Hard scop. Sistem prompt melarang rekomendasi perdagangan yang membuat output sesuai dan berguna bahkan pada hari-hari volatile.
- Tutup panjang. 220 kata memaksa kepadatan sinyal, briefing panjang melatihmu untuk mengelabui, yang mengalahkan tujuannya.
Langkah 5: Kirim ke Telegram (atau Slack)
Briefing harus mendarat di tempat yang sudah kau cari pagi hari.
def send_telegram(text: str):
token = os.environ["TELEGRAM_BOT_TOKEN"]
chat_id = os.environ["TELEGRAM_CHAT_ID"]
requests.post(
f"https://api.telegram.org/bot{token}/sendMessage",
json={
"chat_id": chat_id,
"text": text,
"parse_mode": "Markdown",
"disable_web_page_preview": True,
},
timeout=15,
)
def run():
events = rank(upcoming_releases(hours_ahead=24))
moves = overnight_moves()
briefing = generate_briefing(events, moves)
header = f"*FX Morning Briefing — {datetime.now(timezone.utc):%a %d %b %Y}*\n\n"
send_telegram(header + briefing)
if __name__ == "__main__":
run()
Jadwalkan. Pada Linux/macOS, entri crontab tunggal menjalankan agen setiap hari kerja pada 06:30 UTC:
30 6 * * 1-5 /usr/bin/python3 /opt/fx-agent/morning_brief.py >> /var/log/fx-agent.log 2>&1
Seperti apa sebenarnya sesi briefing itu
Contoh output agen yang diproduksi pada minggu CPI baru-baru ini:
FX Morning Briefing — Thu 22 May 2026
Today's anchor: US Core PCE at 12:30 UTC. Consensus 0.2% MoM,
prior 0.0%. A second sub-0.1 print would cement the disinflation
narrative; a 0.3+ surprise resets Fed pricing.
Tier 1:
- 12:30 UTC USD Core PCE prior +0.0% cons +0.2%
- 13:30 UTC USD Initial Jobless Claims prior 228k cons 225k
Tier 2:
- 06:00 UTC GBP Retail Sales MoM prior -0.1% cons +0.4%
- 09:00 UTC EUR ECB Minutes (qualitative)
Pairs to watch:
- USD/JPY hovering 158.40 after a quiet Asia. PCE miss → 156s
back in play.
- GBP/USD coiled below 1.2700. Stronger UK retail + soft PCE is
the cleanest setup of the day.
Risk caveat: thin EU liquidity ahead of US data; expect outsized
moves on any surprise print.
Itu adalah pre-market yang lengkap dibaca dalam waktu kurang dari 90 detik, setiap hari kerja, tanpa manual scraping kalender.
Daftar pemeriksaan mengeras sebelum Anda mempercayainya
- Penjaga data yang usang. Menolak untuk mengirim briefing jika setiap level-1 acara yang hilang waktu yang dijadwalkan.
- Coba lagi dengan back-off Tiga kali, 2s/4s/8s, kemudian gagal keras.
- Validator output. Menolak setiap jawaban LLM yang berisi kata-kata "beli", "jual", atau "panjang" / "pendek".
- Peringatan detak jantung. Jika agen gagal mengirim briefing pada pukul 07:00 UTC, ping diri Anda secara terpisah sehingga Anda tidak diam-diam kehilangan alur kerja.
- Batas biaya. Siap
max_tokens=600dan batas pengeluaran harian LLM.
Ke mana harus membawanya selanjutnya
Gerbang yang sama dapat diperpanjang dengan mudah setelah loop pagi dapat diandalkan:
- Peringatan kejutan intraday. Poll pengumuman titik akhir setiap 15 menit setelah rilis tingkat 1; waspada ketika aktual menyimpang dari konsensus lebih dari ambang batas Anda.
- Rapat persidangan pasangan tertentu. Menghasilkan lebih ketat USD/JPY- Hanya atau EUR/USD- hanya versi untuk hari aktif.
- Posisi overlay. Tarik. Data COT mingguan dan memasukkannya ke prompt yang sama sehingga briefing tahu kapan pasar sepihak.
- Mode suara. Salurkan laporan melalui model TTS dan bacalah sambil membuat kopi.
Kemenangan bukan dalam briefing itu sendiri itu adalah disiplin, konteks yang dapat direproduksi Anda berjalan ke hari perdagangan Anda dengan.