【MQL5パラダイス 第6回】การกำเนิดของหุ่นยนต์ที่ทำงาน 24 ชั่วโมง! ได้สัมผัสจังหวะ EA ด้วย “OnTick”
สวัสดีทุกคนครับ/ค่ะ ผมคือสับปะรด
ในการทดลองครั้งที่แล้วในตอนที่ 5SymbolInfoDouble()เราได้เรียนวิธีการดึงข้อมูลราคาปัจจุบันแบบ “Bid กับ Ask” จาก MT5 ซึ่งเป็นราคาที่เรียลไทม์ใช่ไหม เมื่อโปรแกรมที่เราเขียนเชื่อมต่อกับข้อมูลตลาดจริงๆ เรารู้สึกประทับใจไม่น้อยเลยใช่ไหม
อย่างไรก็ตาม ในซีรีส์นี้เรายังอยู่ในระดับของการเขียน “สคริปต์” อยู่ สคริปต์จะทำงานแค่「ครั้งเดียว」แล้วก็จบ แม้ว่าจะดึงข้อมูลราคาจริงมากแค่ไหนก็ตาม หากดูราคาครั้งเดียวแล้วปิดไป ก็จะไม่ใช่หุ่นยนต์ซื้อขายอัตโนมัติที่คุณสามารถใช้งานขณะหลับได้
ดังนั้นในครั้งนี้ เราจะก้าวข้ามการเป็นสคริปต์ไปสู่「เอ็กซ์เพิร์ทอะแดร์ไวซอร์ (EA)」และเริ่มพัฒนาจริงจัง EA ซึ่งจะเฝ้าดูตลาดตลอด 24 ชั่วโมง ระบบนี้เรียกว่า「OnTick(オンティック)」เราจะเรียนรู้กรอบนี้กันให้ดีนะ!
คุณพร้อมสำหรับการเตรียมกาแฟร้อนใช่ไหม? งั้นเปิด MetaEditor เดี๋ยวนี้เลยนะ
จากการทำงานแค่ครั้งเดียวของสคริปต์ไปสู่การเฝ้าดูโดยผู้ดูแลเฉพาะทาง (EA)
ให้ลองเปรียบเทียบความแตกต่างระหว่าง “สคริปต์” กับ “EA” ในชีวิตประจำวัน
สคริปต์เหมือน「การรับฝากงานเดี๋ยวเดียว」เมื่อคุณสั่งให้ไปที่ร้านสะดวกซื้อเพื่อดูราคานมในตอนนี้ มันจะวิ่งไปดูราคามาแล้วรายงานให้ แต่หลังจากนั้น หากนมไปลดราคาครึ่งราคาด้วย เวลาคุณไม่ได้สั่งซ้ำ มันก็จะไม่บอกคุณ
ในทางกลับกัน EA คือ「ผู้เฝ้าดูเฉพาะทาง」เป็นการสั่งให้ยืนเฝ้าหน้าชั้นวางนมตลอดเวลา เผื่อราคาจะเปลี่ยนแปลง แล้วถ้าหากลดราคาครึ่งราคาให้ซื้อทันที! พูดจาไม่บ่นเลย เฝ้าจอขายตลอด 24 ชั่วโมง 365 วัน
สิ่งที่เราต้องการสร้างคือ “ผู้เฝ้าดูเฉพาะทาง” ในภายหลังใช่ไหม ความถี่ที่ราคาจะเปลี่ยนแปลงนั้นคือกลไกสำคัญที่ทำให้ OnTick เข้ามาเป็นหัวใจหลักของระบบนี้
เปิดเทมเพลตใหม่: เอ็กซ์เพิร์ทอาเดไวซา (EA) ให้ลอง
การเห็นภาพตามคำบรรยายยังไม่พอ มาลองสร้างไฟล์ EA ด้วย MetaEditor จริงๆ กันเถอะ
- คลิกปุ่ม “สร้างใหม่” ที่มุมบนซ้ายของ MetaEditor
- ที่ผ่านมาเราเลือกที่สคริปต์ด้านล่างสุด แต่คราวนี้เลือกด้านบนสุด「เอ็กซ์เพิร์ทอาเดไวซา (テンプレート)」แล้วคลิกถัดไป
- ให้ชื่อว่า「My_First_EA」แล้วกด“เสร็จสิ้น”ต่อไป
จากนั้น หน้าจอรหัสใหม่จะเปิดขึ้น แตกต่างจากสคริปต์ตรงที่มีข้อความภาษาอังกฤษมากมายปรากฏอยู่ อาจจะงงบ้างเล็กน้อย แต่ไม่ต้องกังวล เหมือนตอนสคริปต์ก่อนหน้า ข้อความที่เป็นข้อความสีเทา (//เริ่มต้นด้วยบรรทัดที่เป็นข้อความบันทึก) คือเพียงโน้ตข้อความ
เลื่อนหน้าจอลงมา คุณจะพบข้อความต่อไปนี้
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
พบแล้วใช่ไหม? นี่คือหัวใจสำคัญของ EA ซึ่งเป็นกรอบ「OnTick(オンティック)」ที่เราได้กล่าวถึง
กรอบเวทมนตร์ที่ถูกเรียกทุกครั้งที่ราคาขยับ: OnTick
เมื่อดูกราฟ FX ราคาจะขยับไปมาทีละนิด เราเรียกการอัปเดตทุกครั้งที่ราคาขยับว่า「Tick(ティック)」
MT5 จะเรียกใช้งาน OnTick() รอบหนึ่งเต็มเมื่อราคาทยอยเคลื่อนไหว 1 Tick ดังนั้นหากราคาขยับ 3 ครั้งในหนึ่งวินาที ก็หมายความว่าเนื้อหาในกรอบนี้จะทำงานสามครั้งในหนึ่งวินาทีด้วย
กรอบสคริปต์ที่เราเรียนมาถึงตอนนี้คือOnStart()ซึ่งหมายถึง “เมื่อเริ่มต้น ทำงานแค่ครั้งเดียว” และตรงกันข้ามOnTick()มีความหมายว่า “ทุกครั้งที่มีการอัปเดต Tick”
สิ่งที่เราจะทำคือ ใส่ในวงเล็บOnTick()วงปีกปีกเปิด{ }สิ่งที่ต้องการให้ตรวจสอบทุกครั้งที่ราคาขยับถูกเขียนลงไปในนี้
ลองดูการดึงราคาภายใน OnTick จริงๆ
ดังนั้นเราจะนำการดึงราคาที่เรียลไทม์ที่เรียนมาก่อนหน้า เขียนลงไปในOnTick()เพื่อดึง Bid ล่าสุดแล้วส่งออกไปที่ล็อก (แท็บเอ็กซ์เพิร์ท) อย่างต่อเนื่อง
เขียนโค้ดด้านล่างลงในกรอบ OnTick() (คุณสามารถลบบรรทัดโน้ตที่มีอยู่ได้)void OnTick()
{
// 1. ลดชื่อคู่สกุลเงินจากชาร์ตลงในตัวแปร
string my_symbol = _Symbol;
// 2. ดึง Bid ล่าสุดมาเก็บในตัวแปร
double current_bid = SymbolInfoDouble(my_symbol, SYMBOL_BID);
// 3. ส่งราคาที่ดึงมาออกไปที่ล็อก
Print("現在のBid価格は ", current_bid, " です!");
}
คำอธิบายตัวอย่างโค้ด
โค้ดในตัวอย่างนี้เหมือนกับที่เราเรียนมาก่อนหน้า ทุกอย่างเหมือนเดิม ต่างกันตรงที่ตำแหน่งที่เขียนOnStart()ไม่ใช่OnTick()ที่เราเขียนลงไป เนื่องจากเป็นการเปลี่ยนพฤติกรรมของ MT5 อย่างมาก
ลองกดปุ่ม “คอมไพล์” เพื่อตรวจสอบว่าไม่มีข้อผิดพลาด แล้วกลับมาที่หน้าจอกราฟ MT5 ครั้งต่อไป ครั้งนี้ให้เปิดหน้าต่าง Navigator ที่ไม่ใช่ “สคริปต์” แต่ให้ขยายโฟลเดอร์「เอ็กซ์เพิร์ทอาดไวซา」แล้วจะเห็นว่า My_First_EA ที่เราสร้างไว้มีอยู่ในนั้น
ลาก EA นี้ไปที่ชาร์ตแล้วกด OK ในหน้าตั้งค่า (ถ้าชาร์ตขึ้นชื่อ EA พร้อมไอคอนหมวกฟ้า ก็เสร็จเรียบร้อย)
ตอนนี้ให้ดูที่แท็บ “เอ็กซ์เพิร์ท” ใน “Toolbox” ด้านล่างของ MT5 ราคาของชาร์ตก็จะขยับเป็นระยะๆ แล้วแสดงข้อความว่า “現在のBid価格は 150.51 です!” “現在のBid価格は 150.50 です!” ด้วยความเร็วสูงอย่างต่อเนื่องอย่างที่เราคาดไว้
เมื่อเห็นโปรแกรมที่คุณเขียนเองไม่หยุดนิ่งและติดตามการเคลื่อนไหวของตลาดแบบเรียลไทม์ มันน่าประทับใจมาก
(หากตลาดปิดในวันเสาร์อาทิตย์ เพื่อทดสอบ ราคาจะไม่ขยับ ข้อความจะไม่ขึ้น กรุณารอวันจันทร์นะ!)
Tick ที่ขยับทุกครั้ง คือความเรียบง่ายที่ยังคงทรงพลัง
อย่างที่คุณเห็นเลยOnTick()โปรแกรมที่อยู่ภายในจะถูกเรียกอย่างรวดเร็วทุกครั้งที่ราคาขยับ ในสภาวะตลาดที่คล่องแคล่ว อาจถูกเรียกหลายสิบครั้งในหนึ่งวินาที
แล้วมันหมายถึงอะไรล่ะ?
ถ้าการประมวลผลช้าก็จะทำให้สั่งซื้อช้า เกิดสลิปเพจและเสี่ยงต่อทุน
因此ฉันจึง「การค้าแบบเรียบง่ายและมั่นคง」ให้ความสำคัญ
โปรแกรมที่จริงยอดเยี่ยมควรดูเรียบง่าย ไม่มีการคำนวณที่ไม่จำเป็น “เพียงดึงข้อมูลที่จำเป็นจริงๆ แล้วตัดสินใจอย่างรวดเร็ว” ความคล่องตัวนี้คืออาวุธหลักในการอยู่รอดในสภาพตลาดที่เข้มงวด
ต่อไปเมื่อคุณรวมตรรกะของตัวเองลง EA ก็ให้ถามตัวเองเสมอว่า “การประมวลผลนี้จำเป็นต้องคำนวณทุกครั้งที่ Tick เคลื่อนไหวจริงๆ หรือเปล่า?” การลดสิ่งที่ไม่จำเป็นลง จะทำให้โค้ดเรียบง่ายสวยงามและประสิทธิภาพดีขึ้น
สรุป
ครั้งนี้เราได้ก้าวจากสคริปต์สู่การเป็นเอ็กซ์เพิร์ทอาเดไวซา (EA) และเรียนรู้การทำงานของ OnTick() ซึ่งเป็นหัวใจของ EA แล้วOnTick()ด้วยความเข้าใจกลไกการทำงานของโปรแกรมที่เรียกใช้งานทุกครั้งที่ราคาขยับ เราก็พร้อมที่จะเริ่มต้นการ “ซื้อขายอัตโนมัติ” แล้วใช่ไหม
อย่างไรก็ดี หากยังใช้งานในปัจจุบัน EA จะติดตามราคาปัจจุบันอย่างเดียว ในการซื้อขายจริงจะมีการใช้อินดิเคเตอร์อย่าง “Moving Average (MA)” หรือ RSI มาช่วยวิเคราะห์เทรนด์และความร้อนแรงของตลาด
ดังนั้นในครั้งหน้า「วิธีการอ่านค่าอินดิเคเตอร์จากโปรแกรม」เราจะอธิบายวิธีการดึงค่าอินดิเคเตอร์และราคาปัจจุบันพร้อมกัน ใช้เงื่อนไขที่เรียนมาก่อนหน้าในครั้งก่อนหน้านี้ เพื่อให้โปรแกรมตัดสินใจเกี่ยวกับ “การครอสโกลาเดน/เดดครอส”
ความรู้ที่เคยเป็นจุดๆ จะเชื่อมเป็นเส้นขึ้นมา ตั้งแต่ตอนนี้ไปน่าจะน่าสนใจมาก โปรดติดตามกันนะ!
แล้วพบกันในครั้งหน้าของ “MQL5 Paradise” นะครับ/ค่ะ ขอให้ EA ของคุณเต้นจังหวะอย่างทรงพลังและสบายใจ ขอให้สับปะรดเป็นเพื่อนคู่คิดของคุณครับ/ค่ะ!