【MQL5パラダイス 第3回】กล่องเวทมนตร์เก็บข้อมูล! จงเชี่ยวชาญ "ตัวแปร" เพื่อมอบความจำให้ EA
สวัสดีทุกท่าน ผมคือ Pineapple
ในตอนที่ 2 ของ “MQL5 Paradise” เมื่อครั้งก่อน เราได้เปิด MetaEditor แล้วสร้างสคริปต์เล็กๆ ที่แสดงข้อความว่า “Hello, MQL5!” บนหน้าจอ MT5 ใช่ไหม เมื่อข้อความถูกแสดงออกมาอย่างราบรื่น เราคงรู้สึกตื่นเต้นเล็กน้อยใช่หรือไม่ ความประทับใจเล็กน้อยนั้นคือแรงจูงใจสูงสุดในการเรียนเขียนโปรแกรมที่ทำให้เรียนรู้ต่อไปได้ กรุณารักและให้ความสำคัญกับมันนะ
ทีนี้ เรื่องสำหรับครั้งที่ 3 ซึ่งเป็นหัวข้อที่จะไม่หลบพ้นในโลกของการเขียนโปรแกรม และเป็นระบบที่สะดวกสบายที่สุด คือ「ตัวแปร(변수)」เกี่ยวกับเรื่องนี้
「ตัวแปร… ทำให้คิดถึงคณิตศาสตร์ชั้นมัธยมต้นจนปวดหัวใช่ไหม」
หากคุณกำลังคิดเช่นนั้น โปรดวางใจ ตัวแปรใน MQL5 ไม่ใช่สมการที่ยากเย็นอะไรมาก หากพูดให้สั้นๆ ก็คือ「กล่องเวทมนตร์ที่มีชื่อไว้สำหรับเก็บข้อมูล」นั่นเอง
จงวางกาแฟที่ชอบ (หรือน้ำชาก็ได้) ไว้อยู่ใกล้ๆ แล้วคลายสบายใจ ขยายความลับของ “กล่องนี้” ไปด้วยกัน
ทำไม EA ถึงต้องการ “กล่องเวทมนตร์”
เวลาที่เราเทรดกันอยู่ในชีวิตประจำวัน เรากำลังประมวลผลตัวเลขมากมายในสมองใช่ไหม “ราคาปัจจุบันของ USDJPY อยู่ที่ 150.50 เยนใช่ไหม” “ครั้งนี้จะมีความมั่นใจ เลือกล็อต 0.5 ด้าน?” “ค่าการล่าช้าสามารถรับได้ที่ 30 จุด”
เพื่อให้โปรแกรมการซื้อขายอัตโนมัติ (EA) สามารถทำการเทรดแทนคุณได้ ซึ่งเป็นการทำงานในทำนองเดียวกับสิ่งเหล่านี้「ที่ที่จดจำตัวเลขและข้อความไว้」จำเป็นต้องมีด้วย
อย่างไรก็ตาม คอมพิวเตอร์ทำได้เฉพาะสิ่งที่ถูกสั่งมา ถ้าพูดกับมันว่า “จำล็อตไว้ได้ใช่ไหม” ถ้าไม่ระบุสถานที่มันจะลืมทันที ดังนั้นจึงมีการแนะนำ “ตัวแปร” ขึ้นมา
เตรียมกล่องชื่อว่า “ล็อต” และใส่ตัวเลข “0.5” ไว้ในกล่องนั้น เตรียมกล่องชื่อว่า “ราคาปัจจุบัน” เพื่อเปลี่ยนเนื้อหาทุกครั้งที่ราคาขยับ
ด้วยการใช้กล่อง (ตัวแปร) ที่สามารถดึงออกหรือติดกลับเข้าไปได้ตามสถานการณ์ EA จะสามารถตอบสนองต่อการเปลี่ยนแปลงของตลาดได้ยืดหยุ่น พูดได้ว่าเป็นกล่องเวทมนตร์ที่ให้ EA มี “ความจำ” และ “ความยืดหยุ่น”
สี่รูปแบบของ “กล่อง” ที่ควรจำไว้ (ชนิดข้อมูล)
จริงๆ แล้วกล่องเวทมนตร์นี้ไม่ใช่กล่องทุกแบบที่สามารถบรรจุทุกอย่างได้ เมื่อใดที่คุณต้องใส่ข้อมูลชนิดต่างๆ จำเป็นต้องกำหนด「รูปแบบกล่อง (ชนิดข้อมูล)」ให้ชัดเจนเสียก่อน
ถ้าจะบรรจุของเหลว เลือบขวดพลาสติก หากจะบรรจุกระดาษ เลือกกรอบไฟล์ ตามแบบเดียวกับ MQL5 เลือกกล่องให้เหมาะกับข้อมูล ในการสร้างโปรแกรม FX มีเพียงสี่รูปแบบกล่องที่ใช้งบเสมอเท่านั้น จำไว้ง่ายๆ ว่านี่คือทั้งหมดที่คุณต้องรู้ในช่วงนี้
- int(อินท)กล่องที่บรรจ่าตัวเลขที่ไม่เป็นเศษส่วน เช่น “1”, “100”, หรือ “-50”การใช้งาน FX:หมายเลขที่ระบุตัว EA, สลิปเพจ, ระยะเวลาของค่าเฉลี่ยเคลื่อนที่ (เช่น 14 วัน, 20 วัน)
- double(ダブル:เศษส่วน)กล่องที่บรรจุตัวเลขที่มีเศษส่วน เช่น “150.235” หรือ “0.01”การใช้งาน FX:ราคาคู่สกุลเงิน (เรต), จำนวนล็อตที่เข้า, ตลาดการเงินให้ความสำคัญกับทศนิยม ดังนั้น
doubleจึงเป็นรากฐานที่ใช้งานบ่อยที่สุด - string(ストリング:ข้อความ)กล่องที่บรรจุข้อความหรือตัวอักษร ข้อความที่เราใช้ในครั้งล่าสุดอย่างคำว่า "こんにちは" ก็เป็นสมาชิกในกลุ่มนี้การใช้งาน FX:ชื่อคู่สกุลเงิน ("USDJPY"), ข้อความที่พิมพ์ลงในล็อก, รายงานข้อผิดพลาด ฯลฯ
- bool(ブール:จริง/เท็จ)กล่องพิเศษที่รับได้เพียงสองค่าเท่านั้นคือ “true (จริง = ใช่)” หรือ “false (เท็จ = ไม่ใช่)”。คิดถึงมันเหมือนสวิตช์ ON/OFFการใช้งาน FX:ตัดสินใจ เช่น “สัญญาณซื้อออกหรือยัง? (true/false)” “วันนี้อนุญาตการเทรดหรือไม่? (true/false)”
มาลองสร้างกล่องจริงๆ และใส่ข้อมูลกันเถอะ
เมื่อทราบชนิดของกล่องแล้ว ก็ลองสร้างตัวแปรใน MQL5 ตามที่เรากำหนดไว้ด้านล่างนี้ โดยในครั้งนี้ก็เหมือนครั้งก่อน สร้างสคริปต์ใหม่แล้วเขียนโค้ดต่อไปนี้
มาดูกันก่อนว่ามีการทำงานอย่างไร แล้วเราจะดูโค้ดด้านล่างอย่างรอบคอบ
//+------------------------------------------------------------------+
//| Hello_MQL5.mq5 |
//| Copyright 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
// property copyright และลิงก์ต่างๆ ถูกแสดงตามด้านบน
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
// 1. เตรียมกล่อง (ตัวแปร) และใส่ค่า
int my_slippage = 30; // สลิปเพจ (จำนวนเต็ม)
double my_lot = 0.1; // ปริมาณล็อต (ทศนิยม)
string my_symbol = "USDJPY"; // ชื่อคู่สกุลเงิน (ข้อความ)
bool is_trading = true; // อนุญาตการเทรด (จริง/เท็จ)
// 2. ลองแสดงค่าภายในกล่องด้วย Print
Print("【現在の設定を確認します】");
Print("対象通貨ペア:", my_symbol);
Print("設定ロット数:", my_lot);
Print("スリッページ:", my_slippage);
}
//+------------------------------------------------------------------+
คำอธิบายโค้ดตัวอย่าง
คุณคิดว่าเป็นอย่างไร ลางๆ ว่าคงพอเดาได้ใช่ไหมว่าอะไรที่ทำอยู่
เมื่อสร้างตัวแปร (ในศัพท์เทคนิคเรียกว่า “ประกาศ”) กฎการเขียนก็เรียบง่ายมาก「รูปแบบกล่อง (ชนิดข้อมูล)」 + 「ชื่อกล่อง」 = 「ค่าข้างใน」;เพียงเรียงลำดับเช่นนี้เท่านั้น
ตัวอย่างdouble my_lot = 0.1;ประโยคนี้เป็นคำสั่งไปยัง MT5 ว่า(ให้)สร้างกล่องชื่อ my_lot ที่บรรจุจำนวนทศนิยม 0.1และสั่งให้ใส่ตัวเลข 0.1 เข้าไปในกล่องนั้น
ชื่อกล่องสามารถตั้งเป็นชื่อใดก็ได้ที่ประกอบด้วยตัวอักษรภาษาอังกฤษและตัวเลขmy_lotก็ได้apple_pieหรือจะตั้งเป็นก็ยังได้ แต่เพื่อไม่ให้มองแล้วงงว่ากล่องนี้บรรจุอะไร ควรตั้งชื่อที่สื่อถึงสิ่งที่อยู่ภายในจะดีกว่า
และในส่วนท้ายจะใช้ฟังก์ชันPrint()เพื่อพิมพ์ค่าภายในกล่องลงในล็อกPrint("設定ロット数:", my_lot);โดยคั่นด้วยลูกน้ำ (,) เพื่อรวมข้อความทั่วไปกับค่าภายในกล่องและแสดงออกมา
เมื่อคอมไพล์แล้ว ลากไปวางบนชาร์ต MT5 ในแท็บ Expert ของ Toolbox ค่าและข้อความที่ตั้งไว้จะถูกแสดงอย่างเรียบร้อย ให้คุณลองแก้ค่าในตัวเลขด้วยมือเพื่อดูการเปลี่ยนแปลง
ความสัมพันธ์ลึกระหว่างเทรดที่เรียบง่ายและมั่นคงกับตัวแปร
“ไม่จำเป็นต้องสร้างกล่องตัวแปรให้วุ่นวาย เพียงใส่ค่า 0.1 โดยตรงใน Print ได้ไหม”
คมมาก! แน่นอนว่าในสคริปต์เล็กๆ ก็ยังทำงานได้ หากการเขียนตัวเลขลงโค้ดโดยตรงเรียกว่า “ฮาร์ดโค้ด” แต่ในการสร้าง EA ที่ใช้งานจริง การฮาร์ดโค้ดถือเป็นวิธีที่ควรหลีกเลี่ยงอย่างยิ่งเพราะถ้าตอนหลังคิดจะเปลี่ยนล็อตเป็น 0.2 จะต้องค้นหาค่าที่ระบุไว้ในโค้ดหลายร้อยบรรทัดแล้วแก้ทีละจุด อาจทำให้เกิดข้อผิดพลาด (บัก) ได้
เมื่ออยู่ตอนเริ่มต้น (ส่วนที่ใส่ค่าภายในกล่อง)double my_lot = 0.1;หากจัดเก็บไว้ในตัวแปรเดียว เพียงแก้ที่จุดเดียวก็จะทำให้ล็อตทั้งหมดของโปรแกรมเปลี่ยนทันที
ฉันมักจะคิดว่า「หลีกเลี่ยงการปรับแต่งมากเกินไป และสร้างการเทรดที่เรียบง่ายและมั่นคง」การออกแบบโครงสร้างโปรแกรมที่เรียบร้อย และการทราบว่าเลขจำนวนใดถูกใช้งานที่ใดด้วย「ตัวแปร」คือเงื่อนไขสำคัญในการสร้างระบบที่มั่นคง (ทนทานต่อการเสียหาย และดูแลรักษาง่าย)
EA ที่สร้างมาจากตรรกะซับซ้อนและมาประกอบซ้ำๆ เพื่อปรับพารามิเตอร์ในภายหลัง อาจทำให้ไม่รู้ว่าควรแตะที่ไหนเมื่อปรับ ในการเขียน EA ที่ดี จงใช้ตัวแปรอย่างชาญฉลาดเพื่อสร้างสูตรที่โปร่งใส สวยงาม และง่ายต่อการอ่าน ซึ่งจะเป็นรากฐานที่ช่วยให้ EA สามารถรับมือกับคลื่นตลาดได้อย่างยืดหยุ่น
สรุป
ครั้งนี้เราได้อธิบายถึงกล่องเวทมนตร์ที่ชื่อว่า “ตัวแปร”int(จำนวนเต็ม),double(ทศนิยม),string(อักขระ/ข้อความ),bool(สวิตช์) เรามีทั้ง4 กล่องนี้ที่ทำให้โปรแกรมของคุณสามารถจดจำข้อมูลต่างๆ ได้
“อาจจะเข้าใจแล้วว่าต้องใส่ตัวเลขในกล่องใช่ไหม แต่จะใช้อย่างไรในการเทรดล่ะ?”
การนำตัวเลขที่ใส่ไว้ในกล่องไปใช้งานจริงคือการ「ตัดสินใจ」เมื่อถึงเวลาที่ต้องตัดสินใจ
ครั้งถัดไป เราจะเรียนรู้หัวใจแห่งการเขียนโปรแกรมคือ「if statement (เงื่อนไข)」เรียนรู้ว่า “ถ้า (if) ราคาปัจจุบันสูงกว่าเส้นค่าเฉลี่ยเคลื่อนที่ จะซื้อตอนนี้” “ถ้าทุนเหลือน้อย จะหยุดเทรด”
เราจะเข้าสู่หัวข้อที่เป็นสมองของ EA กันจริงๆ แล้ว ลองสนุกกับความสามารถที่เพิ่มขึ้นทีละน้อย
แล้วพบกันในครั้งต่อไปของ “MQL5 Paradise” เพื่อทำให้การเทรดของคุณโดดเด่นยิ่งขึ้นด้วยโค้ดที่เรียบง่ายและสวยงาม
ขอให้ Pineapple เป็นฝ่ายพัฒนา พบกันใหม่เร็วๆ นี้!