หน้าแรก ตัวชี้วัดทางเทคนิค โพสต์

การใช้ Neural Network เพื่อทำนายราคาในตลาด Forex

ไฟล์แนบ
9002.zip (58.14 KB, ดาวน์โหลด 0 ครั้ง)

ผู้เขียน: 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

ข้อมูลจะถูกประมวลผลโดยนิวรอนในสองขั้นตอน แสดงในวงกลมโดยเครื่องหมายการบวกและเครื่องหมายขั้นตอน:

  1. ข้อมูลนำเข้าทั้งหมดจะถูกคูณด้วยน้ำหนักที่เกี่ยวข้องและรวมกัน
  2. ผลรวมที่ได้จะถูกประมวลผลผ่าน ฟังก์ชันการกระตุ้น ของนิวรอน ซึ่งผลลัพธ์คือผลลัพธ์ของนิวรอน

ฟังก์ชันการกระตุ้นของนิวรอนคือเหตุผลที่ทำให้โมเดล 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 เท่าของจำนวนทั้งหมดของน้ำหนักในเครือข่าย
  • ข้อมูลนำเข้าสำหรับเครือข่ายควรได้รับการแปลงให้เป็นสถานะคงที่

โชคดีนะ!

โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)