ניהול חשבונות המסחר דרך הייפר

בעמוד זה נתעד את סדר ביצוע הפעולות, מרגע הגעת הפקודה מהייפר (דרך הטבלה "hyp_TPM Commands").
הארכיטקטורה פשוטה: דרך כרטיס הלקוח או דרך אתר האינטרנט של הייפר נוצרות רשומות פקודה לפלטפורמה (יצירת חשבון, הפקדה, משיכה וכיו). יישום הממשק מבצע ומחזיר משוב דרך אותה הטבלה.
היישום שיצר את הבקשה (הייפר / האתר) עוקב אחר סטטוס הרשומה עד למשוב (הצלחה או תקלה). לאחר קריאת המשוב, מוצג פלט למשתמש קצה.
למרבית הפעולות ניתן להגדיר תבנית דוא"ל שישלח לסוחר (בעל החשבון) וגם אירוע פנים ארגוני.
הכותרות שלהלן מתייחסות לשדה Command שהינו מסוג סטטוס. יישום הממשק ל-MT4 מתשאל את השרת אודות רשומות בסטטוס "ממתין לביצוע" ושמקור הנתונים זהה לשל היישום.

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

להלן התנאים לשאילתה פקודות לביצוע. שימו לב להגנה לפי מועד הבקשה:
Query(Cmd_QueueTb, True);
Where_SameVal('Status', 0);
Where_SameVal('Order / Ticket ID', 0);
Where_In_Range('DateTime UTC', NOW_UTC-(20*he_Minute_Value), NOW_UTC+(10*he_Second_Value));   // waiting from the last 20 minutes
Where_SameVal('Data Source', hv_Data_Source);   // like 'R1'
Close_Query;

יצירת חשבון מסחר חדש (Create New User)

כל רשומת לקוח בהייפר יכולה להיות שייכת לחשבון מסחר אחד. לכן לפני יצירת חשבון חדש, נבדק תוכן השדה TP Login. אם קיים חשבון אזי הפעולה תבוטל.
כעת נבנית רשומת הלקוח עבור הפלטפורמה. על פי ההגדרה בשדה 'Copy Fields from CRM to TP' יועתקו השדות הרלוונטיים אל הרשומה של MT4.
להלן רשימת השדות האפשריים להעתקה (בכל שורה רשום ראשון השדה מתוך MT4 API ואז אחריו שם השדה מרשומת הלקוח של הייפר):

MT4 User.Name = 'TP Client Name' / 'English Client Name' / 'Client Full Name'
MT4 User.Email = 'Email'
MT4 User.Id = 'ID Number'
MT4 User.Country = 'Country'
MT4 User.State = 'Region'
MT4 User.Zipcode = 'Zip Code'
MT4 User.City = 'City'
MT4 User.Address = 'Street Address'
MT4 User.Phone = '1st Phone' / '2nd Phone'
MT4 User.Group = if client record 'TP Group' is not empty
MT4 User.Comment = TPM commands 'Comment' field
MT4 User.Agent_Account = by client table 'Middleman Account'
MT4 User.Password = 'Website Password'
MT4 User.Login = by TP settings table 'Real Server Next Login Value', when not empty

העתקה ויצירה של סיסמאות הגישה לחשבון

שים לב לשדות 'Website Password' וגם 'TP Investor Password' (אם מיושם בהייפר), ההנחיות כלפי כל שדה בנפרד:
כאשר שדה סיסמה מועבר ריק ל-MT4, אזי שרת המסחר (MT4) מייצר את הסיסמה והיא מועתקת בחזרה אל הייפר.
אם הוגדרה בהייפר סיסמה מראש, אזי היא מועתקת ל-MT4. במידה והפלטפורמה "מתלוננת" שהסיסמה אינה חזקה מספיק, הממשק יוצר סיסמה חדשה בת 8 תווים ומעביר אותה לשרת המסחר לניסיון חוזר.

