VisionCenterDEVELOPER

SDK 0.1
หน้าอัปโหลด EA และผลด่านตรวจ กำลังสร้างระหว่างนี้อ่านคู่มือด้านล่าง แล้วเตรียม EA ให้ผ่านด่านตรวจไว้ก่อน
คู่มือนักพัฒนาMQL5

คู่มือนักพัฒนา VisionCenter

สำหรับคนเขียน EA ที่จะนำขึ้นระบบ VisionCenter · SDK รุ่น 0.1

EA ทุกตัวในระบบใช้ SDK กลางตัวเดียวกัน SDK ทำงานพื้นฐานให้ครบ คุณเขียนแค่กลยุทธ์

SDK ทำให้
  • ตรวจสิทธิ์ลูกค้า (ล็อกบัญชี + เซิร์ฟเวอร์โบรก)
  • 1 บัญชีรันได้ทีละ 1 เครื่อง
  • ข้อความ VC-xx บนกราฟ (ไทย/อังกฤษ)
  • งดเปิดไม้ใหม่เมื่อติดต่อเซิร์ฟเวอร์ไม่ได้เกิน 24 ชม.
  • 6 ตั้งค่าหลัก: lot จาก %, ตัด DD, หยุดเมื่อกำไรครบ, วัน/เวลา, ฝั่ง Buy/Sell
  • ส่งรายการ input ให้หน้าเว็บวาดเอง
คุณทำเอง
  • กลยุทธ์เข้า/ออก
  • เขียน comment ของ input ตามรูปแบบ (ข้อ 2)
  • เรียกฟังก์ชัน SDK 4 จุด (ข้อ 1)

1เริ่มต้น (5 นาที)#

  1. คัดลอกโฟลเดอร์ Include/VisionCenter/ ไปไว้ที่ MQL5/Include/VisionCenter/
  2. คัดลอก Examples/VC_Example.mq5 ไปเป็นจุดตั้งต้นของ EA ใหม่
  3. เพิ่ม 4 จุดนี้ใน EA (ถ้าเริ่มจาก EA ตัวอย่าง มีครบแล้ว)
#include "MyEA_vc_manifest.mqh"          // ① ไฟล์ที่ vc_build.py สร้าง - ต้องอยู่ก่อน SDK
#include <VisionCenter/VisionCenter.mqh> // ② SDK

int OnInit()
  {
   if(!VC_Init("MyEA", "1.00")) return INIT_FAILED;   // ③ ชื่อ EA (ไม่มีช่องว่าง) + รุ่น
   VC_SetMagicRange(Magic, Magic + 9);                 //    magic ทุกตัวที่ EA นี้ใช้
   ...
  }
void OnDeinit(const int r) { VC_Deinit(r); }
void OnTimer()             { VC_Timer(); }             // SDK ตั้ง timer 1 วินาทีให้เอง

void OnTick()
  {
   bool stopped = VC_GuardTick(DDCutPct, DDCutManual, DailyTarget);   // ตัด DD / กำไรครบ (เรียกทุก tick)
   ... ดูแลไม้ที่เปิดอยู่ (trailing, ปิดตามสัญญาณ) ได้เสมอ ...
   if(stopped || !VC_CanOpenNew()) return;             // ④ ห้ามเปิดไม้ใหม่เมื่อไม่มีสิทธิ์
   ... เปิดไม้ใหม่ ...
  }
กฎสำคัญ

VC_CanOpenNew() เป็น false = ห้ามเปิดไม้ใหม่ แต่ไม้ที่เปิดอยู่ต้องดูแลต่อตามปกติ (SL/TP/trailing/ปิดตามกลยุทธ์) ห้ามปิดไม้ลูกค้าทิ้งเพราะหมดสิทธิ์

ถ้า EA ใช้ timer ของตัวเอง

SDK ใช้ EventSetTimer(1) อยู่แล้ว ให้ทำงานรอบของคุณใน OnTimer() เดียวกัน (นับวินาทีเอง) อย่าเรียก EventSetTimer ซ้ำ

2เขียน input ให้หน้าเว็บวาดถูก#

comment ท้ายบรรทัด = ชื่อที่โชว์ (ภาษาไทย ทั้งบนเว็บและในหน้า Inputs ของ MT5) ส่วนค่าตั้งของเว็บเขียนในบรรทัด //@vc ด้านบน หน้าต่าง MT5 ของลูกค้าจะได้สะอาด

