【MQL5パラダイス 第5回】ในที่สุดก็เชื่อมต่อกับตลาดจริง! มารับทราบ“ราคา”แบบเรียลไทม์กันเถอะ
สวัสดีทุกคน ผมชื่อ Pineapple
ในครั้งที่สี่ก่อนหน้านี้ เราได้เรียนเกี่ยวกับ “if สถานะเงื่อนไข” ที่สั่งให้โปรแกรมตัดสินใจ โดยการเขียนกฎว่า “ถ้า〇〇 แล้วให้ทำ△△” ซึ่งทำให้โปรแกรมสามารถตัดสินใจด้วยตนเองเป็นความก้าวหน้าที่สำคัญใช่ไหม
อย่างไรก็ตาม ในครั้งก่อน เราได้ใส่ราคาปัจจุบันลงในตัวแปรด้วยวิธีการ hard-code จำนวนเช่น “150.50” ด้วยมือของเราเอง ซึ่งไม่สามารถรองรับตลาดจริงที่เปลี่ยนแปลงอยู่ตลอดเวลาได้ Auto-trading โปรแกรมที่แท้จริงต้องการคือ「ราคาจริงที่กำลังเคลื่อนไหวตรงหน้าเราในขณะนี้」ใช่ไหมล่ะ
ดังนั้นในครั้งนี้ เราจะมาถึงขั้นตอนวิธีการรับข้อมูลราคาจริงจาก MT5เพื่อให้โปรแกรมของคุณสามารถเชื่อมต่อกับ “ตลาดจริง” ได้ในทันที วันนี้ก็ผ่อนคลายกันหน่อยนะ ลองจิบกาแฟและอ่านไปพร้อมกัน
พื้นฐานที่สำคัญที่สุดของ FX! มาย้อนความจำถึง “Bid” และ “Ask” กันเถอะ
ก่อนที่จะรับราคาจากโปรแกรม เรามาทบทวนพื้นฐานที่สำคัญมากในการเทรด FX สักอย่าง มันคือ“Bid (บิด)” และ “Ask (อาส์ค)”กัน
เมื่อทุกคนดูกราฟ MT5 หรือเปิดหน้าจอคำสั่ง จะเห็น “ราคาสองราคา” ปรากฏคู่กันเสมอ
- Bid(ราคาขาย):ราคาที่คุณส่งคำสั่งขาย (short) ในกราฟ ราคาปัจจุบันที่กราฟแสดงมักเป็นราคาของ Bid
- Ask(ราคาซื้อ):ราคาที่คุณส่งคำสั่งซื้อ (long) ราคาจะสูงกว่า Bid เล็กน้อย
และช่องว่างระหว่างนี้ระหว่าง “Ask” และ “Bid” คือ「สเปรด」 ซึ่งเป็นค่าธรรมเนียมของโบรกเกอร์ FX
ในการสร้างโปรแกรมซื้อขายอัตโนมัติ (EA) เราจำเป็นต้องใช้ราคาสองตัวนี้ให้แตกต่างกันอย่างชัดเจน เช่น “ตอนนี้จะสั่งซื้อคำสั่งซื้อ” เพื่อดูราคา Ask หรือ “ตอนนี้จะสั่งขาย” เพื่อดูราคา Bid
โปรแกรมนั้นค่อนข้างตรงไปตรงมา เมื่อถูกถามอย่างกว้างๆ ว่า “บอกฉันราคาปัจจุบัน” มันอาจงงได้ว่า “เป็นราคาขายหรือราคารับ”
วิธีการรับราคาจาก Bid และ Ask ใน MQL5
ดังนั้น ใน MQL5 จะได้อย่างไรบ้างที่จะได้ Bid และ Ask ปัจจุบัน หากคุณเคยเขียนโปรแกรมใน MT4 มาก่อน อาจคิดว่าBidหรือAskพิมพ์คำเหล่านี้ลงไปก็สามารถรับได้แล้ว
แต่ใน MQL5 ที่มีการประมวลผลที่สูงขึ้นและแม่นยำมากขึ้น จำเป็นต้องขอข้อมูลด้วยวิธีที่นอบน้อมมากขึ้น นั่นคือSymbolInfoDouble() (ฟังก์ชันชุดคำสั่งเกี่ยวกับสัญลักษณ์)
ชื่ออาจยาวนิดหน่อย แต่มันง่ายถ้าแยกออกมา
- Symbol:คู่สกุลเงิน เช่น USDJPY หรือ EURUSD
- Info:ข้อมูล (Information)
- Double:ตัวเลขที่มีจุดทศนิยม (กล่องตัวแปรที่มีทศนิยม เหมือนที่เราเรียนไว้ในตอนที่ 3)
นั่นคือ คือคำสั่งว่า “กรุณาบอกข้อมูลที่มีจุดทศนิยมของคู่สกุลเงินที่ระบุด้วย” วิธีการเขียนเพื่อรับราคาปัจจุบันคือดังนี้
SymbolInfoDouble(_Symbol, SYMBOL_BID);
ในวงเล็บมีข้อมูลสองชิ้นที่คั่นด้วยจุลภาค (,) โดยชิ้นแรก_Symbolเป็นคำสำคัญที่ใช้อ้างถึงคู่สกุลเงินบนชาร์ท์ที่โปรแกรมนี้กำลังทำงานอยู่
ส่วนที่สองSYMBOL_BIDคือการระบุว่าเราต้องการข้อมูล Bid หากต้องการ Ask ให้เปลี่ยนเป็นSYMBOL_ASKเท่านั้น
ลองรับราคาจริงๆ กันดู
ดังนั้น เราจะนำ “ตัวแปร” และ “if สร้างเงื่อนไข” มารวมกัน เพื่อรับราคาปัจจุบันแบบเรียลไทม์และสร้างสคริปต์ประเมินสภาพตลาด
เปิด MetaEditor สร้างสคริปต์ใหม่ แล้วกรอกโค้ดด้านล่าง
void OnStart()
{
// 1. รับชื่อคู่สกุลเงินบนชาร์ท แล้วเก็บไว้ในตัวแปร
string my_symbol = _Symbol;
// 2. รับ Bid (ขาย) และ Ask (ซื้อ) แบบเรียลไทม์ แล้วเก็บไว้ในตัวแปร
double current_bid = SymbolInfoDouble(my_symbol, SYMBOL_BID);
double current_ask = SymbolInfoDouble(my_symbol, SYMBOL_ASK);
Print("【現在のリアルタイム相場を取得しました】");
Print("対象通貨ペア:", my_symbol);
Print("Bid(売値):", current_bid);
Print("Ask(買値):", current_ask);
// 3. กำหนดจุดราคายะสำคัญ (สมมติว่า 150.00 เย็น) ให้เป็นตัวแปร
double target_price = 150.00;
// 4. ใช้ if เพื่อตรวจสอบราคาปัจจุบันกับราคาจุดสำคัญ
if (current_bid > target_price)
{
Print("現在のBidは ", target_price, " より上にあります。強気相場かもしれません!");
}
else if (current_bid < target_price)
{
Print("現在のBidは ", target_price, " より下にあります。弱気相場かもしれません。");
}
else
{
Print("현재のBidは ", target_price, " とぴったり同じです。");
}
}
คำอธิบายตัวอย่างโค้ด
อย่างไรบ้าง ผู้เรียนเห็นว่าความรู้ที่เราได้เรียนมาถูกเชื่อมโยงกันได้อย่างสวยงามหรือไม่
- ก่อนอื่น
string my_symbol = _Symbol;ให้ชื่อคู่สกุลเงินปัจจุบัน (เช่น "USDJPY") ใส่ลงในกล่องข้อความเป็นสตริง - ต่อมา เราใช้คำสาปเวทมนตร์ที่ได้แนะนำไป
SymbolInfoDouble()เพื่อรับ Bid และ Ask แบบเรียลไทม์ แล้วนำไปใส่ในcurrent_bid,current_askซึ่งเป็นกล่องตัวเลขทศนิยมแบบdouble - และต่อไปคือทบทวนครั้งก่อน เป้าหมายราคาที่สนใจ (ตอนนี้สมมติเป็น 150.00) และราคาจริง Bid ที่ได้มาก็เปรียบเทียบด้วยคำสั่ง
ifด้วยการพิมพ์ผลลัพธ์ด้วย Print
คอมไพล์แล้ว ลากวางสคริปต์นี้บนชาร์ทจริงเพื่อให้ทำงาน MT5 จะปรากฏราคาที่แท้จริงคือตรงกับข้อความที่คุณเขียนไว้บนทาสก์
หากไม่มีข้อผิดพลาดและแสดงผลได้ในครั้งเดียว โปรดชมเชยตัวเองด้วยนะ คุณกำลังเข้าถึงข้อมูลเรียลไทม์ของตลาดการเงินผ่านโปรแกรมของคุณเลย!
Pineapple Style! ความคิดเรื่อง “ต้นทุนที่มองไม่เห็น” ต้องมีความเข้มแข็ง
ตอนนี้ขอเล่าเรื่องการเทรดเชิงสนามจริงกันบ้าง
ครั้งนี้ เราพยายามรับราคาสองตัวคือ Bid และ Ask อาจมีคนสงสัยว่า “ลำบากนะ ทำไมไม่ดูเฉพาะ Bid ก็พอ แล้วจะไม่ซื้อขายก็ได้เหรอ?”
จริงๆ แล้ว ความสามารถในการรับรู้ความแตกต่างของ Bid และ Ask (สเปรด) เป็นตัวกำหนดประสิทธิภาพ EA อย่างมาก
ฉันมักบอกเสมอว่า「หลีกเลี่ยงการปรับแต่งจนเกินไป (curve fitting) และทำการเทรดอย่างเรียบง่ายและมั่นคง」 หนึ่งในลักษณะของ EA ที่ถูกปรับแต่งมากเกินไปคือ “มองข้ามต้นทุนที่มองไม่เห็นอย่างสเปรด”
เมื่อทำการทดสอบหลังเหตุ (backtest) หากตั้งค่าสเปรดเป็น “1 จุดตลอดเวลา” หรือการตั้งค่าในอุดมคติไม่สมจริง โปรแกรมอาจดูเหมือนทำกำไรอย่างมากด้วยการเทรดสั้นๆ (scalping) แต่จริงๆ แล้วมักทำให้ผลกำไรมหาศาลดูเหมือนเกิดขึ้น
แต่ในสภาวะตลาดจริงเป็นอย่างไรล่ะ ในเวลาประกาศข้อมูลเศรษฐกิจหรือช่วงเช้าที่สภาพคล่องต่ำ ความต่างระหว่าง Ask และ Bid (สเปรด) มักกว้างมาก ตัวอย่างเช่น คิดว่าซื้อที่ 150.00 แต่สเปรดเปิดออกทำให้ซื้อที่ 150.05 นี่คือสิ่งที่เกิดอยู่เป็นประจำ
ตรรกะที่ซับซ้อนเกินไปจะอ่อนแอต่อเสียงรบกวนของตลาดจริง เช่น ความโลภน้อยหรือการเลี้ยวเบนของสเปรดอย่างรุนแรง ทำให้บัญชีจริงทำงานไม่ได้
ในทางกลับกัน“รอให้ค่าเฉลี่ยเคลื่อนที่ตัดกันอย่างมั่นคงก่อนเข้าเทรด”“มุ่งหาช่องกรอบราคากว้างๆ ไปหลายสิบ pips”เป็นตรรกะเรียบง่ายที่ไม่ถูกรบกวนง่ายหากสเปรดเปิดบ้าง เพราะมีความลึกพอ
เมื่อเขียนโปรแกรมSYMBOL_ASKและSYMBOL_BIDไปด้วยกัน เพื่อจำไว้ว่า “ฉันกำลังเผชิญกับกำแพงค่าธรรมเนียมจริงๆ” คิดถึงต้นทุนจริงก็ยังมีกำไรที่เหลืออยู่กับกฎง่ายๆ ที่มั่นคง คือสิ่งที่เรียกว่า “ระบบที่มั่นคงจริงๆ”
สรุป
ครั้งนี้ เราได้เรียนวิธีใช้ฟังก์ชันSymbolInfoDouble()เพื่อรับข้อมูลราคาที่มีชีวิตจาก MT5
ตัวแปรมีข้อมูลเรียลไทม์เข้าในกล่อง แล้วใช้ if เพื่อตัดสินใจ กระบวนการนี้หากเข้าใจดี ถือว่าเป็นการ mastered พื้นฐานการเขียนโปรแกรม
อย่างไรก็ตาม เราเคยสร้างแค่ “สคริปต์” สคริปต์เมื่อวางบนกราฟแล้วจะทำการประมวลผลเพียงครั้งเดียวเท่านั้น「ครั้งเดียว」และเสร็จสิ้น นี่ไม่ใช่การเทรดอัตโนมัติที่เฝ้าตลาดตลอดเวลาใช่ไหม
ดังนั้นครั้งหน้าจะจบการใช้งานสคริปต์และ「エキスパートアドバイザ(EA)」จะเริ่มการสร้าง ด้วยกรอบใหม่ที่คอยคำนวณซ้ำๆ ทุกครั้งที่ราคากระทบ เช่น「OnTick(オンティック)」กรอบเวทมนตร์ใหม่นี้อธิบายไว้
ถึงเวลาที่โปรแกรมของคุณจะทำงานตลอด 24 ชั่วโมงอย่างอัตโนมัติ ไม่หยุดหย่อน โปรดติดตามนะ!
แล้วพบกันในครั้งถัดไปที่ “MQL5 Paradise” ขอให้โปรแกรมของคุณได้รับการเยือนจากเทพธิดาตลาดแล้วยิ้มให้กัน Pineapple ครับ!