การแจ้งเตือน
ลบทั้งหมด

Machine Learning Overview EP2

1 กระทู้
1 ผู้ใช้
0 Reactions
40 เข้าชม
James Albert
(@james-albert)
สมาชิก
Rank F
เข้าร่วม: 6 เดือน ที่ผ่านมา
กระทู้: 128
หัวข้อเริ่มต้น  
  1. หลักการทำงานของ Support Vector Machines (SVM) และการนำไปใช้งานจริง

หลักการของ SVM: SVM เป็นหนึ่งในอัลกอริธึม Machine Learning ที่ใช้สำหรับงาน Classification และ Regression โดยมีหลักการสำคัญคือการหาขอบเขต (Decision Boundary) ที่ดีที่สุดในการแยกข้อมูลออกจากกัน หรือหาความสัมพันธ์ของข้อมูลในรูปแบบที่เหมาะสมที่สุดสำหรับการทำนายข้อมูลเชิงต่อเนื่อง

การทำงานของ SVM:

  1. Hyperplane: SVM สร้างเส้น (สำหรับ 2 มิติ) หรือระนาบ (สำหรับหลายมิติ) ที่แยกข้อมูลออกเป็นกลุ่มอย่างเหมาะสม
  2. Support Vectors: ข้อมูลที่อยู่ใกล้กับ Hyperplane มากที่สุด ซึ่งใช้เป็นตัวกำหนดตำแหน่งของ Hyperplane
  3. Kernel Trick: สำหรับข้อมูลที่ไม่สามารถแยกกันได้ในมิติเดิม SVM ใช้ Kernel Function (เช่น Linear, Polynomial, Gaussian RBF) เพื่อเปลี่ยนข้อมูลไปในมิติที่สูงขึ้นและแยกได้ง่ายกว่า
  4. Optimization Problem: SVM จะพยายามเพิ่ม Margin หรือระยะห่างระหว่างข้อมูลสองกลุ่มให้มากที่สุด

การนำไปใช้งานจริง:

  • สำหรับงานด้านการเงิน: SVM ถูกใช้ในงานวิเคราะห์แนวโน้มราคาหุ้น อัตราแลกเปลี่ยน หรือการพยากรณ์ข้อมูลราคาในอนาคต
  • กระบวนการทั่วไป:
    • เก็บข้อมูลราคาในอดีต (Historical Data)
    • แปลงข้อมูลให้อยู่ในรูปที่เหมาะสม เช่น การสร้าง Features เช่น EMA, RSI, MACD
    • แบ่งข้อมูลเป็น Training และ Testing Set
    • ใช้ SVM ในการเรียนรู้ข้อมูล Training และตรวจสอบผลลัพธ์ด้วย Testing
    • นำโมเดลไปใช้พยากรณ์ในอนาคต (Forecasting)

 

  1. Code MQL4 สำหรับ EA ด้วยอัลกอริธึม SVM

การเขียน SVM ใน MQL4 ค่อนข้างท้าทาย เนื่องจาก MQL4 ไม่มีไลบรารี Machine Learning โดยตรง เราจะต้อง:

  1. นำโมเดล SVM ที่ผ่านการเทรน (Training) มาใช้ใน MQL4
  2. แปลงโมเดลที่เทรนไว้ให้อยู่ในรูปคณิตศาสตร์ เช่น Hyperplane และ Weight Coefficients

 

ตัวอย่างด้านล่างนี้จะแสดงโค้ดพื้นฐานที่ใช้การคำนวณ SVM ในการทำนายแนวโน้มราคา:

Code MQL4: SVM EA

 

//+------------------------------------------------------------------+

//|                                                                @ML SVM.mq4 |

//|                                                           Thana Supamanop |

//|                                                      https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Thana Supamanop"

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   Print("SVM Expert Advisor Initialized");

   return(INIT_SUCCEEDED);

  }

 

//+------------------------------------------------------------------+

//| Expert tick function                                                          |

//+------------------------------------------------------------------+

void OnTick()

  {

   double closePrice = iClose(NULL, 0, 1);  // ราคาปิดล่าสุด

   double features[];                       // Feature ที่ต้องใช้

   double prediction;                       // ผลลัพธ์ที่คาดการณ์

  

   // สร้าง Features (ตัวอย่างเช่น RSI และ EMA)

   ArrayResize(features, 2);

   features[0] = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);

   features[1] = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 1);

  

   // เรียกฟังก์ชัน SVM เพื่อตัดสินใจ

   prediction = SVM_Predict(features);

  

  // ตัดสินใจซื้อหรือขาย