//@vc en=01 - Main settings
input group "01 - ตั้งค่าหลัก"

//@vc en=Risk per trade (% of balance) | main | edit=live | who=customer | min=0.1 max=5 step=0.1 | risk=higher | help=ทุน 10,000 ตั้ง 1% = ยอมเสียไม่เกิน 100 ต่อไม้ | help_en=Balance 10,000 at 1% = at most 100 lost per trade
input double RiskPct = 1.0; // ความเสี่ยงต่อไม้ (% ของทุน)

//@vc en=Fast EMA | edit=locked
input int FastEMA = 20; // EMA เร็ว
คำสั่งใน //@vcความหมายไม่ใส่ =
en=ชื่อภาษาอังกฤษใช้ชื่อไทย
mainแสดงใน "ตั้งค่าหลัก" ด้านบนสุดอยู่ใน "ตั้งค่าขั้นสูง" (พับเก็บ)
edit=liveลูกค้าแก้แล้วมีผลทันที-
edit=restartแก้แล้ว EA รีสตาร์ท (~1 นาที) มี popup เตือน-
edit=lockedแก้ไม่ได้ค่าเริ่มต้น
who=customerลูกค้าเจ้าของบัญชีแก้ได้ไม่มีใครแก้ได้
min= max= step=ขอบเขตค่า เว็บไม่ยอมบันทึกนอกช่วง EA ตรวจซ้ำอีกชั้นต้องใส่ถ้าแก้ได้
risk=higher / lower / noneเพิ่มค่าแล้วความเสี่ยงสูงขึ้น/ลดลง/ไม่เกี่ยว ใช้ให้เว็บถามยืนยัน 2 ชั้นเมื่อเพิ่มความเสี่ยงต้องใส่ถ้าเป็น main
help= / help_en=คำอธิบายภาษาคนทั่วไป ใส่ตัวอย่างเป็นตัวเลขไม่มีคำอธิบาย

enum (ตัวเลือก): ใส่ //@vc en=... เหนือแต่ละรายการ และ comment ท้ายบรรทัดเป็นชื่อไทย

enum MY_MODE
  {
   //@vc en=Conservative
   MODE_SAFE = 0, // ระมัดระวัง
   //@vc en=Aggressive
   MODE_FAST = 1  // เร่งกำไร
  };

6 ตั้งค่าหลักมาตรฐาน (ต้องมีทุก EA)#

คัดลอกจาก VC_Example.mq5 ได้เลย ชื่อตัวแปรเปลี่ยนได้ แต่ต้องมีครบ 6 เรื่อง และต้องใส่ main

เรื่องฟังก์ชัน SDK
1 ความเสี่ยงต่อไม้ %VC_LotForRisk(riskPct, slDistance, maxLot)
2 Lot สูงสุด(อยู่ในฟังก์ชันเดียวกัน)
3 ตัดขาดทุนเมื่อ DD ถึง % + ปิดไม้มือด้วยไหมVC_GuardTick(ddPct, closeManual, dailyTarget)
4 หยุดเมื่อกำไรวันนี้ถึง(อยู่ในฟังก์ชันเดียวกัน)
5 วันและเวลาเทรดVC_TimeAllowed(days, startHour, endHour)
6 ฝั่ง Buy/SellVC_SideAllowed(isBuy, sides) + enum VC_SIDES

3สร้างรายการ input (manifest) ก่อนคอมไพล์ทุกครั้ง#

python tools/vc_build.py MyEA.mq5
  • ได้ไฟล์ MyEA_vc_manifest.mqh ข้าง EA แล้วจึงคอมไพล์
  • ซอร์ส .mq5 อยู่ที่เครื่องคุณเท่านั้น ระบบรับแค่ .ex5
แก้ WARNING ให้หมดก่อนอัปโหลด

เครื่องมือจะเตือนเมื่อ input ไม่มีชื่อ, แก้ได้แต่ไม่มี min/max, ตั้งค่าหลักไม่มี risk= หรือ enum หาไม่เจอ

