لماذا إشارات الكلية هي أساس تداول الفوركس Algo
أسعار الصرف لا تتحرك بشكل عشوائي. فهي تعكس الجذب النسبي لاقتصادين: أي البنك المركزي يشد أسرع، حيث العائدات الحقيقية أعلى، أي نظام تضخم يدهور القوة الشرائية، وأين يتدفق رأس المال نتيجة لذلك. يمكن تتبع كل اتجاه كبير لعدة أسابيع في EUR / USD أو AUD / JPY أو GBP / USD إلى التحولات في هذه الأساسيات التحوليات التي يتم الإعلان عنها على جدول زمني معروف وملاحظ من خلال البيانات العامة.
يقوم التجار التقدميون بمعالجة هذه الإشارات يدويًا. يقوم التداول الخوارزمي بتشفيرها. يمر هذا الدليل من خلال بناء استراتيجية FX كاملة مدفوعة بالإشارات الكبرى في Python باستخدام FXMacroData كطبقة بيانات. بحلول النهاية سيكون لديك نظام عمل:
- يحصل على أسعار الفائدة السياسية والتضخم والعمالة، وفروق عائدات السندات لعملتين عبر FXMacroData API
- يحسب درجة نظام الكلي المركب لتحديد التحيز الاتجاهي
- يسحب تاريخ سعر الفورية للعملات الأجنبية لتوفير السياق الفني
- جدولة تحديثات إشارة حول أحداث تقويم الإصدارات ذات التأثير العالي
- يصدر إشارات طويلة / قصيرة / محايدة مع توجيه حجم الموقف
- تطبيق ضوابط المخاطر الأساسية: وقف الخسارة، وحدات الحجم، وتعطيلات نافذة الأخبار
أطروحة أساسية
الاختلاف الكلي عندما يشد البنك المركزي بينما يسهل آخر، عندما يكون الاقتصاد في حالة عمل كامل بينما يتدهور آخر هو المحرك الأكثر استدامة لاتجاهات العملات الأجنبية الاتجاهية. الخوارزميات التي تقرأ هذا الاختلف من البيانات الحية، وتحديث تحيزها مع كل إصدار جديد يصل، يتم وضعها أمام الحشد.
الشروط المسبقة
قبل البدء، تأكد من أن لديك ما يلي:
- بايثون 3.9+ جميع المقتطفات تستخدم تعليقات نوعية قياسية
- مفتاح FXMacroData API التسجيل في / اشترك ونسخ مفتاحك من لوحة حسابك
- حزم بايثون.
requests- لاpandas- لاnumpy
pip install requests pandas numpy
تخزين مفتاح API الخاص بك كمتغير بيئة أبداً إثباتات التعليمات الشخصية الصلبة في ملفات المصدر:
export FXMACRO_API_KEY="YOUR_API_KEY"
الأمثلة أدناه التجارة اليورو/دولار، ولكن نفس النمط ينطبق على أي زوج متاح في FXMacroData. ببساطة تبادل EUR و USD للعملات التي تريد أن نموذجها.
الخطوة 1: احضر مؤشرات الكاميرا الأساسية
أربعة مجموعات من المؤشرات تحرك معظم تحركات العملات الأجنبية الهيكلية: أسعار الفائدة السياسية للبنوك المركزية، تضخم أسعار المستهلك، صحة سوق العمل، وعائدات السندات الحكومية. النظام الكلي لكل جانب من أزواج العملات.
توفر FXMacroData كل هذه عن طريق نقطة نهاية REST متسقة:
GET /api/v1/announcements/{currency}/{indicator}كل ملاحظة تحتوي على date، a val (قيمة المؤشر) ، و announcement_datetime دقيقة إلى الثانية حتى تعرف دائما بالضبط عندما اكتشف السوق.
import os
import requests
from datetime import date, timedelta
BASE_URL = "https://fxmacrodata.com/api/v1"
API_KEY = os.environ["FXMACRO_API_KEY"]
def fetch_indicator(currency: str, indicator: str, lookback_days: int = 400) -> list[dict]:
"""Fetch the most recent observations for a macro indicator."""
start = (date.today() - timedelta(days=lookback_days)).isoformat()
resp = requests.get(
f"{BASE_URL}/announcements/{currency}/{indicator}",
params={"api_key": API_KEY, "start": start},
timeout=10,
)
resp.raise_for_status()
return resp.json().get("data", [])
# Pull the four core series for both sides of EUR/USD
usd_rate = fetch_indicator("usd", "policy_rate")
eur_rate = fetch_indicator("eur", "policy_rate")
usd_inflation = fetch_indicator("usd", "inflation")
eur_inflation = fetch_indicator("eur", "inflation")
usd_nfp = fetch_indicator("usd", "non_farm_payrolls")
usd_unemp = fetch_indicator("usd", "unemployment")
usd_yield = fetch_indicator("usd", "gov_bond_10y")
eur_yield = fetch_indicator("eur", "gov_bond_10y")
- ... سعر سعر السياسة و عائد السندات لمدة 10 سنوات ويمكن أن تلتقط بعد سعر الفائدة مباشرة. التضخم وتكشف هذه السلسلة ما إذا كان البنك المركزي سيتعين على تعزيز تشديد أو لديه مجال للتيسير. الرواتب غير الزراعية و البطالة إكمال صورة سوق العمل للجانب الدولار.
الخطوة 2: حساب درجة النظام الكلي
تسقط درجة النظام العديد من المؤشرات في إشارة اتجاهية واحدة. النهج هنا بسيط عمدا: لكل عملة ، قارن آخر سعر سعر السياسة ومعدل التضخم وعائد السندات بمعدلاتها الخاصة لمدة 12 شهرًا. العملة التي تكون أساسياتها أعلى من اتجاهها في حالة من الارتفاع في السعر. نظام تعزيز؛ واحدة تحت اتجاهها في نظام الضعفيمنحك التفريق بين النتيجةين تحيز الاتجاه للزوج
import pandas as pd
import numpy as np
def latest_val(series: list[dict]) -> float | None:
"""Return the most recent value from a sorted indicator series."""
if not series:
return None
return series[-1]["val"]
def rolling_zscore(series: list[dict], window: int = 12) -> float | None:
"""Z-score of the latest value relative to the last `window` observations."""
vals = [r["val"] for r in series if r.get("val") is not None]
if len(vals) < 2:
return None
arr = np.array(vals[-window:], dtype=float)
mu, sigma = arr.mean(), arr.std()
if sigma == 0:
return 0.0
return float((arr[-1] - mu) / sigma)
def macro_score(
policy_rate: list[dict],
inflation: list[dict],
bond_yield: list[dict],
) -> float:
"""
Composite macro score for one currency.
Positive → strengthening macro backdrop.
Negative → weakening macro backdrop.
"""
weights = {"policy_rate": 0.40, "inflation": 0.30, "bond_yield": 0.30}
scores = {
"policy_rate": rolling_zscore(policy_rate),
"inflation": rolling_zscore(inflation),
"bond_yield": rolling_zscore(bond_yield),
}
total, weight_sum = 0.0, 0.0
for key, w in weights.items():
z = scores[key]
if z is not None:
total += w * z
weight_sum += w
return total / weight_sum if weight_sum > 0 else 0.0
usd_score = macro_score(usd_rate, usd_inflation, usd_yield)
eur_score = macro_score(eur_rate, eur_inflation, eur_yield)
# Positive → USD macro stronger → bias SHORT EUR/USD
# Negative → EUR macro stronger → bias LONG EUR/USD
regime_spread = usd_score - eur_score
print(f"USD macro score: {usd_score:+.3f}")
print(f"EUR macro score: {eur_score:+.3f}")
print(f"Regime spread (USD − EUR): {regime_spread:+.3f}")
تفسير انتشار النظام
- أرضية فوق +0.5 تشير إلى أن نسبة الأداء الكلي للدولار الأمريكي تتفوق بشكل كبير على نسبة أداء اليورو الكلي وهي رياح مؤاتية هيكلية لقوة الدولار الأمريكى. -0.5 تشير القيم بين -0.5 و +0.5 إلى نظام محايد دون حافة اتجاهية قوية من الأساسيات وحدها.
الخطوة 3: إضافة سياق سوق العمل للدولار الأمريكي
بالنسبة لأزواج الدولار الأمريكي على وجه التحديد، غالبًا ما يقلل سوق العمل من إشارة السعر على المدى القصير. يمكن أن يدفع طفرة طباعة الرواتب بنك الاحتياطي الفيدرالي إلى وقف التخفيضات حتى عندما ينخفض التضخم؛ يمكن أن تؤدي قفزة مفاجئة في البطالة إلى تسريع توقعات التخفيف. يشمل عنصر التوظيف درجة الدولار حول نوافذ البيانات عالية التأثير.
def employment_score(nfp: list[dict], unemployment: list[dict]) -> float:
"""
Labour market contribution to the USD score.
Positive NFP momentum + falling unemployment → bullish.
"""
nfp_z = rolling_zscore(nfp)
unemp_z = rolling_zscore(unemployment)
if nfp_z is None and unemp_z is None:
return 0.0
score = 0.0
count = 0
if nfp_z is not None:
score += 0.60 * nfp_z # NFP gets more weight
count += 1
if unemp_z is not None:
# Unemployment is inverse: a rising z-score is bearish for USD
score -= 0.40 * unemp_z
count += 1
return score
usd_employment = employment_score(usd_nfp, usd_unemp)
# Rebuild USD score including labour market
usd_score_full = (
0.35 * (rolling_zscore(usd_rate) or 0.0) +
0.25 * (rolling_zscore(usd_inflation) or 0.0) +
0.25 * (rolling_zscore(usd_yield) or 0.0) +
0.15 * usd_employment
)
regime_spread_full = usd_score_full - eur_score
print(f"USD score (with labour): {usd_score_full:+.3f}")
print(f"Regime spread (full): {regime_spread_full:+.3f}")
الخطوة 4: سحب تاريخ سعر الفوركس
توفر درجات النظام الكلي إقناعاً اتجاهياً، ولكن توقيت الدخول لا يزال يستفيد من فلتر قائم على السعر. الدخولة في EUR/USD قصيرة في نظام USD قوي عندما يكون الزوج 3 انحرافات قياسية فوق متوسطه لمدة 50 يومًا هي ملف خطر مختلف عن الدخال عندما يكون الاتجاه بالفعل أقل. النقطة النهائية للعملات الأجنبية يوفر أسعار الإغلاق اليومية التي يمكنك استخدامها لحساب سياق الأسعار الأساسية.
def fetch_spot_rates(base: str, quote: str, lookback_days: int = 200) -> pd.Series:
"""Fetch FX spot rate history and return as a date-indexed Series."""
start = (date.today() - timedelta(days=lookback_days)).isoformat()
resp = requests.get(
f"{BASE_URL}/forex/{base}/{quote}",
params={"api_key": API_KEY, "start": start},
timeout=10,
)
resp.raise_for_status()
data = resp.json().get("data", [])
if not data:
return pd.Series(dtype=float)
df = pd.DataFrame(data).set_index("date").sort_index()
return df["close"].astype(float)
spot = fetch_spot_rates("EUR", "USD")
sma50 = spot.rolling(50).mean()
sma200 = spot.rolling(200).mean()
latest_price = spot.iloc[-1]
latest_sma50 = sma50.iloc[-1]
latest_sma200 = sma200.iloc[-1]
# Simple trend filter: is price above or below key moving averages?
price_trend = "bullish" if latest_price > latest_sma50 > latest_sma200 else (
"bearish" if latest_price < latest_sma50 < latest_sma200 else "mixed")
print(f"EUR/USD latest: {latest_price:.5f} SMA50: {latest_sma50:.5f} SMA200: {latest_sma200:.5f}")
print(f"Price trend: {price_trend}")
الخطوة 5: الاشتراك في تقويم الإصدارات
يعد الوقت الأكثر خطورة لعقد موقف FX مفتوح هو 15 دقيقة حول الإصدار المقرر الرئيسي. تقارير سعر السياسة، مطبوعات مؤشر أسعار المستهلك، وبيانات الرواتب كلها تحمل إمكانية وجود فجوات 3080 نقطة. يتجنب الخيار المنضبط جيدًا دخول مواقف جديدة في هذه النوافذ ويمكن إغلاق أو التحوط من الموجودين.
يعيد نقطة نهاية تقويم إصدار FXMacroData كل إصدر مقرر قادم باسم المؤشر وتاريخ الإعلان المتوقع ، مما يجعل من السهل بناء جدولة إغلاق:
from datetime import datetime, timezone
def fetch_upcoming_releases(currency: str, days_ahead: int = 14) -> list[dict]:
"""Return scheduled macro releases for a currency over the next N days."""
resp = requests.get(
f"{BASE_URL}/calendar/{currency}",
params={"api_key": API_KEY},
timeout=10,
)
resp.raise_for_status()
events = resp.json().get("data", [])
cutoff = datetime.now(timezone.utc) + timedelta(days=days_ahead)
upcoming = []
for evt in events:
dt_str = evt.get("announcement_datetime") or evt.get("date")
if not dt_str:
continue
try:
evt_dt = datetime.fromisoformat(dt_str.replace("Z", "+00:00"))
except ValueError:
continue
if datetime.now(timezone.utc) <= evt_dt <= cutoff:
upcoming.append(evt)
return upcoming
HIGH_IMPACT = {"policy_rate", "inflation", "non_farm_payrolls", "unemployment", "gdp"}
BLACKOUT_MINUTES = 20 # minutes before/after release to block new entries
def is_in_blackout_window(releases: list[dict], now: datetime | None = None) -> bool:
"""Return True if the current moment falls inside any high-impact release window."""
if now is None:
now = datetime.now(timezone.utc)
window = timedelta(minutes=BLACKOUT_MINUTES)
for evt in releases:
if evt.get("indicator") not in HIGH_IMPACT:
continue
dt_str = evt.get("announcement_datetime") or evt.get("date")
if not dt_str:
continue
try:
evt_dt = datetime.fromisoformat(dt_str.replace("Z", "+00:00"))
except ValueError:
continue
if abs(now - evt_dt) <= window:
return True
return False
usd_releases = fetch_upcoming_releases("usd")
eur_releases = fetch_upcoming_releases("eur")
all_releases = usd_releases + eur_releases
print(f"Upcoming high-impact releases (next 14 days): {len(all_releases)}")
print(f"Currently in blackout window: {is_in_blackout_window(all_releases)}")
لماذا يُهم إغلاق النوافذ
يمتد الفروق، وتنزلق الإجراءات، وتتبع التوقف أمر شائع في الدقائق المحيطة بالإصدارات الرئيسية. حتى لو كانت إشارة الكلية الخاصة بك صحيحة، فإن جودة التعبئة السيئة حول الأحداث ذات التأثير العالي يمكن أن تحول الحافة المربحة إلى خاسرة صافية. إنشاء جدولة واعية للتقويم في الاستراتيجية من البداية يتجنب هذه الفئة من المخاطر تمامًا.
الخطوة السادسة: توليد إشارة حية
مع النتائج الكبيرة، سياق سعر الفورية، والتحقق من التوقف عن التوقيت في مكان، يمكنك تجميعها في وظيفة إشارة واحدة التي تنتج اتجاه، والثقة، وحجم الموقف الموصى به عند الطلب.
from dataclasses import dataclass
from typing import Literal
@dataclass
class Signal:
direction: Literal["long", "short", "neutral"]
confidence: float # 0.0 → 1.0
regime_spread: float # positive → USD stronger
price_trend: str
in_blackout: bool
reason: str
REGIME_THRESHOLD = 0.45 # minimum spread magnitude to take a position
TREND_CONFIRMATION = True # require price trend to agree with regime signal
def generate_signal(
regime_spread: float,
price_trend: str,
releases: list[dict],
) -> Signal:
"""
Combine macro regime spread and price trend into a trade signal.
regime_spread > 0 → USD stronger → short EUR/USD (quote currency up)
regime_spread < 0 → EUR stronger → long EUR/USD (base currency up)
"""
in_blackout = is_in_blackout_window(releases)
if in_blackout:
return Signal("neutral", 0.0, regime_spread, price_trend, True,
"Blackout window: high-impact release imminent.")
magnitude = abs(regime_spread)
if magnitude < REGIME_THRESHOLD:
return Signal("neutral", 0.0, regime_spread, price_trend, False,
f"Regime spread {regime_spread:+.3f} below threshold {REGIME_THRESHOLD}.")
# Determine raw macro direction
macro_dir = "short" if regime_spread > 0 else "long"
# Price trend confirmation
if TREND_CONFIRMATION:
if macro_dir == "short" and price_trend == "bullish":
return Signal("neutral", 0.20, regime_spread, price_trend, False,
"Macro bearish EUR/USD but price trend still bullish — wait for confirmation.")
if macro_dir == "long" and price_trend == "bearish":
return Signal("neutral", 0.20, regime_spread, price_trend, False,
"Macro bullish EUR/USD but price trend still bearish — wait for confirmation.")
# Confidence scales with regime magnitude (capped at 0.90)
confidence = min(0.90, magnitude / 1.5)
return Signal(macro_dir, confidence, regime_spread, price_trend, False,
f"Macro {'USD' if macro_dir == 'short' else 'EUR'} outperformance confirmed by price trend.")
signal = generate_signal(regime_spread_full, price_trend, all_releases)
print(f"Signal: {signal.direction.upper()} confidence: {signal.confidence:.0%}")
print(f"Reason: {signal.reason}")
الخطوة 7: تطبيق ضوابط المخاطر وحجم المواقع
إن توليد الإشارة هو نصف العمل فقط. بدون ضوابط خطرة منهجية، حتى مصدر إشارة عالي الجودة سيؤدي إلى سحب يتجاوز ما يمكن الاستراتيجية أن تدعمه. هناك ثلاثة ضوابط ضرورية على الأقل: الحد الأقصى لحجم الموقف بالنسبة لرأس المال في الحساب، وقف الخسارة الصلب في النقاط، وحد الخسائر اليومية الذي يوقف التداول بعد سلسلة من الجلسات الخاسرة.
@dataclass
class RiskConfig:
account_equity: float = 10_000.0 # USD
risk_per_trade_pct: float = 1.0 # percent of equity risked per trade
stop_loss_pips: float = 30.0 # maximum allowed loss in pips
pip_value_per_lot: float = 10.0 # USD per pip per standard lot (EUR/USD)
max_lots: float = 2.0 # hard cap on position size
daily_loss_limit_pct: float = 3.0 # pause trading if daily loss exceeds this
def compute_position_size(signal: Signal, config: RiskConfig) -> float:
"""
Return lot size based on risk per trade and stop-loss.
Scales with signal confidence — higher confidence allows up to full risk.
"""
if signal.direction == "neutral":
return 0.0
risk_amount = config.account_equity * (config.risk_per_trade_pct / 100)
# Scale risk by confidence
adjusted_risk = risk_amount * signal.confidence
# Max loss per lot at this stop = stop_loss_pips * pip_value_per_lot
max_loss_per_lot = config.stop_loss_pips * config.pip_value_per_lot
if max_loss_per_lot == 0:
return 0.0
raw_lots = adjusted_risk / max_loss_per_lot
return round(min(raw_lots, config.max_lots), 2)
risk = RiskConfig()
lots = compute_position_size(signal, risk)
dollar_risk = lots * risk.stop_loss_pips * risk.pip_value_per_lot
print(f"Recommended position: {lots} lots ({signal.direction.upper()} EUR/USD)")
print(f"Max risk at {risk.stop_loss_pips}-pip stop: ${dollar_risk:.2f}")
ملاحظة مخاطر الإنتاج
يستخدم المثال أعلاه نموذجًا للتحديد القياسي الكسري الثابت. في الإنتاج يجب عليك أيضًا تنفيذ: الحد الأقصى للعديد من المراكز المتزامنة، وحدود الارتباط بين أزواج العملات التي تتشارك نفس العملة (على سبيل المثال يطلب EUR/USD الطويل و GBP/USD طويل كل منهما قوة EUR أو USD) ، ووقف التداول الذي يتم تشغيله عن طريق السحب. تعامل مع هذه كالتكرار التالي بعد التحقق من صحة منطق الإشارة.
الخطوة الثامنة: وضع كل شيء معاً حلقة الاستراتيجية اليومية
الخطوة الأخيرة تجمع كل شيء في حلقة تنفيذ تعمل مرة واحدة في اليوم، وتحديث جميع بيانات الماكرو، وتقييم الإشارة، وتحقق من تقويم الإصدار، وإصدار توصية الطلب. في بيئة حية، كنت سوف تربط الناتج إلى بروكر واجهة برمجة التطبيقات أو نظام التداول الورقي؛ هنا نحتفظ به غير الوسيط والسجل القرار إلى وحدة التحكم.
import logging
from datetime import date, datetime, timedelta, timezone
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")
log = logging.getLogger(__name__)
def run_daily_strategy():
"""Main strategy loop — call once per trading day."""
log.info("─── Daily macro strategy update ───")
# 1. Fetch macro data
log.info("Fetching macro indicators...")
usd_rate_data = fetch_indicator("usd", "policy_rate")
eur_rate_data = fetch_indicator("eur", "policy_rate")
usd_inf_data = fetch_indicator("usd", "inflation")
eur_inf_data = fetch_indicator("eur", "inflation")
usd_nfp_data = fetch_indicator("usd", "non_farm_payrolls")
usd_unemp_data = fetch_indicator("usd", "unemployment")
usd_bond_data = fetch_indicator("usd", "gov_bond_10y")
eur_bond_data = fetch_indicator("eur", "gov_bond_10y")
# 2. Compute regime scores
usd_emp = employment_score(usd_nfp_data, usd_unemp_data)
usd_s = (
0.35 * (rolling_zscore(usd_rate_data) or 0.0) +
0.25 * (rolling_zscore(usd_inf_data) or 0.0) +
0.25 * (rolling_zscore(usd_bond_data) or 0.0) +
0.15 * usd_emp
)
eur_s = macro_score(eur_rate_data, eur_inf_data, eur_bond_data)
spread = usd_s - eur_s
log.info(f"USD score: {usd_s:+.3f} EUR score: {eur_s:+.3f} Spread: {spread:+.3f}")
# 3. Fetch spot rates and compute trend
log.info("Fetching spot rates...")
spot_series = fetch_spot_rates("EUR", "USD")
sma50_val = spot_series.rolling(50).mean().iloc[-1] if len(spot_series) >= 50 else None
sma200_val = spot_series.rolling(200).mean().iloc[-1] if len(spot_series) >= 200 else None
last_price = spot_series.iloc[-1]
trend = "mixed"
if sma50_val and sma200_val:
trend = ("bullish" if last_price > sma50_val > sma200_val else
"bearish" if last_price < sma50_val < sma200_val else "mixed")
log.info(f"EUR/USD {last_price:.5f} trend: {trend}")
# 4. Fetch release calendar
log.info("Fetching release calendars...")
releases = fetch_upcoming_releases("usd") + fetch_upcoming_releases("eur")
log.info(f"Upcoming events: {len(releases)}")
# 5. Generate signal
sig = generate_signal(spread, trend, releases)
lots = compute_position_size(sig, RiskConfig())
log.info(f"Signal: {sig.direction.upper()} confidence: {sig.confidence:.0%} lots: {lots}")
log.info(f"Reason: {sig.reason}")
return sig, lots
if __name__ == "__main__":
run_daily_strategy()
الخطوات التالية: توسيع الاستراتيجية
الإطار أعلاه هو خفيف عمدا حتى تتمكن من تتبع كل قرار من البيانات الخام إلى الناتج النهائي. بمجرد التحقق من صحة المنطق على البيانة التاريخية، العديد من التمديدات الطبيعية تحسن كل من جودة الإشارة وقوة التنفيذ:
- إضافة المزيد من العملات تمتد إلى جنيه إسترليني أو دولار أسترالي أو يورو ياباني أو دولار كندي باستخدام نفس نقاط نهاية المؤشر. كل منها يضيف زوجًا جديدًا ومجموعة جديدة من فرص الاختلاف. سعر سعر العملة البريطانية و التضخم في الدولار الأسترالي السلسلة تتبع نفس عقد البيانات.
- إضافة بيانات تحديد الموقع COT تحديد المضاربين الكبار من تقرير CFTC COT هو مرشح معنوي مفيد. عندما يقول نظام الكلية طويلة الدولار الأمريكي ولكن المضارب الطويلات متطرفة بالفعل، فإن المخاطر / المكافأة من دخول جديد أقل. يقدم FXMacroData بيانات COT عبر نفس واجهة برمجة التطبيق.
- اختبار الخلفي ضد بيانات الإعلانات التاريخية لأن كل ملاحظة من FXMacroData تحمل
announcement_datetimeبدقة إلى الثانية، يمكنك إعادة بناء بالضبط ما كان السوق يعرفه في أي نقطة في الوقت المناسب وتحاكي إدخالات الاستراتيجية دون تحيز المراقب. - أوتوماتيكي مع الجدول تغليف
run_daily_strategy()في وظيفة cron أو وظيفة السحابة. إشارات الكلية النموذجية تحتاج فقط إلى تحديث بعد إصدارات البيانات الرئيسية، لذلك تحديثات يومية أو حتى أسبوعية كافية للمناصب متوسطة الأجل. - اتصل بـ API الوسيط إشارات النتائج وحجم اللوث غير متعلقة بالوسيط. الخريطة
directionوlotsإلى أوامر السوق في طبقة التنفيذ المفضلة لديك (OANDA v20، Interactive Brokers TWS، أو محاكاة تداول الورق).
ابدأ في البناء
جميع مؤشرات الماكرو المستخدمة في هذا الدليل متوفرة عبر FXMacroData API. الاشتراك للحصول على مفتاح مجاني والبدء في سحب البيانات الحقيقية في غضون دقائق.
احصل على مفتاح API الخاص بكملخص
الإشارات الكبيرة ليست زينة لـ algo إنها الحافة. أظهر هذا الدليل كيفية:
- احضر أسعار الفائدة السياسية والتضخم والعمالة وعائدات السندات من FXMacroData API بنمط ثابت
- حساب درجة نظام مركبة لكل عملة باستخدام تطبيع درجة Z ومزيج المؤشرات المرجحة
- إضافة مرشح اتجاه السعر من تاريخ سعر الفورية الفوركس لتحتاج إلى اتفاق ماكرو وفني قبل الدخول
- استخدم تقويم الإصدار لتجنب ضوضاء نوافذ البيانات ذات التأثير العالي مع جدولة إغلاق بسيطة
- حجم المراكز نسبياً إلى ثقة الإشارة وميزانية الحساب باستخدام نموذج المخاطر الثابتة الكسرية
- تجمع جميع المكونات في حلقة يومية متكررة واحدة
المصدر الكامل مضغوط بما فيه الكفاية للتكيف في جلسة واحدة. طبقة البيانات سلسلة الإعلانات المهيكلة بشكل ثابت وذات الطابع الزمني الدقيق في FXMacroData تقوم بالعمل الثقيل للحفاظ على كل إشارة مبنية على حقائق السوق القابلة للتحقق.