if (prediction > 0)

{

   // สัญญาณซื้อ

   if (OrdersTotal()==0) // ไม่มีออเดอร์เปิดอยู่

   {

      int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "SVM Buy", 0, 0, Blue);

      if (ticket < 0) // ตรวจสอบว่า OrderSend ส่งคำสั่งสำเร็จหรือไม่

      {

         Print("Error opening buy order: ", GetLastError());

      }

      else

      {

         Print("Buy order opened successfully. Ticket: ", ticket);

      }

   }

}

else if (prediction < 0)

{

   // สัญญาณขาย

   if (OrdersTotal()==0) // ไม่มีออเดอร์เปิดอยู่

   {

      int ticket = OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "SVM Sell", 0, 0, Red);

      if (ticket < 0) // ตรวจสอบว่า OrderSend ส่งคำสั่งสำเร็จหรือไม่

      {

         Print("Error opening sell order: ", GetLastError());

      }

      else

      {

         Print("Sell order opened successfully. Ticket: ", ticket);

      }

   }

}

 

 

  }

 

//+------------------------------------------------------------------+

//| SVM Prediction Function                                                   |

//+------------------------------------------------------------------+

double SVM_Predict(double &features[])

  {

   // ค่า Weights และ Bias ที่ได้จากการเทรนโมเดล SVM

   double weights[] = {0.3, -0.5};  // ตัวอย่างน้ำหนักจากโมเดล

   double bias = 0.2;               // Bias ที่ได้จากโมเดล

   double result = 0.0;

  

   // คำนวณผลลัพธ์จากสมการ SVM

   for (int i = 0; i < ArraySize(features); i++)

      result += features[i] * weights[i];

   result += bias;

  

   // แปลงเป็น -1 หรือ 1 (Threshold = 0)

   if (result >= 0)

      return(1);   // แนวโน้มขึ้น

   else

      return(-1);  // แนวโน้มลง

  }

 

//+------------------------------------------------------------------+

 

คำอธิบายโค้ด:

  1. OnInit: ฟังก์ชันนี้เริ่มต้นการทำงานของ EA
  2. OnTick: ฟังก์ชันนี้ทำงานทุกครั้งที่มีการเปลี่ยนแปลงราคา
    • ดึงข้อมูล Feature (เช่น RSI และ EMA)
    • เรียกฟังก์ชัน SVM_Predict เพื่อคำนวณแนวโน้มราคา
    • เปิดคำสั่งซื้อ (BUY) หรือขาย (SELL) ตามผลลัพธ์
  3. SVM_Predict: ฟังก์ชันนี้คำนวณผลลัพธ์ SVM จากน้ำหนัก (Weights) และ Bias ที่ได้จากการเทรนโมเดล
  4. OrderSend: ใช้ส่งคำสั่งซื้อขายเมื่อได้รับสัญญาณจาก SVM

วิธีการใช้งาน:

  1. นำโค้ดไปวางใน MetaEditor (MQL4 IDE) และบันทึกเป็นไฟล์ .mq4
  2. คอมไพล์ไฟล์และติดตั้ง EA ใน MetaTrader 4
  3. เปิดใช้งาน EA บนกราฟ โดยตั้งค่าช่วงเวลา (Timeframe) และเงินทุนตามความเหมาะสม
  4. ตรวจสอบผลการเทรดใน Strategy Tester เพื่อปรับแต่งโมเดล SVM หรือค่าพารามิเตอร์

ข้อสังเกต:

  • การเทรน SVM: ควรเทรนโมเดลใน Python หรือ R และนำค่า Weights/Bias มาปรับใน MQL4
  • การสร้าง Features: เพิ่ม Feature อื่น ๆ เพื่อเพิ่มความแม่นยำ เช่น MACD, Volume
  • การปรับแต่ง: ปรับแต่งค่าพารามิเตอร์ เช่น Period ของ RSI หรือ EMA ให้เหมาะสมกับตลาด

 

 

 

 

 

 

 

 

 


   
อ้างอิง

ทิ้งคำตอบไว้

ชื่อผู้แต่ง

อีเมลผู้เขียน

ตำแหน่ง *

You are not allowed to attach files on this forum. It is possible that you have not reached the minimum required number of posts, or your user group does not have permission to attach files in this forum.
 
ดูตัวอย่าง แก้ไข 0 ครั้ง บันทึกแล้ว
แบ่งปัน: