دیتای تاریخی قیمت دلار و طلا برای بکتست و تحلیل، دریافت کندل روزانه و ساعتی با API
دیتای تاریخی قیمت دلار و طلا با API: کندل OHLC روزانه و ساعتی، بازه و منطقهٔ زمانی، خروجی CSV و اکسل، بکتست ساده با پایتون و خطاهایی که تحلیل را خراب میکند.

- مسیر `GET /history/{symbol}?interval=1d&from=&to=` کندلهای باز، بیشترین، کمترین و بسته را برمیگرداند.
- زمان کندلها UTC است، برای تحلیل روزانه بازار ایران آن را به وقت تهران تبدیل کنید.
- در بکتست، تعطیلیها، روزهای کممنبع، اسپرد خرید و فروش و هزینه معامله را در نظر بگیرید.
تحلیلگر، پژوهشگر اقتصادی، معاملهگری که استراتژی خود را آزمایش میکند یا حسابداری که نرخ تسعیر روزهای گذشته را لازم دارد، همه به یک چیز نیاز دارند: دیتای تاریخی قیمت دلار و طلا که قابل اتکا و ماشینخوان باشد. در این آموزش دریافت، ذخیره و استفاده درست از این داده را یاد میگیرید.
GET https://api.ezrate.me/v1/history/usd?interval=1d&from=2026-01-01&to=2026-06-30 کندلهای روزانهٔ دلار را برمیگرداند. هر کندل t (زمان)، o، h، l و c دارد. با interval=1h کندل ساعتی بگیرید. عمق تاریخچهٔ قابل دریافت به پلن شما بستگی دارد.این آموزش بخشی از راهنمای کامل API قیمت ارز و طلا است. برای دیدن سریع تاریخچه بدون کد، صفحه آرشیو قیمت دلار، طلا و سکه را ببینید.
ساختار داده
| فیلد | معنی |
|---|---|
t | زمان شروع کندل به UTC (ISO 8601) |
o | قیمت در شروع بازه |
h | بیشترین قیمت در بازه |
l | کمترین قیمت در بازه |
c | قیمت در پایان بازه |
meta.interval، meta.market، meta.quote | بازه، بازار و واحد (IRT یا IRR) |
قیمت کندلها بر اساس نرخ فروش است. اگر به ریال نیاز دارید، quote=IRR بفرستید.
دریافت بازههای طولانی
برای بازههای طولانی با کندل ساعتی، درخواست را به تکههای ماهانه تقسیم کنید تا پاسخها کوچک بمانند و اگر یک درخواست خطا داد، فقط همان تکه را دوباره بگیرید:
import os, requests, pandas as pd
from datetime import date, timedelta
API, KEY = "https://api.ezrate.me/v1", os.environ["EZRATE_KEY"]
def history(symbol, start, end, interval="1d"):
out, cur = [], start
while cur <= end:
nxt = min(cur + timedelta(days=30), end)
r = requests.get(f"{API}/history/{symbol}",
params={"interval": interval, "from": cur.isoformat(), "to": nxt.isoformat()},
headers={"X-API-Key": KEY}, timeout=20)
r.raise_for_status()
out += r.json()["data"]
cur = nxt + timedelta(days=1)
df = pd.DataFrame(out).drop_duplicates("t")
df["t"] = pd.to_datetime(df["t"], utc=True).dt.tz_convert("Asia/Tehran")
return df.set_index("t").sort_index()
usd = history("usd", date(2026, 1, 1), date(2026, 9, 30))
usd.to_csv("usd_daily.csv")خط تبدیل منطقه زمانی را حذف نکنید. روز در بازار ایران با وقت تهران تعریف میشود و اگر با UTC کار کنید، معاملات ساعتهای اول صبح ممکن است در روز قبل حساب شوند.

یک بکتست ساده: تقاطع میانگین متحرک
هدف این مثال نشان دادن روش است، نه پیشنهاد یک استراتژی. فرض: وقتی میانگین ۱۰ روزه از میانگین ۳۰ روزه بالاتر رفت، دلار بخرید و وقتی پایین آمد، بفروشید:
df = usd.copy()
df["fast"] = df["c"].rolling(10).mean()
df["slow"] = df["c"].rolling(30).mean()
df["pos"] = (df["fast"] > df["slow"]).astype(int).shift(1) # تصمیم دیروز، اجرای امروز
df["ret"] = df["c"].pct_change()
SPREAD = 0.004 # هزینهٔ خرید و فروش (فرضی)
trades = df["pos"].diff().abs().fillna(0)
df["strategy"] = df["pos"] * df["ret"] - trades * SPREAD
print("بازده نگهداری:", round((1 + df["ret"]).prod() - 1, 4))
print("بازده استراتژی:", round((1 + df["strategy"].fillna(0)).prod() - 1, 4))دو جزئیات این کد مهماند: shift(1) تا تصمیم بر اساس اطلاعات روز قبل اجرا شود (بدون آن، نتیجه بهطرز غیرواقعی خوب میشود)، و SPREAD تا هزینه واقعی خرید و فروش لحاظ شود.
خطاهایی که نتیجهٔ تحلیل را خراب میکنند
| خطا | نتیجه | پیشگیری |
|---|---|---|
| نگاه به آینده (Look-ahead) | بازده غیرواقعی | همیشه با داده دیروز تصمیم بگیرید |
| نادیده گرفتن اسپرد | استراتژیهای پرمعامله سودده به نظر میرسند | هزینه خرید و فروش را کم کنید |
| UTC بهجای وقت تهران | جابهجایی مرز روزها | تبدیل منطقه زمانی |
| قاطی کردن ریال و تومان | جهش دهبرابری در داده | ثبت quote همراه داده |
| روزهای تعطیل و کممنبع | کندلهای تخت یا پرش بعد از تعطیلی | شناخت تقویم بازار، رجوع به ساعت کاری بازار ارز و طلا |
کاربردهای غیرمعاملاتی
- حسابداری: نرخ بسته هر روز برای تسعیر، رجوع به تسعیر ارز در حسابداری.
- گزارش مدیریتی: نمودار ماهانه هزینه واردات بر اساس دلار.
- پژوهش اقتصادی: همبستگی دلار، طلا و تتر در دورههای مختلف.
- محتوا: نمودار تغییرات برای گزارشهای رسانهای، با ذکر منبع.
نمونه یک تحلیل ساده با دیتای تاریخی
فرض کنید میخواهید بدانید قیمت دلار در ماههای اخیر چقدر نوسان داشته است. کندلهای روزانه را بگیرید، بازده لگاریتمی روزانه را حساب کنید و انحراف معیار آن را در ریشه تعداد روزهای معاملاتی سال ضرب کنید تا نوسان سالانه به دست آید. سپس همین کار را برای طلای ۱۸ عیار و سکه انجام دهید و سه عدد را کنار هم بگذارید. این مقایسه ساده به سرمایهگذار یا تحلیلگر نشان میدهد کدام دارایی در بازه مورد نظر پرریسکتر بوده است.
در گزارش نهایی حتما منبع داده، تاریخ دریافت، منطقه زمانی و نوع نرخ (سمت فروش، بازار تهران) را بنویسید تا نتیجه قابل تکرار و قابل دفاع باشد.


نظرات (۰)
نظرها پس از تأیید نمایش داده میشوند؛ برای ارسال، ورود به حساب لازم است.


