ดังที่คุณทราบแล้วตลาดแลกเปลี่ยนเงินตราต่างประเทศ (Forex หรือ FX) ใช้สำหรับการซื้อขายระหว่างคู่สกุลเงิน แต่คุณอาจไม่ทราบว่าตลาดนี้เป็นตลาดที่มีสภาพคล่องมากที่สุดในโลก
รอบลงคืออะไร
ไม่กี่ปีที่ผ่านมาด้วยความอยากรู้อยากเห็นของฉันฉันได้ก้าวแรกเข้าสู่โลกของการซื้อขายอัลกอริทึม Forex ด้วยการสร้างบัญชีทดลองและเล่นแบบจำลอง (ด้วยเงินปลอม) บน Meta Trader 4 แพลตฟอร์มการซื้อขาย
หลังจากหนึ่งสัปดาห์ของการ 'ซื้อขาย' ฉันได้เงินเพิ่มขึ้นเกือบสองเท่า ด้วยการซื้อขายอัลกอริธึมที่ประสบความสำเร็จของฉันเองฉันจึงขุดลึกลงไปและในที่สุดก็ลงทะเบียนฟอรัม FX จำนวนมาก ในไม่ช้าฉันใช้เวลาหลายชั่วโมงในการอ่านเกี่ยวกับระบบการซื้อขายแบบอัลกอริทึม (ชุดกฎที่กำหนดว่าคุณควรซื้อหรือขาย) ตัวบ่งชี้ที่กำหนดเอง อารมณ์ของตลาดและอื่น ๆ
รอบนี้บังเอิญฉันได้ยินมาว่ามีคนพยายามหานักพัฒนาซอฟต์แวร์เพื่อสร้างระบบการซื้อขายที่เรียบง่ายโดยอัตโนมัติ สิ่งนี้ย้อนกลับไปในสมัยเรียนมหาวิทยาลัยของฉันเมื่อฉันเรียนรู้เกี่ยวกับ การเขียนโปรแกรมพร้อมกัน ใน Java (เธรดเซมาโฟเรสและขยะทั้งหมดนั้น) ฉันคิดว่าระบบอัตโนมัตินี้ไม่ได้ซับซ้อนไปกว่าฉัน วิทยาศาสตร์ข้อมูลขั้นสูง งานหลักสูตรดังนั้นฉันจึงสอบถามเกี่ยวกับงานและมาขึ้นเรือ
ลูกค้าต้องการซอฟต์แวร์การซื้อขายอัลกอริทึมที่สร้างขึ้นด้วย MQL4 ซึ่งเป็นภาษาการเขียนโปรแกรมเชิงฟังก์ชันที่ใช้โดยแพลตฟอร์ม Meta Trader 4 สำหรับการดำเนินการเกี่ยวกับหุ้น
บทบาทของแพลตฟอร์มการซื้อขาย (Meta Trader 4 ในกรณีนี้) คือการเชื่อมต่อกับโบรกเกอร์ Forex จากนั้นนายหน้าจะจัดหาแพลตฟอร์มที่มีข้อมูลแบบเรียลไทม์เกี่ยวกับตลาดและดำเนินการตามคำสั่งซื้อ / ขายของคุณ สำหรับผู้อ่านที่ไม่คุ้นเคยกับการซื้อขาย Forex นี่คือข้อมูลที่จัดเตรียมโดยฟีดข้อมูล:
ผ่าน Meta Trader 4 คุณสามารถเข้าถึงข้อมูลทั้งหมดนี้ด้วยฟังก์ชันภายในซึ่งสามารถเข้าถึงได้ในกรอบเวลาต่างๆ: ทุกนาที (M1) ทุกๆห้านาที (M5), M15, M30, ทุกชั่วโมง (H1), H4, D1, W1, MN .
การเคลื่อนไหวของราคาปัจจุบันเรียกว่า a ติ๊ก . กล่าวอีกนัยหนึ่งติ๊กคือการเปลี่ยนแปลงราคา Bid หรือ Ask สำหรับคู่สกุลเงิน ในช่วงตลาดที่มีการซื้อขายอาจมีเห็บจำนวนมากต่อวินาที ในช่วงตลาดชะลอตัวอาจมีนาทีโดยไม่ต้องติ๊ก เห็บคือการเต้นของหัวใจของหุ่นยนต์ตลาดเงินตรา
เมื่อคุณสั่งซื้อผ่านแพลตฟอร์มดังกล่าวคุณ ซื้อ หรือ ขาย ปริมาณหนึ่งของสกุลเงินหนึ่ง ๆ นอกจากนี้คุณยังตั้งค่าขีด จำกัด การหยุดขาดทุนและการทำกำไร ขีด จำกัด หยุดการสูญเสีย คือจำนวนเงินสูงสุด pips (รูปแบบราคา) ที่คุณสามารถเสียได้ก่อนที่จะยอมแพ้ในการซื้อขาย ขีด จำกัด การทำกำไร คือจำนวน pip ที่คุณจะสะสมไว้ในความโปรดปรานของคุณก่อนที่จะถอนออก
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับพื้นฐานของการซื้อขาย (เช่น pip ประเภทคำสั่งสเปรด Slippage คำสั่งซื้อในตลาดและอื่น ๆ ) โปรดดูที่ ที่นี่ .ข้อกำหนดการซื้อขายอัลกอริทึมของลูกค้านั้นเรียบง่าย: พวกเขาต้องการหุ่นยนต์ Forex โดยใช้ตัวบ่งชี้สองตัว สำหรับพื้นหลังตัวบ่งชี้คือ มาก มีประโยชน์เมื่อพยายามกำหนดสถานะของตลาดและทำการตัดสินใจในการซื้อขายเนื่องจากอิงจากข้อมูลในอดีต (เช่นมูลค่าราคาสูงสุดในช่วงสุดท้าย n วัน) หลายตัวมาใน Meta Trader 4 อย่างไรก็ตามตัวบ่งชี้ที่ลูกค้าของฉันสนใจมาจากระบบการซื้อขายที่กำหนดเอง
พวกเขาต้องการซื้อขายทุกครั้งที่สองตัวบ่งชี้ที่กำหนดเองเหล่านี้ตัดกันและในมุมหนึ่งเท่านั้น
เมื่อมือของฉันสกปรกฉันได้เรียนรู้ว่าโปรแกรม MQL4 มีโครงสร้างดังต่อไปนี้:
ฟังก์ชันเริ่มต้นเป็นหัวใจสำคัญของทุกโปรแกรม MQL4 เนื่องจากมีการดำเนินการทุกครั้งที่มีการเคลื่อนไหวของตลาด (ergo ฟังก์ชันนี้จะทำงานหนึ่งครั้งต่อหนึ่งขีด) เป็นกรณีนี้ไม่ว่าคุณจะใช้กรอบเวลาใดก็ตาม ตัวอย่างเช่นคุณอาจใช้งานในกรอบเวลา H1 (หนึ่งชั่วโมง) แต่ฟังก์ชันเริ่มต้นจะทำงานหลายพันครั้งต่อกรอบเวลา
ในการแก้ไขปัญหานี้ฉันบังคับให้ฟังก์ชันดำเนินการหนึ่งครั้งต่อหน่วยช่วงเวลา:
int start() { if(currentTimeStamp == Time[0]) return (0); currentTimeStamp = Time[0]; ...
การรับค่าของตัวบ่งชี้:
// Loading the custom indicator extern string indName = 'SonicR Solid Dragon-Trend (White)'; double dragon_min; double dragon_max; double dragon; double trend; int start() { … // Updating the variables that hold indicator values actInfoIndicadores(); …. string actInfoIndicadores() { dragon_max=iCustom(NULL, 0, indName, 0, 1); dragon_min=iCustom(NULL, 0, indName, 1, 1); dragon=iCustom(NULL, 0, indName, 4, 1); trend=iCustom(NULL, 0, indName, 5, 1); }
ตรรกะการตัดสินใจรวมถึงจุดตัดของตัวบ่งชี้และมุมของพวกเขา:
int start() { … if(ticket==0) { if (dragon_min > trend && (ordAbierta== 'OP_SELL' || primeraOP == true) && anguloCorrecto('BUY') == true && DiffPrecioActual('BUY')== true ) { primeraOP = false; abrirOrden('OP_BUY', false); } if (dragon_max 0) { ticket=0; return(0); } } else Print('OrderSelect failed error code is',GetLastError()); if (ordAbierta == 'OP_BUY' && dragon_min = trend ) cerrarOrden(false); } }
การส่งคำสั่งซื้อ:
void abrirOrden(string tipoOrden, bool log) { RefreshRates(); double volumen = AccountBalance() * point; double pip = point * pipAPer; double ticket = 0; while( ticket <= 0) { if (tipoOrden == 'OP_BUY') ticket=OrderSend(simbolo, OP_BUY, volumen, Ask, 3, 0/*Bid - (point * 100)*/, Ask + (point * 50), 'Orden Buy' , 16384, 0, Green); if (tipoOrden == 'OP_SELL') ticket=OrderSend(simbolo, OP_SELL, volumen, Bid, 3, 0/*Ask + (point * 100)*/, Bid - (point * 50), 'Orden Sell', 16385, 0, Red); if (ticket<=0) Print('Error abriendo orden de ', tipoOrden , ' : ', ErrorDescription( GetLastError() ) ); } ordAbierta = tipoOrden; if (log==true) mostrarOrden(); }
หากคุณสนใจคุณสามารถค้นหาโค้ดที่สมบูรณ์และรันได้บน GitHub .
เมื่อฉันสร้างระบบการซื้อขายแบบอัลกอริธึมของฉันฉันต้องการทราบว่า: 1) ว่ามันทำงานอย่างเหมาะสมหรือไม่และ 2) ว่ากลยุทธ์การซื้อขาย Forex ที่ใช้นั้นดีหรือไม่
การทดสอบย้อนหลัง (บางครั้งเขียนว่า 'back-testing') เป็นกระบวนการทดสอบระบบเฉพาะ (อัตโนมัติหรือไม่) ภายใต้เหตุการณ์ในอดีต กล่าวอีกนัยหนึ่งคือคุณทดสอบระบบของคุณโดยใช้อดีตเป็นพร็อกซีสำหรับปัจจุบัน
MT4 มาพร้อมกับเครื่องมือที่ยอมรับได้สำหรับการทดสอบกลยุทธ์การซื้อขาย Forex ย้อนหลัง (ปัจจุบันมีเครื่องมือระดับมืออาชีพมากขึ้นที่ให้ฟังก์ชันการทำงานที่หลากหลายมากขึ้น) ในการเริ่มต้นคุณตั้งค่ากรอบเวลาและเรียกใช้โปรแกรมของคุณภายใต้การจำลอง เครื่องมือจะจำลองแต่ละเห็บโดยรู้ว่าสำหรับแต่ละหน่วยควรเปิดในราคาที่กำหนดปิดที่ราคาหนึ่งและถึงจุดสูงสุดและต่ำที่กำหนด
หลังจากเปรียบเทียบการดำเนินการของโปรแกรมกับราคาที่ผ่านมาคุณจะมีความรู้สึกที่ดีว่าดำเนินการอย่างถูกต้องหรือไม่
ตัวชี้วัดที่เขาเลือกพร้อมกับตรรกะในการตัดสินใจนั้นไม่ได้ผลกำไรจากการทดสอบย้อนหลังฉันจะตรวจสอบอัตราส่วนผลตอบแทนของหุ่นยนต์ FX สำหรับช่วงเวลาแบบสุ่มบางช่วง ไม่จำเป็นต้องพูดฉันรู้ว่าลูกค้าของฉันจะไม่ร่ำรวยด้วย - ตัวชี้วัดที่เขาเลือกพร้อมกับตรรกะในการตัดสินใจนั้นไม่ได้ผลกำไร . ตัวอย่างนี่คือผลลัพธ์ของการรันโปรแกรมบนหน้าต่าง M15 สำหรับ 164 การดำเนินการ:
หลักการเกสตัลต์ของฟิกเกอร์กราวด์
โปรดทราบว่ายอดคงเหลือของเรา (เส้นสีน้ำเงิน) จะสิ้นสุดต่ำกว่าจุดเริ่มต้น
ข้อแม้ประการหนึ่ง: การบอกว่าระบบ 'ทำกำไร' หรือ 'ไม่ได้ประโยชน์' ไม่ใช่ของแท้เสมอไป บ่อยครั้งที่ระบบ (ยกเลิก) ทำกำไรได้ในช่วงเวลาหนึ่งตาม 'อารมณ์' ของตลาดซึ่งสามารถทำตามรูปแบบแผนภูมิได้หลายแบบ:
แม้ว่าการทดสอบย้อนหลังจะทำให้ฉันระมัดระวังถึงประโยชน์ของหุ่นยนต์ FX นี้ ฉันรู้สึกทึ่งเมื่อเริ่มเล่นกับพารามิเตอร์ภายนอกของมันและสังเกตเห็นความแตกต่างอย่างมากในอัตราส่วนผลตอบแทนโดยรวม วิทยาศาสตร์เฉพาะนี้เรียกว่า การเพิ่มประสิทธิภาพพารามิเตอร์ .
ฉันทำการทดสอบคร่าวๆเพื่อทดลองและสรุปความสำคัญของพารามิเตอร์ภายนอกใน Return Ratio และได้ผลลัพธ์ดังนี้:
หรือทำความสะอาด:
คุณอาจคิด (เหมือนที่ฉันเคยทำ) ว่าคุณควรใช้พารามิเตอร์ A แต่การตัดสินใจนั้นไม่ตรงไปตรงมาอย่างที่คิด โดยเฉพาะให้สังเกตไฟล์ คาดเดาไม่ได้ ของพารามิเตอร์ A: สำหรับค่าความผิดพลาดเล็กน้อยผลตอบแทนจะเปลี่ยนแปลงไปอย่างมาก กล่าวอีกนัยหนึ่งพารามิเตอร์ A มีแนวโน้มที่จะทำนายผลลัพธ์ในอนาคตมากเกินไปเนื่องจากมีความไม่แน่นอนการเปลี่ยนแปลงใด ๆ เลยจะส่งผลให้ประสิทธิภาพแย่ลง
แต่อนาคตไม่แน่นอน! ดังนั้นการกลับมาของพารามิเตอร์ A ก็ไม่แน่นอนเช่นกัน ทางเลือกที่ดีที่สุดในความเป็นจริงคือการพึ่งพาการคาดเดาไม่ได้ บ่อยครั้งพารามิเตอร์ที่มีผลตอบแทนสูงสุดต่ำกว่า แต่ความสามารถในการคาดการณ์ที่เหนือกว่า (ความผันผวนน้อยกว่า) จะดีกว่ากับพารามิเตอร์ที่มีผลตอบแทนสูง แต่คาดการณ์ได้ไม่ดี
สิ่งเดียวที่คุณมั่นใจได้คือคุณไม่รู้อนาคตของตลาดและ การคิดว่าคุณรู้ว่าตลาดจะดำเนินการอย่างไรจากข้อมูลในอดีตเป็นความผิดพลาด ในทางกลับกันคุณต้องยอมรับความไม่แน่นอนนี้ในการคาดการณ์ Forex ของคุณ
การคิดว่าคุณรู้ว่าตลาดจะดำเนินการอย่างไรจากข้อมูลในอดีตเป็นความผิดพลาดนี่ไม่ได้หมายความว่าเราควรใช้พารามิเตอร์ B เพราะแม้ผลตอบแทนที่ต่ำกว่าของพารามิเตอร์ A จะทำงานได้ดีกว่าพารามิเตอร์ B นี่เป็นเพียงการแสดงให้คุณเห็นว่าการเพิ่มประสิทธิภาพพารามิเตอร์สามารถส่งผลให้เกิดการทดสอบที่เกินจริงถึงผลลัพธ์ในอนาคตและความคิดดังกล่าวไม่ชัดเจน
นับตั้งแต่ประสบการณ์การซื้อขาย Forex แบบอัลกอริทึมครั้งแรกฉันได้สร้างระบบการซื้อขายอัตโนมัติหลายระบบสำหรับลูกค้าและฉันสามารถบอกคุณได้ว่ามีพื้นที่ให้สำรวจและวิเคราะห์ Forex เพิ่มเติมได้เสมอ ตัวอย่างเช่นฉันเพิ่งสร้างระบบจากการค้นหาการเคลื่อนไหวที่เรียกว่า 'Big Fish'; นั่นคือรูปแบบของ pip ขนาดใหญ่ในหน่วยเวลาเล็ก ๆ น้อย ๆ นี่เป็นเรื่องที่ทำให้ฉันทึ่ง
การสร้างระบบจำลอง FX ของคุณเองเป็นตัวเลือกที่ยอดเยี่ยมในการเรียนรู้เพิ่มเติมเกี่ยวกับการซื้อขายในตลาด Forex และความเป็นไปได้นั้นไม่มีที่สิ้นสุด ตัวอย่างเช่นคุณสามารถลองถอดรหัสการกระจายความน่าจะเป็นของรูปแบบราคาที่เป็นฟังก์ชันของความผันผวนในตลาดหนึ่ง (เช่น EUR / USD) และอาจสร้างแบบจำลองมอนติคาร์โลโดยใช้การกระจายต่อสถานะความผันผวนโดยใช้ระดับใดก็ได้ ความแม่นยำที่คุณต้องการ ฉันจะปล่อยให้เป็นแบบฝึกหัดสำหรับ กระตือรือร้น ผู้อ่าน
ในบางครั้งโลกของ Forex อาจท่วมท้น แต่ฉันหวังว่าบทความนี้จะช่วยให้คุณทราบถึงวิธีการเริ่มต้นกลยุทธ์การซื้อขาย Forex ของคุณเอง
ปัจจุบันมีเครื่องมือมากมายในการสร้างทดสอบและปรับปรุงระบบการซื้อขายอัตโนมัติ: ซื้อขาย Blox สำหรับการทดสอบ NinjaTrader สำหรับการซื้อขาย OCaml สำหรับการเขียนโปรแกรมเพื่อชื่อไม่กี่
ฉันได้อ่านมามากมายเกี่ยวกับโลกลึกลับที่เป็นตลาดสกุลเงิน นี่คือบทความบางส่วนที่ฉันแนะนำสำหรับโปรแกรมเมอร์และผู้อ่านที่กระตือรือร้น:
การซื้อขาย Forex (หรือ FX) คือการซื้อและขายผ่านคู่สกุลเงิน (เช่น USD เทียบกับ EUR) ในตลาดแลกเปลี่ยนเงินตราต่างประเทศ
โบรกเกอร์ Forex สร้างรายได้ผ่านค่าคอมมิชชั่นและค่าธรรมเนียม ผู้ค้า Forex ทำเงินได้ (หรือเสีย) ตามเวลา: หากพวกเขาสามารถขายได้สูงพอเมื่อเทียบกับตอนที่ซื้อพวกเขาสามารถทำกำไรได้
Backtesting คือกระบวนการทดสอบกลยุทธ์หรือระบบโดยใช้เหตุการณ์ในอดีต
การซื้อขายแบบอัลกอริทึมคือการที่หุ่นยนต์ / โปรแกรมใช้ชุดของกฎที่บอกว่าเมื่อใดควรซื้อหรือขาย