העתקה של שדות בחזרה אל רשומת הלקוח בהייפר

  1. השדות Login וגם Group יועתקו אל השדות הרזרביים שהוקצו להם. כל שדות היתרות הקיימים יאופסו.
  2. אם הוגדר לממשק 'Create Trading Account Convert Client to Real' אזי יעודכנו השדות:
    Handling Status = 4
    Locked Name & ID = 1
    Became a Real Client On Date

    אחרת רק הסטטוס 'Locked Name & ID' יועבר לערך 2 אם היה קטן מ-4 (לקוח אמיתי).
  3. ערך השדה 'Website Shop / TP Activity' יקבע על Readonly או על Active בהתאם לאופן פתיחת החשבון (יש הגדרה לכל ממשק TP איך לנהוג).
  4. השדה 'Use Currency by Default' יקבע על מטבע חשבון המסחר.
  5. בכפוף להרשאה ראשית בקובץ ה-INI של היישום Copy new password back to Client Record, הסיסמה הסופית לחשבון המסחר תועתק בחזרה אל השדה 'Website Password'
    ובמידה ומיושם השדה 'TP Investor Password' אזי גם אליו תועתק הסיסמה של המשקיע (גישה לקריאה בלבד אל חשבון המסחר).

הפקדת כסף לחשבון המסחר (Deposit Funds)

שים לב שהמספר בשדה 'Value', ברשומת הפקודה, מתייחס למטבע החשבון כפי שמוגדר בעת ביצוע ההוראה. יש להימנע מסיכונים מיותרים בסמיכות בין החלפת קבוצה לבין הפקדה או משיכה.
ראשית הפונקציה בוחנת שאכן קיים חשבון מסחר אמיתי ושהסכום בשדה 'Value' היינו חיובי.
לשדה "הערה לעסקה" בפלטפורמה (Order.Comment) מועתק הטקסט מהשדה 'Comment' ברשומת הפקודה בהייפר.

לאחר ביצוע מוצלח של ההפקדה, מתבצע וידוא נתונים מול הפלטפורמה.
אל רשומת הפקודה בהייפר מיובאים השדות הבאים:
'Order / Ticket ID', 'Trading Account', 'Platform Processing at', 'Account Currency'

גם רשומת הלקוח מתעדכנת בשדות היתרות (Balance, Credit, Equity) וגם שיוך לקבוצת סוחרים Group וגם מטבע החשבון בשדה 'Use Currency by Default'.
במידה והלקוח אינו בסטטוס "לקוח אמיתי", היישום מעדכן את הסטטוס של הלקוח בשדות:
'Handling Status', 'Locked Name & ID', 'Became a Real Client On Date'

משיכת כסף מחשבון המסחר (Withdraw Funds)

שים לב שהמספר בשדה 'Value', ברשומת הפקודה, מתייחס למטבע החשבון כפי שמוגדר בעת ביצוע ההוראה. יש להימנע מסיכונים מיותרים בסמיכות בין החלפת קבוצה לבין הפקדה או משיכה.
ראשית הפונקציה בוחנת שאכן קיים חשבון מסחר אמיתי ושהסכום בשדה 'Value' היינו חיובי (כן, גם הוראת משיכה צריכה לכתוב סכום חיובי).
לשדה "הערה לעסקה" בפלטפורמה (Order.Comment) מועתק הטקסט מהשדה 'Comment' ברשומת הפקודה בהייפר.

לפני ביצוע משיכה, יישום הממשק מוודא שיש יתרה מספקת בחשבון, על ידי בדיקת השדה Balance בלבד (ללא התחשבות בעסקאות פתוחות ובמשכון הנדרש להחזקתן).
הממשק מונע את האפשרות להכניס את החשבון ליתרה שלילית (מעבר להפרש 0.02 שדרוש בכדי להתמודד עם בעיות השוואה בין שברים עשרוניים).
בדיקת היתרה מבוטלת רק כאשר ערך השדה 'Response Notes' בפקודת המשיכה זהה לערך 'Allow Negative Balance'.

