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

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

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

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

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

על מנת להתקין את יישום הממשק, בצע את הפעולות הבאות:
  • פתח את כלי ההתקנה של הייפר (SYE Products Installer).
  • בחר בלשונית SYE Hyper Enterprise ולאחר מכן בחר באפליקציות לצד השרת (server side) ולחץ על המשך.
  • מתוך רשימת האפליקציות בחר ב Feed Ticks Sampler ולחץ על המשך.
  • אשר את תנאי השימוש ולחץ על המשך.
  • בחר בנתיב ההתקנה ולחץ על DOWNLOAD & INSTALL .
  • עליך להעתיק את קובץ ה- lic של מסד הנתונים בתוך התיקייה שבה הותקן הממשק. חובה לשים רק קובץ אחד שכן היישום יטען את הראשון שימצא בתיקייה של עצמו.
  • כעת הפעל את היישום ותעבור לשלב 2, בכדי ללמוד כיצד להגדיר נכון את מקור הציטוטים.

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

שם קובץ וסיומת תיאור
Hyper_Price_Feed_RT_Sampler.exe קובץ היישום של הדוגם, מכיל את כל הקוד בקובץ אחד.
Appl_Self_Upgrade.exe יישום עדכון אוטומטי ואתחול עצמי.
mtmanapi.dll
mtmanapi64.dll
קבצי הספריה של MetaTrader4 Manager. החלטנו לשלוח אותם כברירת מחדל עם היישום (מהדורה 1090 ממאי 2017).
עבור פרוטוקול FIX לא נדרשים קבצים אלו ובעבור MT5 יש להקין קבצי DLL אחרים (עדכניים מאת meta quotes).
Hyper_Price_Feed_RT_Sampler.ini קובץ הגדרות מקומי, נערך מתוך היישום, ייווצר רק לאחר ההפעלה הראשונה של היישום.

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

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

שלב 2: סדר פעולות והגדרות בהפעלה הראשונה !

בניגוד לסדר הכתיבה בעמוד זה, קודם עליך לבצע את ההגדרות בהייפר ורק אח"כ למלא את השדות בקובץ ה-INI. המשך לפי סדר הטקסט כי זוהי הדרך להסביר את המערכת.
עם ההפעלה הראשונה ובכל פעם ששדות חיוניים ריקים בקובץ ה-INI... יפתח דיאלוג עם רשימת השדות הבאה:
Field Name Description
DATA SOURCE סימול מקור המידע (הפלטפורמה) בשני תווים. בד"כ בהייפר תמצא הגדרת פלטפורמה בטבלה hyp_Trading Systems List בעלת סימול זהה.
רק במקרה של יבוא מחירים בפרוטוקול FIX ללא קשר ל-TP כלשהו, ניתן להמציא קוד (חד ערכי) ולוותר על הגדרות בטבלה הנ"ל.
שם המשתמש של היישום ברשת הייפר יהיה Feed_Sampler_DS כאשר DS מבטא את שני התווים מהשדה הזה.
Hyper Database Custom IP כתובת IP לגישה ישירה למסד הנתונים של הייפר. שדה חריג שמתאים להתקנות סגורות או לסביבת פיתוח.
Feed by Fix Protocol WS שם הגדרת web service בהייפר עבור הטמעת פרוטוקול FIX (מכל הגרסאות). ראה כותרת נפרדת לנושא.
Write Alerts When Tick Different More Then % הוראה לכתוב התראה בטבלה A עבור כל שינוי מחיר מעל X אחוז כלפי מעלה או מטה.
MT4 Login
MT4 Password
עבור התממשקות ל-MT4 וגם MT5 יש להגדיר את צמד השדות הללו וכמובן שחייבת להיות רשומה בטבלה hyp_Trading Systems List, משם נלקחת כתובת ה-IP להתחברות.
MT4 LAN IP address כאשר מתקינים את היישום בצמוד לשרת המסחר (ברשת הפנימית) יש צורך להגדיר כתובת פרטית מתוך הרשת.
רק במקרה הזה עליך להשתמש בשדה הזה. אחרת הכתובת תילקח מהייפר.
Zip Pack Offset in Minutes כל עוד שאנחנו משתמשים במנוע מסד הנתונים (שנת 2013) הקיים, כאשר ישנם מספר ממשקי דגימה באותו מסד נתונים, יש לפצל את זמני האריזה שלהם.
השדה הזה מגדיר הפרש בדקות. התקנה נכונה תהיה ערך אפס לפלטפורמה הראשונה ואז 2 דקות תוספת לכל פלטפורמה.
לדוגמא: בהתקנה של 3 שרתי מסחר מול הייפר אחת, השרת האחרון יתחיל ב-4 דקות איחור לעומת הראשון.
Get Tick Price Coefficient From Hyper ברירת המחדל של היישום הזה היא לגבות את כל הפיד של השרת. מבלי לסנן דבר ולפי הגדרות השרת.
אולם המציאות שונה מהתיאוריה, אצל לקוח אחד התגלה מצב שבו יבוא ההגדרות שלנו אינו פועל על פי הנוסחה ונאלצנו להגדיר את הפרמטרים ידנית.
לכן גם ביישום MT4 Integration אין עדכון של השדה ברשומות סימבולים קיימות. רק בעת הוספת סימבול חדש מתבצע החישוב מול שרת המסחר.
Save Symbols from Hyper List האם לשמור פידים רק עבור סימבולים הקיימים בטבלה של הייפר, או לשמור כל סימבול פעיל בפלטפורמה ?
שתי האפשרויות תלויות גם בהרשאות חשבון ה- Manager שאיתו היישום מופעל.
MT4 Sampling Speed
  • Normal:
    20 דגימות בשנייה.
  • Fast:
    50 דגימות בשנייה.
  • Max Overload:
    100 דגימות בשנייה.

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

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

