התקנת דוגם ציטוטים

מדובר ביישום בצד השרת שמטרתו לדגום אל מסד הנתונים של הייפר ציטוטי מחירים מלאים ממסחר בורסאי, בין בנקאי וכו'. היישום פועל 24 שעות 7 ימים בשבוע ללא הפסקה.
היישום תומך במספר גרסאות של פרוטוקול FIX המקובל בתעשיה למטרה זו וגם ב-API של MT4 וגם MT5. כתוב באופן יעיל ואינו מכביד על שרתי המסחר ועל מסד הנתונים.

  • יכולת דגימה גבוהה: עד 1200 ציטוטים בשנייה. ניתן לחבר מספר יישומים בו זמנית למסד נתונים אחד עבור מערכות הדוגמות נכסים רבים.
  • שרידות: היישום משתמש ב-RAM של השרת לאגירה בזמן אמת ובתתי תהליכים לאריזה ושמירה מרוכזת במסד הנתונים של הייפר.
    היישום תומך במצב ניתוק ממסד הנתונים הראשי עד לאגירה של 2GB של ציטוטים (אח"כ זה תלוי במשאבי השרת המריץ).
  • תומך במשימות נוספות: למשל צבירת קפיצות מחיר (מעל אחוז מוגדר מראש) בטבלת אירועים. השוואת מחירים לפידים אחרים ועוד.
  • מבצע אריזה של קבצי הנתונים בפורמט בינארי, בכל 6 שעות שעון UTC, אל מסד הנתונים של הייפר.

שלב 1: התקנת יישום הממשק בשרת.

עליך לבחור היכן להתקין את יישום הממשק. בהתקנות פרטיות יתכן שתרצה להתקין את היישום על אותה המכונה שבה מותקן גם שרת ה-Database (היישום sye server).
בד"כ מקובל להתקין את היישום על שרת חישובים, בנפרד ממסד הנתונים ועם רוחב פס יציב ואיכותי אל מול מקור הציטוטים (שיקול גאוגרפי וגם של מערכות הרשת בין מקור הציטוט לדוגם).
תלוי בדרישות הפרויקט... היכן שנדרש דיוק (אלפיות שנייה) עדיף כמה שיותר קרוב אל המקור ועם כמה שפחות נתבים ומערכות אבטחה בדרך.

על מנת להתקין את יישום הממשק, בצע את הפעולות הבאות:

  1. פתח את כלי ההתקנה של הייפר (SYE Support & Setup). בחר בקטגוריה Server Side Applications.
  2. מתוך רשימת האפליקציות בחר ב Feed Ticks Sampler ולחץ על המשך.
  3. אשר את תנאי השימוש ולחץ על המשך.
  4. בחר בנתיב ההתקנה ולחץ על DOWNLOAD & INSTALL .
  5. עליך להעתיק את קובץ ה- lic של מסד הנתונים בתוך התיקייה שבה הותקן הממשק. חובה לשים רק קובץ אחד שכן היישום יטען את הראשון שימצא בתיקייה של עצמו.
  6. וודא מראש שכל ההגדרות דרך יישום הייפר מוכנות, בהתאם לשלב 2 בעמוד הזה.
  7. כעת הפעל את היישום ועבור לשלב 3, בכדי ללמוד כיצד להגדיר נכון את קובץ ה- INI המקומי.

בתיקיית Feed Ticks Sampler שנוצרה, יופיעו הקבצים הבאים:

שם קובץ וסיומת תיאור
Hyper_Price_Feed_RT_Sampler.exe קובץ היישום של הדוגם, מכיל את כל הקוד בקובץ אחד.
Hyper_Price_Feed_RT_Sampler.ini קובץ הגדרות מקומי, נערך מתוך היישום, ייווצר רק לאחר ההפעלה הראשונה של היישום.
Appl_Self_Upgrade.exe יישום עדכון אוטומטי ואתחול עצמי.
mtmanapi.dll
mtmanapi64.dll
קובץ ספריה של MetaTrader4 Manager 32/64 bit
MT5APIManager.dll
MT5APIManager64.dll
קובץ ספריה של MetaTrader5 API 32/64 bit

הסבר קצר למנהלי המערכת:

כל היישומים מתוצרת SYE למערכות ההפעלה Windows בנויים מקובץ exe עיקרי שמכיל בתוכו קוד למעבדי אינטל ו-AMD.
איננו נוהגים לפצל קוד לקבציי DLL למעט ספריות קוד מספק צד שלישי (במקרה זה אין לנו ברירה אחרת).
את כל היישומים ניתן להעתיק בין מחשב למחשב - אין באמת משמעות לתוכנת ההתקנה.
אין קבצים חבויים או קבצים המותקנים בתיקיות של מערכת ההפעלה.
למעשה באפשרותך להעתיק את כל תיקיית האוטומציות שלך לשרת גיבוי ולהפעילן משם במידת הצורך.
דאג להרשאות כתיבה בתיקייה שבה מותקן היישום ! בין היתר עבור מנגנון העדכון האוטומטי.
בנוסף, אפשר הרשאות לכתיבת קבצים זמניים (cache) המתרחשת בתיקיית ה- App Data/Local של השרת.

שלב 2: הגדרות שנעשות ביישום הייפר, לפני הפעלת דוגם הציטוטים.

בד"כ הדגימה נעשית מפלטפורמת מסחר שמחוברת להייפר בכל מקרה ולכן אנו נשענים על מרבית ההגדרות מהטבלאות של הייפר ולא מקובץ ה-INI המקומי.
כך שמנהל המערכת יוכל להגדיר כל דבר במקום אחד.
כפי שיוסבר בהמשך, היישום תלוי גם ברשימת הסימבולים בהייפר ובהגדרות מקדם המחיר (Tick Price Coefficient) - בהתאם לממשק הדגימה ולהגדרות ב-INI.

בכדי להתחבר לשרת MT4 או MT5 יש לוודא מראש כי הפלטפורמה מוגדרת בטבלה hyp_Trading Systems List, ממנה היישום יקרא את כתובות השרתים (מקור וגיבוי).
מספר חשבון manager וסיסמה נלקחים מהשדות
MT4 Login & MT4 Password
בקובץ ה-INI.

התקנת דגימה מפרוטוקול FIX

בגלל מבנה פרוטוקול FIX, בו הלקוח צריך להירשם לקבלת ציטוטים, המודול נסמך על טבלת המכשירים של הייפר.
בראשית האתחול המודול מבצע שאילתה על המכשירים הסחירים (לפי השדה 'Trading Status') וגם שמשויכים לפלטפורמה המצוטטת (ערך השדה Data Source צריך להיכלל ברשימת הפלטפורמות בשדה 'Exist on TP' בטבלת המכשירים).
אם רשימת המכשירים ריקה או שלא ניתן לטעון פרופיל הגדרות לפי השדה 'Feed by Fix Protocol WS' בקובץ ה-INI... המודול יוצא ונסגר על שגיאה (מפורטת ב-LOG המקומי).

להלן אופן ההגדרה של פרוטוקול FIX ברשומת ה-Web Services של הייפר:
שם השדה תיאור
Hyper Service ID כינוי המערכת הוא טקסט חופשי להגדרתך. ובלבד שיהיה מועתק לשדה 'Feed by Fix Protocol WS' בקובץ ה-INI.
URL כתובת IP או DNS המוביל אל שרת הציטוטים.
Terminal / ID TCP Port למעשה זהו חלק מכתובת היעד של שרת הציטוטים. מטעמי נוחות החלטנו להפריד את מספר הפורט מהכתובת עצמה.
אם רושמים את המילה TLS בנוסף, אזי יפתח חיבור מאובטח. אחרת יפתח socket רגיל.
ערך לדוגמה:
4019 TLS
יפתח חיבור מאובטח (זיהוי אוטומטי בין TLS 1.3 ועד לתקן SSL3 הישן) בפורט 4019.
Username שם משתמש
Password סיסמה לחשבון
Param1 FIX SenderCompID מחרוזת שהוגדרה בשרת הציטוטים, בד"כ מכילה בתוכה את ה- Username.
Param2 FIX TargetCompID מחרוזת שמגדירה לשרת המקבל להיכן מיועדות הבקשות שלנו. מעין "שם שרת פנימי" לניתוב.
Param3 FIX SubTargetCompID מחרוזת זו אינה חובה. במערכות בהן היא נדרשת, היא משמשת כשדה המשך לשדה הקודם, למטרת הניתוב.
Param4 שדה מסוג טקסט המשמש כדגל בוליאני "לא ידידותי בכוונה". המחרוזת 'Hyper Feed' תפעיל את המתג וכל ערך אחר יחשב ככלום.
אם המתג דולק, אזי הסימבולים המיובאים יעדכנו את המחירים גם בטבלאות:
hyp_Trading System Symbols
hyp_Trading System Feed History

ערך שנקבע בקוד המערכת הוא Keep-alive בכל 90 שניות.
קיימים המון מימושים לפרוטוקול FIX, המודול מזהה את מערכת היעד לפי שלושת הפרמטרים האחרונים בטבלה לעיל...
להלן חלק ממחרוזת ההרשמה לדוגמה:
262=Feed;263=1;146=Count;55=EUR/USD;55=GBP/USD;

Gold-i Price Server

היישום של gold-i שומר קובץ טקסט בדיסק. דוגם הציטוטים שלנו קורא אותו מידי שעה ומשלים בעזרתו את טבלת הציטוטים בהייפר.
להלן אופן ההגדרה של היישום ברשומת ה-Web Services של הייפר:
שם השדה תיאור
Hyper Service ID
"Gold-i-Plugin_R1"
יש לשים את המחרוזת המדוייקת כאשר השני תווים בסוף הם בהתאם ל- Data Source של השרת מסחר.
Folder כאן עליך למלא את הנתיב המקומי שבו הקבצים מאוחסנים. לדוגמה:
c:\Program Files (x86)\Gold-i Ltd\Gold-i Price Server-Real1\logs\
Param1 = Last Sync Date היום האחרון שסונכרן - גם אם באופן חלקי. מסכת השדה YYYY-MM-DD
Param6 = Last Sync Position בסנכרון רגיל, בכדי לחסוך משאבים השדה הזה מאחסן את מיקום השורה האחרונה אשר נקראה מהקובץ.
זהו ערך אוטומטי ואין להתערב בו למעט מצב שבו רוצים לשחזר קריאה ואז לאחר קביעת התאריך בשדה הקודם יש לאפס את השדה הזה.
אין להזין ידנית ערך שאינו אפס, זה עלול לפגוע בקריאה.
Sync Delay in Minute אם צריך לקרוא את הנתונים בעיכוב, למשל לסנכרן עד לפני 5 דקות מעכשיו. כרגע המודול עצמו קורא בעיכוב של כמה דקות באופן ייזום.

שלב 3: הגדרות מקומיות (קובץ INI)

עם ההפעלה הראשונה ובכל פעם ששדות חיוניים ריקים בקובץ ה-INI... יפתח דיאלוג עם רשימת השדות הבאה:
שם השדה תיאור
DATA SOURCE סימול מקור המידע (הפלטפורמה) בשני תווים. בד"כ בהייפר תמצא הגדרת פלטפורמה בטבלה hyp_Trading Systems List בעלת סימול זהה.
רק במקרה של יבוא מחירים בפרוטוקול FIX ללא קשר ל-TP כלשהו, ניתן להמציא קוד (חד ערכי) ולוותר על הגדרות בטבלה הנ"ל.
שם המשתמש של היישום ברשת הייפר יהיה Feed_Sampler_DS כאשר DS מבטא את שני התווים מהשדה הזה.
Hyper Database Custom IP כתובת IP לגישה ישירה למסד הנתונים של הייפר. שדה חריג שמתאים להתקנות סגורות או לסביבת פיתוח.
Select Connection Type איזה מודול יופעל לדגימה ? אפשר להתקין את היישום מספר פעמים במקביל על אותו מסד נתונים ולהגדיר מודולים שונים.
בכדי להבין את קובץ ה-INI מחוץ ליישום, הערך המספרי מצויין בסוגריים לאחר שם האפשרות.
  • (1)
    MT4 Network Msg
    : דגימת ציטוטים דרך מערכת האירועים. תמיד יהיו חסרים 5 עד 15 אחוז מסך הציטוטים - תלוי בעומס על השרת.
  • (2)
    MT4 API Ticks Report
    : דגימת ציטוטים דרך API ייעודי. תמיד ישוחזרו כל הציטוטים ועל פי סדרם.
  • (3)
    Fix Protocol
    : ממשק פרוטוקול יעודי למערכות מסחר.
  • (4)
    Gold-i Plugin (local files)
    : ממשק למוצר של Gold-I Price Server המתחבר לפלטפורמות MT4/MT5.
  • (5)
    MT5 API
    : דגימת ציטוטים דרך API ייעודי. תמיד ישוחזרו כל הציטוטים ועל פי סדרם.
Feed by Fix Protocol WS שם הגדרת web service בהייפר עבור הטמעת פרוטוקול FIX (מכל הגרסאות). ראה כותרת נפרדת לנושא, שלב 2 השדה Hyper Service ID.
MT4 Login
MT4 Password
עבור התממשקות ל-MT4 וגם MT5 יש להגדיר את צמד השדות הללו וכמובן שחייבת להיות רשומה בטבלה hyp_Trading Systems List, משם נלקחת כתובת ה-IP להתחברות.
Get Tick Price Coefficient From Hyper ברירת המחדל של היישום הזה היא לגבות את כל הפיד של השרת. מבלי לסנן דבר ולפי הגדרות השרת.
אולם המציאות שונה מהתיאוריה, אצל לקוח אחד התגלה מצב שבו יבוא ההגדרות שלנו אינו פועל על פי הנוסחה ונאלצנו להגדיר את הפרמטרים ידנית.
לכן גם ביישום MT4 Integration אין עדכון של השדה ברשומות סימבולים קיימות. רק בעת הוספת סימבול חדש מתבצע החישוב מול שרת המסחר.
Save Symbols from Hyper List האם לשמור פידים רק עבור סימבולים הקיימים בטבלה של הייפר, או לשמור כל סימבול פעיל בפלטפורמה ?
אם הערך NO, אזי רשימת הסימבולים תיקבע על פי קבוצות ההרשאה אליהן יש ל- manager account גישה.
Zip Pack Offset in Minutes כאשר ישנם מספר ממשקי דגימה באותו מסד נתונים, יש לפצל את זמני האריזה שלהם בכדי להקל את העומס על הדיסק SSD.
השדה הזה מגדיר הפרש בדקות. התקנה נכונה תהיה ערך אפס לפלטפורמה הראשונה ואז 2 דקות תוספת לכל פלטפורמה.
לדוגמא: בהתקנה של 3 שרתי מסחר מול הייפר אחת, השרת האחרון יתחיל ב-4 דקות איחור לעומת הראשון.

לאחר הפעלת היישום, עיין בקובץ Hyper_Price_Feed_RT_Sampler_log.txt בכדי לוודא שהכל פועל כשורה. להלן דוגמאות לתוכן הנרשם.

להלן דוגמה לקובץ ה-log המקומי בתהליך התחברות מוצלח לשרת MetaTrader:

Login_To_MT4_Manager OK
Use Different Tick Price Coefficient for USOIL - MT4: 100; Hyper: 1   דוגמה להגדרות בהייפר המתקנות את יחס ההמרה הנקלט מהפלטפורמה
MT4_Refresh_Symbols OK
MT4_Groups_Request OK   אם היישום מוגדר כך שיקלוט את כל הסימבולים הזמינים - שורה זו תופיע
Final Symbols list has 150 records.   הודעה על כמות הסימבולים המצוטטים. ערך שגוי אמור להתריע בפני מנהל המערכת
Seem that setup was successful. next "Download_Feed_From_API" on 2021-04-12 18:00:00

שלב 4: תהליך אריזה בכל 6 שעות

דגימת הפיד מתבצעת אל תוך הטבלה hyp_TPM Feed Storage Buffer, מנה חדשה נכתבת מידי 15 או 30 שניות.
בכל 6 שעות בשעון UTC (בשעות 06:00, 12:00, 18:00 ואז בחצות), מתבצעת אריזה של "רבע יום" בפורמט הטבלאי של הייפר, בקובץ ZIP המאוחסן במסד הנתונים של הייפר בתיקייה (DB object) בעלת שם זהה לטבלה.
תהליך האריזה מופעל בעיכוב של 12 שעות. כלומר ה-"רבע יום הראשון" נארז בשעה 18:00 UTC ולמעשה יוצא ממסד הנתונים אל אחסון ZIP.
בכדי לבחון את תקינות הנתונים בשעות המסחר, עליך לוודא כי הטבלה מלאה בהתאם לכללים שהוסברו לעיל.
לדוגמה: בחינה של הטבלה ביום שני בשעה 20:00 UTC צריכה להכיל דגימות רצופות משעה 06:00 UTC ועד לרגע הדגימה (עד דקה אחורה בגלל שיטת ההזרמה אל הייפר).

ליישום אין ממשק ויזואלי

המעקב והשליטה על האריזה נעשה דרך הטבלה hyp_TPM Live Feed Sampler Settings - באמצעות ממשק DB של הייפר.
בעזרת הטבלה ניתן להזיז את היישום לארוז את המנה הבאה או לחזור למנה היסטורית במידה והנתונים עדיין בטבלת ה- Buffer.
בכדי לעצור את מודול האריזה - למשל כאשר מתקנים את הנתונים או מסנכרנים רטרו מחדש... עדיף למחוק את הרשומה לפני שמעלים את היישום !

להלן הסבר אודות השדות בטבלה:
שם השדה תיאור והערות
Data Source סימול מקור הנתונים (הפלטפורמה המצוטטת)
Archive From Date המנה הבאה תהיה מתאריך
From Quarter המנה הבאה (לפי התאריך מהשדה הקודם)

בהתקנה חדשה: לאחר 24 שעות של עבודה תקינה, עליך להגדיר ידנית את התאריך ומספר המנה הבאה לאריזה. מטעמי ביצועים היישום אינו מנסה לזהות אוטומטית ממתי אפשר לדגום אלא מסתמך על ההגדרות בטבלה הזו.
לדוגמה: אם יש לך דגימות החל מתאריך ה-2.2 בשעה 04:00 UTC ועברו לפחות 18 שעות... עליך להגדיר רשומה עם התאריך 2.2 והחל ממנה 1.
אין צורך לאתחל את היישום, הוא כבר יקרא את ההגדרה לבד ויתחיל באריזה. הטיימר הפנימי מכוון על כל 5 דקות.

פתרון בעיות

בכוונת תחילה לא ניתן לאתחל את היישום או לסגור אותו בשליטה מרחוק בפקודות המקובלות בהייפר. במקום זאת יש להוסיף את האות F בתחילת כל פקודה.
כך שהפקודה לסגירה תהיה 'FTerminate' והפקודה לאתחול תהיה 'FSelf Restart'.
היישום מייצר קובץ LOG המתעד בתוכו בעיות ואת תהליכי האריזה של "חבילות ציטוטים". Watchdog מופעל בכל 3 שניות ומאתחל את היישום במקרה של תקלה או ניתוק מהמקור !

להלן דוגמה ללוג תקין:
Starting FIX protocol Tick Storage for TS ["TFIX_Proto_Ticks_Sampler"]
First Ticks Storage data arrived, for TS ["TFIX_Proto_Ticks_Sampler"]   הודעת אישור על תחילת קליטת ציטוטים
====== Pack_Feed_Package "TS" 02/01/2018 Part 1 ======   הודעה על התחלת אריזה של רבע יום
Query return 324418 for Feed_TS_2018_01_02_Q1   הודעה על כמות הציטוטים שנארזת כעת. ברגע שעלו 20 רשומות ומעלה... זה נחשב לשאילתה תקינה
====== Pack_Feed_Package "TS" 02/01/2018 Part 2 ======
Query return 1807775 for Feed_TS_2018_01_02_Q2

* כאשר משחקים עם הערכים בטבלה hyp_TPM Live Feed Sampler Settings, אין צורך לאתחל את היישום ! ההגדרות בטבלה הזאת נבדקות בכל 5 דקות כך ששינוי הערכים נכנס לתוקף באופן אוטומטי עם שמירתם.