ผู้เขียน: gpwr
ประวัติของเวอร์ชัน:
26/06/2009 - เพิ่มตัวบ่งชี้ใหม่ BPNN Predictor with Smoothing.mq4 ซึ่งทำการเรียบเรียงราคาด้วย EMA ก่อนการทำนาย
20/08/2009 - แก้ไขโค้ดที่คำนวณฟังก์ชันการกระตุ้นของนิวรอนเพื่อป้องกันข้อผิดพลาดทางคณิตศาสตร์; อัปเดต BPNN.cpp และ BPNN.dll
21/08/2009 - เพิ่มการล้างหน่วยความจำเมื่อสิ้นสุดการทำงานของ DLL; อัปเดต BPNN.cpp และ BPNN.dll
ทฤษฎีเบื้องต้นเกี่ยวกับ Neural Networks:
Neural network เป็นโมเดลที่ปรับได้ของผลลัพธ์ซึ่งเป็นฟังก์ชันของข้อมูลนำเข้า มีหลาย ชั้น ดังนี้:
- ชั้นนำเข้า ซึ่งประกอบด้วยข้อมูลนำเข้า
- ชั้นซ่อน ซึ่งประกอบด้วยโหนดที่ใช้ในการประมวลผลเรียกว่า นิวรอน
- ชั้นผลลัพธ์ ซึ่งประกอบด้วยนิวรอนหนึ่งหรือหลายตัว ที่ผลลัพธ์ของมันคือผลลัพธ์ของเครือข่าย
โหนดทั้งหมดในชั้นที่อยู่ติดกันจะเชื่อมต่อกัน การเชื่อมต่อเหล่านี้เรียกว่า ซีนาพส์ โดยแต่ละซีนาพส์จะมีค่าความแข็งแรงที่กำหนด ซึ่งใช้ในการคูณข้อมูลที่ส่งผ่านซีนาพส์นั้น ค่าความแข็งแรงเหล่านี้เรียกว่า น้ำหนัก (w[i][j][k]) ใน Feed-Forward Neural Network (FFNN) ข้อมูลจะถูกส่งจากชั้นนำเข้าสู่ชั้นผลลัพธ์ ตัวอย่างของ FFNN ที่มีชั้นนำเข้า หนึ่งชั้นผลลัพธ์ และสองชั้นซ่อน:

โครงสร้างของ FFNN มักย่อว่า <จำนวนข้อมูลนำเข้า> - <จำนวนของนิวรอนในชั้นซ่อนแรก> - <จำนวนของนิวรอนในชั้นซ่อนที่สอง> -...- <จำนวนของผลลัพธ์> ตัวอย่างเครือข่ายข้างต้นสามารถเรียกว่าเครือข่าย 4-3-3-1
ข้อมูลจะถูกประมวลผลโดยนิวรอนในสองขั้นตอน แสดงในวงกลมโดยเครื่องหมายการบวกและเครื่องหมายขั้นตอน:
- ข้อมูลนำเข้าทั้งหมดจะถูกคูณด้วยน้ำหนักที่เกี่ยวข้องและรวมกัน
- ผลรวมที่ได้จะถูกประมวลผลผ่าน ฟังก์ชันการกระตุ้น ของนิวรอน ซึ่งผลลัพธ์คือผลลัพธ์ของนิวรอน
ฟังก์ชันการกระตุ้นของนิวรอนคือเหตุผลที่ทำให้โมเดล Neural Network มีความไม่เป็นเชิงเส้น หากไม่มีฟังก์ชันนี้ ชั้นซ่อนจะไม่มีความจำเป็น และ Neural Network จะกลายเป็นโมเดลเชิงเส้น (AR) เท่านั้น
ไลบรารีไฟล์ที่แนบมาสำหรับฟังก์ชัน NN อนุญาตให้เลือกได้ระหว่างสามฟังก์ชันการกระตุ้น:
- sigmoid sigm(x)=1/(1+exp(-x)) (#0)
- hyperbolic tangent tanh(x)=(1-exp(-2x))/(1+exp(-2x)) (#1)
- rational function x/(1+|x|) (#2)

ค่าตั้งต้นของฟังก์ชันเหล่านี้คือ x=0 ค่าตั้งต้นนี้สามารถย้ายไปตามแกน x ได้ด้วยข้อมูลนำเข้าสำหรับนิวรอนแต่ละตัว เรียกว่า bias input ซึ่งมีน้ำหนักที่กำหนดให้ด้วย
จำนวนข้อมูลนำเข้า ผลลัพธ์ ชั้นซ่อน นิวรอนในชั้นเหล่านี้ และค่าน้ำหนักซีนาพส์จะบรรยายถึง FFNN ได้อย่างสมบูรณ์ กล่าวคือ โมเดลที่ไม่เป็นเชิงเส้นที่สร้างขึ้น สำหรับการค้นหาน้ำหนัก เครือข่ายต้องได้รับการฝึกอบรม ในระหว่าง การฝึกอบรมแบบมีผู้ควบคุม จะต้องส่งข้อมูลนำเข้าในอดีตและผลลัพธ์ที่คาดหวังไปยังเครือข่าย น้ำหนักจะถูกปรับให้เหมาะสมเพื่อให้มีความผิดพลาดน้อยที่สุดระหว่างผลลัพธ์ของเครือข่ายและผลลัพธ์ที่คาดหวัง วิธีที่ง่ายที่สุดในการปรับน้ำหนักคือ การย้อนกลับของความผิดพลาด ซึ่งเป็นวิธีการลดเกรด ฟังก์ชันการฝึกอบรมที่แนบมา Train() ใช้เวอร์ชันของวิธีนี้ เรียกว่า Improved Resilient back-Propagation Plus (iRProp+)
ไฟล์ที่แนบ:
- BPNN.dll - ไฟล์ไลบรารี
- BPNN.zip - แฟ้มบีบอัดที่มีไฟล์ทั้งหมดที่จำเป็นในการคอมไพล์ BPNN.dll ใน C++
- BPNN Predictor.mq4 - ตัวบ่งชี้ที่ทำนายราคาเปิดในอนาคต
- BPNN Predictor with Smoothing.mq4 - ตัวบ่งชี้ที่ทำนายราคาเปิดที่เรียบเรียงแล้ว
ไฟล์ BPNN.cpp มีฟังก์ชันสองฟังก์ชัน: Train() และ Test().
ฟังก์ชัน Train() ใช้ในการฝึกอบรมเครือข่ายตามค่าข้อมูลนำเข้าในอดีตและค่าผลลัพธ์ที่คาดหวัง ฟังก์ชัน Test() ใช้ในการคำนวณผลลัพธ์ของเครือข่ายโดยใช้ค่าน้ำหนักที่ปรับให้เหมาะสมที่ได้จากฟังก์ชัน Train()
ตัวอย่างการใช้งานไลบรารี NN:
BPNN Predictor.mq4 - ทำนายราคาเปิดในอนาคต โดยข้อมูลนำเข้าสำหรับเครือข่ายคือการเปลี่ยนแปลงราคาสัมพัทธ์:
x[i]=Open[test_bar]/Open[test_bar+delay[i]]-1.0
โดยที่ delay[i] คำนวณเป็นเลขฟีโบนัชชี (1,2,3,5,8,13,21..). ผลลัพธ์ของเครือข่ายคือการเปลี่ยนแปลงสัมพัทธ์ของราคาถัดไป ฟังก์ชันการกระตุ้นจะถูกปิดในชั้นผลลัพธ์ (OAF=0).
การตั้งค่า:
- คัดลอก BPNN.DLL ไปยัง C:\Program Files\MetaTrader 4\experts\libraries
- ใน MetaTrader: Tools - Options - Expert Advisors - Allow DLL imports
คำแนะนำ:
- เครือข่ายที่มีสามชั้น (numLayers=3: หนึ่งชั้นนำเข้า หนึ่งชั้นซ่อน และหนึ่งชั้นผลลัพธ์) เป็นสิ่งที่เพียงพอสำหรับกรณีส่วนใหญ่
- จำนวนของนิวรอนในชั้นซ่อนสามารถหาจากการทดลองและข้อผิดพลาด
- สำหรับการทั่วไป จำนวนชุดการฝึกอบรม (ntr) ควรเลือก 2-5 เท่าของจำนวนทั้งหมดของน้ำหนักในเครือข่าย
- ข้อมูลนำเข้าสำหรับเครือข่ายควรได้รับการแปลงให้เป็นสถานะคงที่
โชคดีนะ!
โพสต์ที่เกี่ยวข้อง
- เครื่องมือ Open Range Breakout สำหรับ MetaTrader 5
- เครื่องมือ Master Tools - อินดิเคเตอร์สำหรับ MetaTrader 4
- FX Multi-Meter II: เครื่องมือช่วยเทรดที่ครบครันสำหรับนักลงทุน
- Volume Profile + Range v6.0: เครื่องมือวิเคราะห์การซื้อขายใน MetaTrader 5
- Condition Scanner: เครื่องมือวิเคราะห์อัตโนมัติสำหรับ MetaTrader 4