4ทดสอบ#

  • Backtest: ใน Strategy Tester SDK ปล่อยให้เทรดเสมอ (ไม่ต่อเน็ต) backtest ได้ตามปกติ
  • รันสดก่อนอัปโหลด: วางบนกราฟบัญชี demo มุมซ้ายล่างจะขึ้น VisionCenter · VC-01 · บัญชี … ยังไม่ได้ขอใช้ EA นี้ และ EA ต้องไม่เปิดไม้ แปลว่าตัวล็อกทำงาน
  • ต้องเพิ่ม https://app.<โดเมน> ใน Tools › Options › Expert Advisors › Allow WebRequest (ถ้าไม่เพิ่ม จะขึ้น VC-10)

5อัปโหลด#

ที่ dev.<โดเมน> › อัปโหลด EA › เลือกไฟล์ .ex5 + เขียนว่ารุ่นนี้เปลี่ยนอะไร (หน้าอัปโหลดกำลังสร้าง)

ด่านตรวจอัตโนมัติ (ไม่ผ่าน = ตีกลับพร้อมเหตุผล)

ด่านตรวจอะไร
มี SDKรันสดบนบัญชี demo ที่ไม่ได้อนุมัติ: ต้องติดต่อเซิร์ฟเวอร์ภายใน 60 วิ + ขึ้นรหัส VC + ไม่เปิดไม้
มีรายการ inputส่ง manifest มาครบ และมี 6 ตั้งค่าหลัก
magic ไม่ซ้ำช่วง magic ไม่ชนกับ EA ตัวอื่นในระบบ
ไม่ใช้ DLLไฟล์ไม่เรียก DLL
คำสั่งจากเว็บใช้ได้หยุด / ปิดทุกไม้ / รีสตาร์ท ทำงาน

ผ่านแล้ว EA จะอยู่ในสถานะ "ซ่อน" แอดมินเลือกว่าจะแสดงให้ลูกค้าคนไหนเห็น

6ข้อห้าม#

ทำข้อใดข้อหนึ่ง = ไม่ผ่านด่านตรวจหรือถูกถอดออกจากระบบ
  • ห้ามใช้ DLL
  • ห้ามเปิดไม้ใหม่เมื่อ VC_CanOpenNew() เป็น false
  • ห้ามปิดไม้ลูกค้าเพราะหมดสิทธิ์ (ให้ดูแลจนปิดตามกลยุทธ์)
  • ห้ามแก้ไฟล์ใน Include/VisionCenter/ (อัปเดต SDK ผ่านทีมกลางเท่านั้น)
  • ห้ามใช้ magic 0 (สงวนไว้ให้ไม้ที่ลูกค้าเปิดเอง)
  • ห้ามเขียน Comment() ทับมุมซ้ายล่างของกราฟ (ที่ของข้อความ VC-xx)

7รหัสข้อความ VC-xx#

ข้อความที่ SDK แสดงมุมซ้ายล่างของกราฟ

รหัสความหมายEA เปิดไม้ใหม่ได้ไหม
VC-00ใช้งานได้ได้
VC-01บัญชียังไม่ได้ขอใช้ EA นี้ไม่ได้
VC-02รอแอดมินอนุมัติไม่ได้
VC-03บัญชียังไม่อยู่ใต้ IB ของทีมไม่ได้
VC-04หมดอายุไม่ได้
VC-05ถูกระงับไม่ได้
VC-06บัญชีรันอยู่ที่เครื่องอื่นไม่ได้
VC-07ติดต่อเซิร์ฟเวอร์ไม่ได้ได้ ภายใน 24 ชม.หลังคำตอบล่าสุดที่ผ่าน
VC-08EA รุ่นนี้หยุดใช้ไม่ได้
VC-09บัญชีไม่อยู่ในแพ็กเกจไม่ได้
VC-10MT5 ไม่อนุญาต WebRequestได้ ภายใน 24 ชม.แต่ต้องแก้ (ข้อ 4)
VC-11ปุ่ม Algo Trading ปิดMT5 ไม่ให้เทรดอยู่แล้ว
VC-12ตรวจคำตอบเซิร์ฟเวอร์ไม่ผ่านได้ ภายใน 24 ชม.
VC-13ไม่รองรับเซิร์ฟเวอร์โบรกนี้ไม่ได้