להלן אופן ההגדרה של פרוטוקול FIX ברשומת ה-Web Services של הייפר:
Field Name Description
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 מחרוזת זו אינה חובה. במערכות בהן היא נדרשת, היא משמשת כשדה המשך לשדה הקודם, למטרת הניתוב.
ערך שנקבע בקוד המערכת הוא Keep-alive בכל 90 שניות.
קיימים המון מימושים לפרוטוקול FIX, המודול מזהה את מערכת היעד לפי שלושת הפרמטרים האחרונים בטבלה לעיל...
להלן חלק ממחרוזת ההרשמה לדוגמה:
262=Feed;263=1;146=Count;55=EUR/USD;55=GBP/USD;

התקנת דגימה משרתי MetaTrader

בכדי להתחבר לשרת MT4 או MT5 היישום צריך לאתר 3 דברים:
  1. ההבנה האם מתחברים לשרת MT4 או MT5 הנה לפי הספרייה (קבצי DLL) המותקנת בתיקייה של היישום.
  2. URL או כתובת IP של השרת נקראת מהטבלה hyp_Trading Systems List לפי ה-Data Source שהוגדר ב-INI.
  3. מספר חשבון manager וסיסמה נלקחים מהשדות
    MT4 Login & MT4 Password
    בקובץ ה-INI.
בעת האתחול נבנית רשימת סימבולים מלאה של שרת ה-MetaTrader ולפי הגדרות הקבוצות - נמחקים הסימבולים שאין עליהם מסחר !
הדוגם אינו מתייחס לרשימת הסימבולים שמוגדרת בהייפר ולא ניתן למנוע ממנו לשמור טיקים של סימבולים מחוקים בהייפר. מהסיבה הפשוטה שהמידע הזה הולך לאיבוד אם לא נשמר.

* מבחינת ביצועים, אם הדוגם נמצא באותה רשת מקומית כמו השרת של ה-MetaTrader (באותה רשת LAN), אזיי דגימת הטיקים תהיה איכותית יותר (לא קריטי כ"כ).

להלן דוגמה לקובץ ה-log המקומי בתהליך התחברות מוצלח לשרת MetaTrader:
Trying to login server 000.000.000.000 user #0000
Login_To_MT4_Manager OK
MT4_Refresh_Symbols OK
MT4_Groups_Request OK
Seem that setup was successful. Waiting to capture feed data...
New FEED package arrived with 3 records inside   צריכות להופיע 5 הודעות כאלו עם כמות הסימבולים שעודכנו

שלב 3: בחינת תקינות והגדרת אריזה

דגימת הפיד מתבצעת אל תוך הטבלה 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, שהרי ליישום אין ממשק משתמש.
אבל בעזרת הטבלה ניתן להזיז את היישום לארוז את המנה הבאה או לחזור מנה אחת אחורה במידה והנתונים עדיין בטבלת ה- 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 דקות כך ששינוי הערכים נכנס לתוקף באופן אוטומטי עם שמירתם.