تبقى جداول البيانات الأداة الأكثر شيوعًا لتحليل الكلي. سواء كنت تفضل Excel أو Google Sheets ، فإن سحب بيانات البنك المركزي والمعيار الاقتصادي المباشرة مباشرة إلى خلية بدلاً من نسخ القيم يدويًا يحول الجدول الثابت إلى مساعد قرار تحديث ذاتي. يوضح لك هذا الدليل كيفية توصيل FXMacroData إلى كلا المنصتين: Power Query و VBA لـ Excel ، و Apps Script لـ Google Sheet. بحلول النهاية ، سيتم تحديث كل رقم كلي تهتم به تلقائيًا دون مغادرة جدول البياناتك.
ما الذي ستبنيه
- استفسار طاقة Excel استفسار يطلب أي مؤشر إلى جدول منظم بنقرة واحدة
- Excel VBA ماكرو يكتب القيم مباشرة في الخلايا المسماة، جاهزة للصيغ والرسوم البيانية
- برنامج Google Apps Script برنامج نصي يكتب الصفوف إلى علامة التبويب Sheets ويقوم بتجديد على محرك تشغيل مدفوع بالوقت
الشروط المسبقة
- مفتاح FXMacroData API التسجيل في / اشترك؛ المفاتيح الحرة تغطي العديد من نقاط نهاية المؤشر
- Excel 2016+ (لـ " Power Query ") أو Excel 365/Online Power Query مدمج في ويندوز/ماك ومتاح على الانترنت
- حساب جوجل أي حساب مع الوصول إلى Google Sheets و Apps Script (لا حاجة إلى برامج إضافية)
- معرفة أساسية مع صيغ إكسيل أو Google Sheets لا حاجة إلى خلفية برمجة لقسم Power Query
الجزء 1 EXCEL
الجزء 1 Excel
يقدم Excel طريقتين لبيانات API الحية: استفسار الطاقة (لا يوجد رمز، عظيم للمحللين) و VBA (محرك بالرمز، أفضل عندما تحتاج إلى كتابة القيم في خلايى محددة أو إطلاق المنطق من زر أو حدث).
الخطوة الأولىالخطوة 1 فهم شكل نقطة نهاية واجهة برمجة التطبيقات
كل مؤشر FXMacroData يتبع نفس نمط REST. يبدو طلب سعر الفائدة الأمريكي على هذا النحو:
GET https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2020-01-01
استجابة JSON هي كائن مسطح مع data صف:
{
"data": [
{ "date": "2025-03-19", "val": 4.25, "announcement_datetime": "2025-03-19T18:00:00Z" },
{ "date": "2025-01-29", "val": 4.25, "announcement_datetime": "2025-01-29T19:00:00Z" },
{ "date": "2024-12-18", "val": 4.25, "announcement_datetime": "2024-12-18T19:00:00Z" }
]
}
كل سجل يحمل date (سنة سنة-ميلاد-ميا) ، رقم val، و عند توفر مستوى UTC الثاني announcement_datetime. لأن كل نقطة نهاية مؤشر تتشارك هذا الشكل، وظيفة Power Query واحدة أو مساعد VBA واحد يمكن أن تخدم كل منهم. استكشاف الكتالوج كامل المؤشر في مستندات API.
الخطوة الثانية
الخطوة 2 Excel Power Query: استيراد عبر رابط الويب
"مستعرض الطاقة" مدمج من موقع الويب يمكن أن يستهلك أي نقطة نهاية REST JSON بدون رمز على الإطلاق.
- في Excel، انقر على البيانات → الحصول على البيانة من مصادر أخرى من الويب.
-
إلصق عنوان URL الخاص بك في مربع الحوار
YOUR_API_KEYمع مفتاحك الحقيقي:
https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2020-01-01 - انقر حسناً. يفتح Power Query Navigator مع إظهار بنية JSON
- انقر على البيانات سجل في الملاحة لتوسيعه، ثم انقر على تحويل إلى الجدول ! حسناً.
-
استخدم توسيع العمود زر (رمز الأسهم المزدوجة) على
Column1الرأس لفك سجلات التجميع في أعمدة مسطحة:date- لاval- لاannouncement_datetime. - انقر إغلاق و تحميل لكى تكتب الجدول فى ورقة جديدة
نصيحة: تحديث تلقائيًا
انقر بزر الماوس الأيمن على الجدول المحمول الجدول → خصائص البيانات الخارجية ! أسمح إعادة تحديث البيانات عند فتح الملف ووضع احديث كل N دقيقة فترة. ستبقى جدول الماكرو الخاص بك حاليا في كل مرة تفتح فيها دفتر العمل.
الخطوة الثالثة
الخطوة 3 Excel Power Query: تعيين المعايير مع وظيفة قابلة لإعادة الاستخدام
بمجرد أن يكون لديك استفسار مؤشر واحد يعمل، وتعزيزها إلى وظيفة M قابلة لإعادة الاستخدام حتى تتمكن من سحب أي عملة / مزيج مؤشر دون تكرار خطوات رابط الويب.
- في محرر الاستعلامات، انقر بزر الماوس الأيمن على استفسارك في اللوحة اليسرى → إنشاء وظيفة. .
- أسميه
FetchMacroData. . - استبدال جسمها بشفرة M أدناه:
// FetchMacroData — reusable Power Query function
// Parameters: currency (e.g. "usd"), indicator (e.g. "policy_rate"), apiKey, startDate
(currency as text, indicator as text, apiKey as text, startDate as text) =>
let
url = "https://fxmacrodata.com/api/v1/announcements/"
& currency & "/" & indicator
& "?api_key=" & apiKey
& "&start=" & startDate,
raw = Json.Document(Web.Contents(url)),
records = raw[data],
tbl = Table.FromList(records, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(tbl, "Column1",
{"date", "val", "announcement_datetime"},
{"Date", "Value", "AnnouncementDatetime"}),
typed = Table.TransformColumnTypes(expand, {
{"Date", type date},
{"Value", type number}
})
in
typed
- أغلق محرر الوظائف و الآن اصنع وظيفة جديدة استفسار فارغ لكل مؤشر تحتاج إليه:
= FetchMacroData("usd", "inflation", "YOUR_API_KEY", "2022-01-01")
= FetchMacroData("eur", "policy_rate", "YOUR_API_KEY", "2022-01-01")
كل استفسار يتم تحميله في الجدول الخاص به. تعمل الدالة على دعوة HTTP وتحليل JSON وإعادة تسمية الأعمدة وتحويل النوع. لإضافة مؤشر جديد ، أضف استفساراً فارغاً واحداً لا حاجة إلى معالج رابط. ابحث عن خادعات المؤشر على مستندات API لأي زوج عملات
الخطوة الرابعة
الخطوة 4 Excel VBA: كتابة القيم مباشرة في الخلايا
VBA مناسبة بشكل أفضل عندما تحتاج إلى وضع القيم في خلايى محددة تحمل أسماء، أو ربطها بالصيغ الموجودة، أو تشغيل التحديث من زر أو حدث مفتوح في المجلد.
افتح محرر VBA (Alt+F11), إدخال وحدة جديدة (إدراج → وحدة) واصطفأ ما يلي:
Option Explicit
' ─────────────────────────────────────────────────────────────────
' FetchLatestIndicator
' Returns the most recent val for a given currency/indicator.
' Requires a reference to "Microsoft XML, v6.0" (VBA Editor →
' Tools → References → tick "Microsoft XML, v6.0").
' ─────────────────────────────────────────────────────────────────
Function FetchLatestIndicator(currency As String, indicator As String, _
apiKey As String) As Variant
Dim http As New MSXML2.XMLHTTP60
Dim url As String
Dim json As String
Dim dataArr As Variant
Dim parsed As Object
url = "https://fxmacrodata.com/api/v1/announcements/" & _
LCase(currency) & "/" & LCase(indicator) & _
"?api_key=" & apiKey & "&limit=1"
http.Open "GET", url, False
http.setRequestHeader "Accept", "application/json"
http.Send
If http.Status <> 200 Then
FetchLatestIndicator = CVErr(xlErrValue)
Exit Function
End If
' ── Minimal JSON parser (no external library needed) ──────────
' Locate the first "val": number pattern after "data":[{
Dim pos As Long
Dim valStr As String
json = http.responseText
pos = InStr(json, """val"":")
If pos = 0 Then
FetchLatestIndicator = CVErr(xlErrNA)
Exit Function
End If
pos = pos + Len("""val"":")
valStr = Mid(json, pos, 20)
' Trim to the actual number (stop at comma, space, or brace)
valStr = Split(Trim(valStr), ",")(0)
valStr = Split(valStr, "}")(0)
valStr = Trim(valStr)
FetchLatestIndicator = CDbl(valStr)
End Function
' ─────────────────────────────────────────────────────────────────
' RefreshMacroDashboard
' Writes the latest value of several indicators into named cells.
' Define Named Ranges (Formulas → Name Manager) matching the keys
' used in the pairs array below.
' ─────────────────────────────────────────────────────────────────
Sub RefreshMacroDashboard()
Dim apiKey As String
apiKey = "YOUR_API_KEY" ' ← replace with your key
Dim pairs(5, 1) As String
pairs(0, 0) = "usd" : pairs(0, 1) = "policy_rate"
pairs(1, 0) = "eur" : pairs(1, 1) = "policy_rate"
pairs(2, 0) = "gbp" : pairs(2, 1) = "policy_rate"
pairs(3, 0) = "usd" : pairs(3, 1) = "inflation"
pairs(4, 0) = "usd" : pairs(4, 1) = "unemployment"
pairs(5, 0) = "usd" : pairs(5, 1) = "gdp"
Dim i As Integer
Dim val As Variant
Dim nm As String
For i = 0 To 5
val = FetchLatestIndicator(pairs(i, 0), pairs(i, 1), apiKey)
nm = UCase(pairs(i, 0)) & "_" & pairs(i, 1)
On Error Resume Next
ThisWorkbook.Names(nm).RefersToRange.Value = val
On Error GoTo 0
Next i
MsgBox "Dashboard updated — " & Now(), vbInformation, "FXMacroData"
End Sub
كيفية توصيل هذا إلى زر
في ورقة العمل، اذهب إلى إدراج → أشكال, رسم مستطيل مستدير, انقر فوقه بجهاز النقر اليمنى
تعيين ماكرو → اختار RefreshMacroDashboard. نقرة واحدة تقوم بتجديد كل مؤشر في لوحة القيادة الخاصة بك. يمكنك أيضا تشغيله تلقائيًا على الملف مفتوحًا عن طريق الاتصال به من
Workbook_Open() في ThisWorkbook وحدة رمزية
الجزء الثاني أوراق جوجل
الجزء الثاني صفحات جوجل
Google Apps Script هو وقت تشغيل JavaScript مدمج مباشرة في Google Workspace. إنه يعمل على جانب الخادم على بنية تحتية Google ، لذلك لا يوجد شيء لتثبيته. يمكنك استدعاء FXMacroData عبر
UrlFetchApp وكتب النتائج إلى جدول البيانات مع SpreadsheetApp. أجهزة إطلاق مدفوعة بالوقت تسمح لك بجدولة تحديثات تلقائية
الخطوة 5 افتح محرر البرامج
- افتح sheets.google.com وخلق جدول بيانات جديد فارغ
- انقر الإضافات → البرامج النصية. .
- أعد تسمية المشروع إلى محمول FXMacroData (المنطقة العلوية اليسرى)
- حذف الافتراضية
myFunction()مكان الحجز
تخزين مفتاح API الخاص بك بأمان
إذهب إلى إعدادات المشروع → خصائص النص → إضافة الممتلكاتأضف خاصية اسمها
FXMACRODATA_API_KEY وملصق مفتاحك كقيمة. الكود أدناه يقرأه في وقت التشغيل عن طريق PropertiesService.getScriptProperties() مفتاحك لا يظهر أبداً في ملف النص
الخطوة السادسة
الخطوة 6 اكتب مساعد البحث وكاتب الورق
اضغط على الرمز التالي Code.gs.المهام الثلاث تتعامل مع الاسترداد، التطبيع، والكتابة:
// ── Config ──────────────────────────────────────────────────────
const BASE_URL = 'https://fxmacrodata.com/api/v1';
// List of {currency, indicator} pairs to load.
// Add or remove rows to customise your dashboard.
const INDICATORS = [
{ currency: 'usd', indicator: 'policy_rate' },
{ currency: 'usd', indicator: 'inflation' },
{ currency: 'usd', indicator: 'unemployment' },
{ currency: 'eur', indicator: 'policy_rate' },
{ currency: 'gbp', indicator: 'policy_rate' },
{ currency: 'aud', indicator: 'policy_rate' },
];
// ── Fetch helper with retry ─────────────────────────────────────
/**
* Fetches the latest N records for a currency/indicator pair.
* Retries up to maxRetries times with exponential back-off.
*
* @param {string} currency - e.g. 'usd'
* @param {string} indicator - e.g. 'policy_rate'
* @param {string} apiKey
* @param {number} limit - number of records to return (default 12)
* @param {number} maxRetries
* @returns {Array} array of {date, val, announcement_datetime} objects
*/
function fetchIndicator(currency, indicator, apiKey, limit = 12, maxRetries = 3) {
const url = `${BASE_URL}/announcements/${currency}/${indicator}`
+ `?api_key=${apiKey}&limit=${limit}`;
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const resp = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
if (resp.getResponseCode() === 200) {
return JSON.parse(resp.getContentText()).data || [];
}
} catch (e) {
if (attempt < maxRetries - 1) {
Utilities.sleep(Math.pow(2, attempt) * 1000); // 1 s, 2 s, 4 s
}
}
}
return [];
}
// ── Sheet writer ────────────────────────────────────────────────
/**
* Writes all indicator rows to a sheet named 'MacroData'.
* Creates the sheet if it does not exist; clears it on each run
* so stale rows are removed.
*/
function refreshMacroData() {
const apiKey = PropertiesService.getScriptProperties()
.getProperty('FXMACRODATA_API_KEY');
if (!apiKey) {
throw new Error('FXMACRODATA_API_KEY script property is not set.');
}
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('MacroData');
if (!sheet) {
sheet = ss.insertSheet('MacroData');
}
sheet.clearContents();
// Header row
const headers = ['Currency', 'Indicator', 'Date', 'Value', 'AnnouncementDatetime'];
sheet.appendRow(headers);
// Style header
const headerRange = sheet.getRange(1, 1, 1, headers.length);
headerRange.setBackground('#1e3a5f');
headerRange.setFontColor('#ffffff');
headerRange.setFontWeight('bold');
// Data rows
INDICATORS.forEach(({ currency, indicator }) => {
const records = fetchIndicator(currency, indicator, apiKey);
records.forEach(r => {
sheet.appendRow([
currency.toUpperCase(),
indicator,
r.date,
r.val,
r.announcement_datetime || ''
]);
});
});
// Auto-resize columns for readability
sheet.autoResizeColumns(1, headers.length);
}
الخطوة السابعة
الخطوة 7 تشغيل وتحقق
- انقر على حفظ رمز (قرص موصل) في شريط أدوات المحرر.
- اختر
refreshMacroDataفي الوظيفة المنسدلة بجانب زر التشغيل (▶). - انقر إهرب. يطلب التشغيل الأول الإذن بالوصول إلى جدول البيانات وإجراء طلبات HTTP خارجية انقر مراجعة الأذونات → السماح. .
- عودوا إلى جدول البيانات، علامة تبويب جديدة تسمى البيانات الكبيرة يجب أن تحتوي الآن على صفوف مثل:
| العملة | مؤشر | تاريخ | القيمة | الإعلان التاريخ والوقت |
|---|---|---|---|---|
| الدولار الأمريكي | سعر السياسة | 2025-03-19 | 4.25 | 2025-03-19T18:00:00Z |
| الدولار الأمريكي | التضخم | 12-03-2025 | 2.8 | 2025-03-12T12:30:00Z |
| الدولار الأمريكي | البطالة | 2025-03-07 | 4.1 | 2025-03-07T13:30:00Z |
الخطوة الثامنة
الخطوة 8 جدولة تحديث تلقائي مع محرك
إطلاق مدفوع بالزمن refreshMacroData على جدول بدون أي عمل يدوي
- في محرر البرامج النصية، انقر على أسباب رمز (الساعة) في الشريط الجانبي الأيسر.
- انقر + إضافة محرك (أسفل اليمين)
- - تمّ تعيينها اختر أي وظيفة تشغيل !
refreshMacroData. . - - تمّ تعيينها حدد مصدر الحدث ! مدفوعة بالوقت. .
- - تمّ تعيينها حدد نوع التشغيل القائم على الوقت ! عداد التوقيت النهاري. .
- - تمّ تعيينها حدد وقت اليوم → على سبيل المثال الساعة 7 صباحاً 8 صباحا (قبل المسابقة الأوروبية المفتوحة).
- انقر حفظ. يظهر الزناد في قائمة الزناد.
نصيحة: إطلاق الساعة لمراقبة يوم الإفراج
في الأيام التي يكون فيها إصدارات ذات تأثير كبير مؤشر أسعار المستهلك الأمريكي، NFP، أو قرار البنك المركزي قم بتبديل الزناد إلى
عداد التوقيت الساعي → كل ساعة لذا فإن الورقة تلتقط القراءة الجديدة بمجرد تحديث واجهة برمجة التطبيقات (عادةً خلال ثوانٍ من الإصدار الرسمي).
التضخم و
الرواتب غير الزراعية
نقاط النهاية تحمل المستوى الثاني announcement_datetime قيم حتى تتمكن من تحديد متى تم نشر كل قراءة.
الخطوة 9
الخطوة 9 سحب أحدث قيمة في أي خلية مع وظيفة مخصصة
أضف الدالة أدناه إلى Code.gs إذا كنت تريد الإشارة إلى قيم الماكرو مباشرة في صيغ الخلية مثل GOOGLEFINANCE() ولكن بالنسبة لبيانات البنك المركزي:
/**
* Custom Sheets function: returns the latest value for a currency/indicator.
*
* Usage in a cell: =FXMD("usd","policy_rate")
*
* @param {string} currency e.g. "usd"
* @param {string} indicator e.g. "policy_rate"
* @customfunction
*/
function FXMD(currency, indicator) {
const apiKey = PropertiesService.getScriptProperties()
.getProperty('FXMACRODATA_API_KEY');
const records = fetchIndicator(currency, indicator, apiKey, 1);
if (!records || records.length === 0) return null;
return records[0].val;
}
بعد حفظ، اكتب =FXMD("usd","policy_rate") في أي خلية. أوراق تدعو الدالة، وتحصل من واجهة برمجة التطبيقات، وتعيد القيمة الحالية. قم بدمجها مع علامات العملات في الخلايا المجاورة لبناء لوحة ملخص صغيرة.
المؤشرات المدعومة
أي مؤشر من كتالوج FXMacroData يعمل policy_rate- لا
inflation- لا unemployment- لا gdp- لا pmi- لا
retail_salesو الكثير من الأشياء
مستندات API للقائمة الكاملة لكل عملة، أو استخدم
لوحة المعلومات لاستكشاف المؤشرات بصريا.
الموجز
ملخص
لقد قمت بربط FXMacroData إلى كل من Excel و Google Sheets:
- استفسار طاقة Excel وظيفة M قابلة للتعديل التي تحمل أي مؤشر في جدول منظم وتحديث على الملف مفتوح.
- Excel VBA ماكرو يكتب أحدث قيمة لكل مؤشر في خلايى مسمّية، يمكن تعيينها على زر.
- برنامج Google Apps Script a
refreshMacroData()وظيفة التي تبني علامة تبويب كاملة MacroData، بالإضافة إلى=FXMD()صيغة مخصصة للبحث عن كل خلية، كلاهما يتم تحديثه تلقائيًا على محرك مدفوع بالوقت.
من هنا، فكر في طبقات في المزيد من المؤشرات على سبيل المثال، إضافة
التضخم الأساسي
إلى جانب التضخم الرئيسي، أو سحب
مؤشر مؤشر الأسهم وذلك من أجل مقارنة زخم النمو بين المناطق. INDICATORS المصفوفة أو الدعوة M الوظيفة.