Aภาคผนวก: ตัวล็อกทำงานยังไง#

  • EA ส่ง เลขบัญชี + ชื่อเซิร์ฟเวอร์โบรก + ชื่อ EA + รุ่น + รหัสเครื่อง + nonce ไปที่ /api/lic ทุก 5 นาที (ถ้ายังไม่ผ่าน ทุก 1 นาที)
  • เซิร์ฟเวอร์ตอบพร้อมลายเซ็น RSA-2048 EA ตรวจด้วยกุญแจสาธารณะที่ฝังใน SDK คนที่ไม่มีกุญแจลับปลอมคำตอบไม่ได้
  • คำตอบล่าสุดที่ผ่านเก็บไว้ในเครื่อง เปิด MT5 ใหม่ตอนเน็ตหลุดยังเทรดต่อได้ในช่วงผ่อนผัน 24 ชม.

Bภาคผนวก: โปรโตคอลไลเซนส์ (v0.1)#

SDK จัดการส่วนนี้ให้ทั้งหมด ไม่ต้องเขียนเอง ใส่ไว้ให้รู้ว่าข้างในทำอะไร

คำขอ

POST {VC_HOST}/api/lic
Content-Type: application/json

{ login, server, ea, ver, inst, nonce, sdk }

คำตอบ (HTTP 200)

ok
1 = ใช้ได้, 0 = ไม่ได้
code
รหัส VC-xx
login server ea inst
ค่าที่ส่งไป สะท้อนกลับมาให้ EA ตรวจ
until
วันหมดอายุ YYYY-MM-DDTHH:MM:SSZ หรือว่าง ""
srv_time
เวลาเซิร์ฟเวอร์ (unix)
nonce
ค่าเดียวกับที่ EA ส่งไป
lang
th หรือ en ภาษาของข้อความบนกราฟ
sig
ลายเซ็น base64 (ดูด้านล่าง)

ลายเซ็น

sig = base64 ของ RSA-PKCS1 v1.5 + SHA-256 บนข้อความ UTF-8 นี้ (ok เขียนเป็น 1/0)

ok|code|login|server|ea|inst|until|srv_time|nonce

ช่องทางส่ง

  1. ลอง WebRequest ก่อน
  2. ถ้าได้ error 4014 (URL ไม่อยู่ในรายการอนุญาต) EA เปลี่ยนไปใช้ ช่องทางไฟล์ เพราะเครื่องที่ระบบดูแลรัน MT5 บน Wine ซึ่งจำรายการอนุญาตไว้ไม่ได้
  3. ช่องทางไฟล์: EA เขียน MQL5/Files/vc_lic_req.json (คำขอ + t) โปรแกรม feeder ของเครื่องส่งต่อให้เซิร์ฟเวอร์ แล้วเขียนคำตอบลง vc_lic_resp.json โดยไม่แก้อะไร EA รับคำตอบเมื่อ nonce ตรงและลายเซ็นผ่านเท่านั้น
  4. ไม่มีคำตอบใน 30 วิ = ไม่มี feeder: เครื่องลูกค้าที่ไม่ได้เพิ่ม URL จะขึ้น VC-10

inst ในคำตอบต้องเป็นเครื่องที่ถือบัญชีนั้นอยู่ ถ้าไม่ตรง EA จะขึ้น VC-06 · คำตอบล่าสุดที่ผ่านใช้เทรดต่อได้ 24 ชม. ตอนออฟไลน์

Cภาคผนวก: ไฟล์ในชุด SDK#

ไฟล์ทำอะไร
Include/VisionCenter/VisionCenter.mqhตัวหลักของ SDK: VC_Init / VC_Timer / VC_CanOpenNew / VC_Deinit, ตรวจไลเซนส์ออนไลน์, ป้ายข้อความ VC-xx
Include/VisionCenter/VC_Rsa.mqhตรวจลายเซ็น RSA-2048 PKCS#1 v1.5 SHA-256
Include/VisionCenter/VC_Messages.mqhรหัส VC-xx ข้อความไทย (ค่าเริ่มต้น) + อังกฤษ
Include/VisionCenter/VC_Main.mqhฟังก์ชันช่วยของ 6 ตั้งค่าหลัก
Include/VisionCenter/VC_PubKey.mqhกุญแจสาธารณะสำหรับตรวจคำตอบ
tools/vc_build.pyสร้าง manifest บนเครื่องนักพัฒนา (อ่านบรรทัด //@vc + comment ท้ายบรรทัด)
Examples/VC_Example.mq5EA ตัวอย่างที่เล็กที่สุดและครบ (กลยุทธ์ EMA สาธิต)