לאחר ביצוע מוצלח של המשיכה, מתבצע וידוא נתונים מול הפלטפורמה.
אל רשומת הפקודה בהייפר מיובאים השדות הבאים:
'Order / Ticket ID', 'Trading Account', 'Platform Processing at', 'Account Currency'

גם רשומת הלקוח מתעדכנת בשדות היתרות (Balance, Credit, Equity) וגם שיוך לקבוצת סוחרים Group וגם מטבע החשבון בשדה 'Use Currency by Default'.
במידה והלקוח אינו בסטטוס "לקוח אמיתי", היישום מעדכן את הסטטוס של הלקוח בשדות:
'Handling Status', 'Locked Name & ID', 'Became a Real Client On Date'

שינוי מסגרת אשראי (Modify Account's Credit)

שים לב שהמספר בשדה 'Value', ברשומת הפקודה, מתייחס למטבע החשבון כפי שמוגדר בעת ביצוע ההוראה. יש להימנע מסיכונים מיותרים בסמיכות בין החלפת קבוצה לבין הפקדה או משיכה.
ראשית הפונקציה בוחנת שאכן קיים חשבון מסחר אמיתי ושהסכום בשדה 'Value' היינו חיובי. הסכום יכול להיות אפס, לביטול מסגרת האשראי.
לשדה "הערה לעסקה" בפלטפורמה (Order.Comment) מועתק הטקסט מהשדה 'Comment' ברשומת הפקודה בהייפר.

שים לב: קיימת המרה בין העיצוב ושיטות העבודה של הייפר לבין שיטות העבודה של MT4 בנוגע למתן אשראי.
בהייפר מזינים מסגרת אשראי לכל החשבון ואילו ב-MT4 מזינים פקודת אשראי עם טווח זמן (גם בביטול מוקדם של המסגרת).
מבחינת המשתמשים הכל פועל באופן שקוף. מבחינה פנימית, הייפר מיישמת פקודה מסוג OP_CREDIT רק על ההפרש בין מסגרת האשראי שהתבקשה לבין המסגרת הקיימת ברגע ביצוע הפקודה.

לאחר ביצוע מוצלח של מסגרת האשראי, מתבצע וידוא נתונים מול הפלטפורמה.
אל רשומת הפקודה בהייפר מיובאים השדות הבאים:
'Order / Ticket ID', 'Trading Account', 'Platform Processing at', 'Account Currency'

גם רשומת הלקוח מתעדכנת בשדות היתרות (Balance, Credit, Equity) וגם שיוך לקבוצת סוחרים Group וגם מטבע החשבון בשדה 'Use Currency by Default'.

החלפת סיסמה לחשבון המסחר (Modify Real Password)

בתחילה הפונקציה בוחנת שאכן משויך חשבון מסחר לרשומת הלקוח ושגם כתובת הדוא"ל מלאה. לא ניתן להחליף סיסמה ללא כתובת דוא"ל שתקבל אליה את הסיסמה החדשה.
הפונקציה תגריל סיסמה חדשה בת 8 תווים הכוללת ספרות ותווים באנגלית. לאחר הצלחת שינוי הסיסמה ב-MT4, יישום הממשק ישלח מייל הודעה ללקוח עם הסיסמה החדשה.
בכפוף להרשאה ראשית בקובץ ה-INI של היישום Copy new password back to Client Record, הממשק גם יעתיק את הסיסמה לשדה 'Website Password' (באופן מוצפן).

יישום הממשק תומך בעוד שתי אפשרויות, בהתאם לטקסט שהיישום הקורא רושם מראש בשדה 'Comment':
  • 'Same Password as Website': הוראה זו גורמת להעתקת הסיסמה הקיימת היום באתר - אל חשבון המסחר. זהו פתרון גם לעמוד באתר בו הלקוח בוחר לעצמו את הסיסמה החדשה.
  • 'Hide New Password': הוראה זו מחביאה את הסיסמה החדשה מפני הייפר ! כך בעצם ניתן להגריל סיסמה נפרדת למסחר ולא לתעד אותו בשום מקום מלבד המייל שנשלח רק אל הלקוח באופן חד פעמי.
    הוראה זו גוברת על כל הוראה או הגדרה אחרת בנושא.

מתן הרשאה לחשבון לפעול באופן מלא (Enable Trading on Account)

ראשית, הפונקציה בודקת שהחשבון נמצא בשרת המסחר המחובר לממשק הזה וקוראת את מצבו.
השדה Enable מקבל YES והשדה Enable_Read_Only מקבל NO (מקביל לתיבות הסימון בתוכנת MT4 Manager).
לאחר הצלחת העדכון בפלטפורמה, יישום הממשק קורא מחדש את פרטי החשבון בכדי לוודא את השינוי. לאחר מכן מעודכנת רשומת הלקוח בהייפר.

הפיכת חשבון לקריאה בלבד כך שלא ניתן לסחור בו (Disable Trading on Account)

ראשית, הפונקציה בודקת שהחשבון נמצא בשרת המסחר המחובר לממשק הזה וקוראת את מצבו.
השדה Enable מקבל YES והשדה Enable_Read_Only מקבל YES (מקביל לתיבות הסימון בתוכנת MT4 Manager).
לאחר הצלחת העדכון בפלטפורמה, יישום הממשק קורא מחדש את פרטי החשבון בכדי לוודא את השינוי. לאחר מכן מעודכנת רשומת הלקוח בהייפר.

סגירת חשבון מלאה ומניעת גישה (Close Trading Account)

ראשית, הפונקציה בודקת שהחשבון נמצא בשרת המסחר המחובר לממשק הזה וקוראת את מצבו.
השדה Enable מקבל NO והשדה Enable_Read_Only מקבל NO (מקביל לתיבות הסימון בתוכנת MT4 Manager).
לאחר הצלחת העדכון בפלטפורמה, יישום הממשק קורא מחדש את פרטי החשבון בכדי לוודא את השינוי. לאחר מכן מעודכנת רשומת הלקוח בהייפר.

קיים מנגנון נוסף לסגירת החשבון

בהתאם להגדרה של השדה On Close Account Change Password Keep Enabled בקובץ ה-INI הראשי של היישום, סגירת החשבון תפעל באופן שונה:
השדה Enable מקבל YES והשדה Enable_Read_Only מקבל YES וההערה של החשבון (Comment) מקבלת את המילה 'closed ' בתחילתה.
לאחר הצלחת העדכון בפלטפורמה, היישום מחליף גם את הסיסמה של החשבון מבלי לשלוח אותה במייל (גם לא מתועדת בהייפר).
המטרה היא להתגבר על בעיה בדוחות של MT4. פירוט לעומק נמצא בעמוד "ניהול חשבונות המסחר דרך הייפר".

החלפת קבוצה לחשבון בודד (Change Real Account Group)

ראשית, הפונקציה בודקת שהחשבון נמצא בשרת המסחר המחובר לממשק הזה וקוראת את מצבו.
בפקודה זו רק השדה Group מקבל ערך חדש, את שם הקבוצה שרשום בשדה 'Response Notes' בפקודת הביצוע (אגב, השדה הזה נדרס לאחר עיבוד הרשומה בלי קשר לתוצאה).
לאחר הצלחת העדכון בפלטפורמה, יישום הממשק קורא מחדש את פרטי החשבון בכדי לוודא את השינוי. לאחר מכן מעודכנת רשומת הלקוח בהייפר.
* לא נשלחת כל הודעה לבעל החשבון על החלפת הקבוצה.

יצירת חשבון מסחר חדש בשרת ההדגמות (Create Demo Account)

הפונקציה הזאת מתנהלת בדיוק כמו יצירת חשבון מסחר אמיתי, עם מספר הבדלים אותם נספור מיד, הדבר הראשון שצריך לבחון לוגית הוא האם כבר קיים חשבון מסחר אמיתי ברשומת הלקוח בהייפר.
מבחינת תשתית, הייפר מתוכננת להחזיק חשבון מסחר אמיתי אחד בעבור כל רשומת לקוח. על הרשומה הזאת ניתן להוסיף חשבון הדגמה למעקב, אולם הייפר לא מייבאת רשומות מסחר (עסקאות) וכ'ו.
בכדי להתייחס לחשבון ההדגמה באותם הכלים של חשבון אמיתי, יש להגדיר את שרת ההדגמות - כשרת מסחר אמיתי בעל מזהה שונה (השדה data source).

להלן ההבדלים בין פתיחת חשבון הדגמה לבין פתיחת חשבון אמיתי:
  1. ברשומת הלקוח יש להגדיר שדות נפרדים עבור חשבון ההדגמה ורק הם יעודכנו. קבוצת המסחר ברירת המחדל נקבעת בהגדרות נפרדות לכל שרת מסחר 'Default Demo Account Group'.
  2. חשבון הדגמה תמיד נפתח למסחר מלא (ללא אפשרות ל-readonly).
  3. רק אם אין חשבון אמיתי, אזי יעודכנו השדות הבאים ברשומת הלקוח:
    'Data Source','Website Shop / TP Activity' = 2, 'Handling Status' = 2, 'Use Currency by Default', 'Website Password', 'TP Investor Password'
  4. מיד לאחר יצירה מוצלחת של חשבון הדגמה, מופקד אליו הסכום שהוגדר בשדה 'Deposit for New DEMO Account', בטבלת ההגדרות של הפלטפורמות.

החלפת סיסמה לחשבון הדגמה (Modify Demo Password)

הפונקציה הזאת מתנהגת בדיוק כמו שינוי סיסמה בחשבון אמיתי, אך בהבדל אחד: אם קיים חשבון מסחר אמיתי ונוצרה סיסמה חדשה לחשבון ההדגמה, היא לא תועתק לשדה 'Website Password' ברשומת הלקוח.

הטענת חשבון הדגמה בכסף וירטואלי (Recharge Demo Account)

הפונקציה מבצעת הפקדה של הסכום שהוגדר בשדה 'Deposit for New DEMO Account', בטבלת ההגדרות של הפלטפורמות. בלי שום בדיקה מקדימה וללא שליחת מייל ללקוח.


שליחת הודעות לסוחרים בגין ביצוע פעולות

בעת ביצוע פעולה מסוג: יצירת חשבון, שינוי סיסמה, הפקדה או משיכה, יישום הממשק שולח מייל לבעל החשבון על פי תבנית שהוגדרה מראש. כל תבנית יכולה לכלול שדות למיזוג בתוכן.
תבניות המייל נכתבות לפי קוד שפה (
'ENG', 'HEB', 'RUS' etc
), כל לקוח מקבל מיילים בשפה לפי הסניף אליו הוא משויך !
סניף בהייפר מגדיר שפה וגם אזור זמן וגם את תיבות הדוא"ל והסמס מהן יש לשלוח הודעות אוטומטיות ללקוחות.
כל הודעה נשלחת לכתובת הלקוח מהשדה הראשי (יכולה להכיל מספר כתובות מופרדות ב-;) וגם לכל אנשי הקשר בעלי מעמד משפטי: Partner או Beneficiary.
עותק של ההודעה יופיע גם בכרטיס הלקוח, למעט מייל המכיל סיסמה !

להלן דוגמאות לאופן חיבור שמות הודעות אל קוד השפה:
New_Real_User_Account_ENG (סניף באנגלית)
New_Real_User_Account_HEB (סניף בעברית)
Withdrawal_Funds_ARA (סניף בערבית)
Deposit_Funds_RUS (סניף ברוסית)
Deposit_Funds_Tax_SPA (סניף בספרדית)

בטבלה הבאה תמצא את קודי ההודעות, בכותרות, החל מעמודה מספר 2 ובשורות את השדות האפשריים למיזוג:
סימול השדה ומשמעותו New_Real_User_Account Deposit_Funds
Deposit_Funds_Bonus
Deposit_Funds_Tax
Deposit_Funds_Fee
Withdrawal_Funds
Withdrawal_Funds_Bonus
Withdrawal_Funds_Tax
Withdrawal_Funds_Fee
Update_Credit Modify_Real_Password New_Demo_User_Account Modify_Demo_Password
{#Client_Full_Name}
שם הלקוח בשפה המקומית (הייפר 'Client Full Name').
V V V V V V V
{#Eng_Client_Full_Name}
שם הלקוח באנגלית במידה ויושם שדה נפרד למטרה זו
V V V V V V V
{#EMail}
כתובת דוא"ל מרשומת הלקוח. עלול להכיל מספר כתובות משורשרות
V V V V V V V
{#TP_Login}
מספר חשבון המסחר בפלטפורמה
V V V V V V V
{#TP_Password}
הסיסמה לחשבון המסחר - למסחר מלא
V V V V
{#TP_Password_Investor}
הסיסמה למשקיע, לצפייה בחשבון המסחר (Readonly)
V V
{#TP_Amount}
סכום הפעולה כולל מטבע
V V V
{#DateTime}
תאריך ושעת ביצוע הפעולה בשרת המסחר.
לפי שעון הפלטפורמה.
V V V
{#ERP_Account_Number}
מספר חשבון הלקוח בהייפר
V V V
{#Comment}
טקסט הערה כפי שנכתבה בהייפר.
בד"כ מכיל את הסיבה להפקדה/משיכה וכ'ו
V V V
{#TP_Balance}
{#TP_Credit}
{#TP_Equity}
יתרות חשבון המסחר כולל מטבע החשבון.
V V V

מכתב על שינוי קבוצת מסחר

בדיוק כמו המכתבים הקודמים, ניתן להגדיר גם את TPM_Change_Account_Group_ENG, לפי קוד שפה.
השדות הנתמכים בהודעה הם:
{#Client_Full_Name}, {#Eng_Client_Full_Name}, {#EMail}, {#TP_Login}, {#TP_PrevGroup}, {#TP_NewGroup}
שני השדות האחרונים מאפשרים לחשוף את שמות הקבוצות, הקודמת והחדשה.

אירועים והתראות פנימיות של הייפר בגין פעולות

יש להייפר אירועים מובנים ומוכנים לשימוש, גם בתחום פלטפורמות המסחר. מדובר במערכת פנים ארגונית וללא קשר ללקוחות "בחוץ".
בטבלה הבאה נציג את האירועים ואת השדות שניתן למזג בתוכן ההודעות. החל מהטור השני נמצאים שמות השדות למיזוג.
שם האירוע
{#Client_Number}
מספר הלקוח בהייפר
{#Client_Full_Name}
שם הלקוח בהייפר
{#TP_Login}
מספר חשבון המסחר
{#TP_Amount}
סכום הפעולה ומטבע
{#Comment}
הערה שנרשמה בפעולה
{#TP_Balance}
{#TP_Credit}
{#TP_Equity}
יתרות הלקוח ומצב החשבון לאחר הפעולה
{#TP_PrevGroup}
{#TP_NewGroup}
שמות קבוצות מסחר.
קודמת וחדשה.
TPM_New_Account
בעת יצירת חשבון מסחר אמיתי.
V V V
TPM_On_Any_Deposit
בעת הפקדה, בכל סכום.
V V V V V V
TPM_On_Major_Deposit
בעת הפקדה בסכום מעל [P1] דולרים.
הפקדה במטבע אחר מומרת לדולרים.
V V V V V V
TPM_On_Any_Withdrawal
בעת משיכה, בכל סכום.
V V V V V V
TPM_On_Major_Withdrawal
בעת משיכה בסכום מעל [P1] דולרים.
משיכה במטבע אחר מומרת לדולרים.
V V V V V V
TPM_On_Credit_Modification
בעת שינוי מסגרת אשראי ללקוח.
V V V V V V
TPM_Change_Password
בעת החלפת סיסמה לחשבון,
בד"כ על ידי הסוחר בעצמו.
V V V
TPM_Change_Group
בעת שינוי קבוצה לחשבון (שינוי תנאים).
V V V V V