Machines Learning Overview EP3 (สุดท้าย)
- ความหมายของอัลกอริทึมอนุกรม Fourier
อนุกรม Fourier (Fourier Series) เป็นเครื่องมือทางคณิตศาสตร์ที่ใช้วิเคราะห์ฟังก์ชันที่เป็นแบบต่อเนื่องหรือเป็นคาบ (Periodic Function) โดยแบ่งออกเป็นส่วนประกอบย่อยที่เรียกว่า ไซน์ (Sine) และ โคไซน์ (Cosine) ที่มีความถี่ต่าง ๆ กัน การวิเคราะห์นี้มีจุดเด่นที่ช่วยแปลงสัญญาณในโดเมนเวลา (Time Domain) ให้กลายเป็นโดเมนความถี่ (Frequency Domain)สำหรับการประยุกต์ใช้งานด้านการวิเคราะห์แนวโน้มและทิศทางราคาในตลาดการเงิน เช่น Forex หรือหุ้น อนุกรม Fourier ช่วยในการสกัดข้อมูลสำคัญ เช่น รูปแบบการเคลื่อนไหวที่เป็นคาบ (Cyclic Behavior) และแนวโน้ม (Trends) จากข้อมูลราคา โดยไม่พึ่งพา Machine Learning
- อัลกอริทึมอนุกรม Fourier สามารถนำไปใช้ประโยชน์อะไรได้บ้าง
การใช้งานและประโยชน์:
- วิเคราะห์แนวโน้มราคาในตลาดการเงิน:
- สามารถสกัดแนวโน้ม (Trend) หรือรูปแบบการเคลื่อนไหวของราคาออกมาได้ เช่น การหาความถี่ที่สำคัญในชุดข้อมูลราคาเพื่อทำนายทิศทางในอนาคต
- ตัวอย่าง: ใช้อนุกรม Fourier ในการลดสัญญาณรบกวน (Noise) จากราคาหุ้นและแสดงเฉพาะแนวโน้มหลัก
- การลดสัญญาณรบกวน (Noise Filtering):
- Fourier Series สามารถกรองเอาสัญญาณที่ไม่ต้องการ (เช่น ความผันผวนระยะสั้น) และคงไว้เฉพาะสัญญาณสำคัญที่มีความหมายต่อการวิเคราะห์
- การวิเคราะห์รอบคาบ (Cyclic Analysis):
- ใช้ Fourier Transform เพื่อวิเคราะห์ความถี่ (Frequency) ของคาบที่เกิดขึ้นในราคาสินทรัพย์ เช่น คาบรายวัน รายเดือน หรือรายสัปดาห์
- การสร้างดัชนีวิเคราะห์เพิ่มเติม (Custom Indicators):
- สามารถสร้างอินดิเคเตอร์เฉพาะทางที่อิงกับข้อมูลความถี่ เช่น การตรวจจับช่วง Breakout หรือช่วงที่ตลาดมีการกลับตัว
- ตัวอย่าง Code MQL4 (EA) ที่ใช้อัลกอริทึมอนุกรม Fourier
ด้านล่างเป็นโค้ด MQL4 สำหรับการวิเคราะห์แนวโน้มราคาด้วย Fourier Series:
//+------------------------------------------------------------------+
//| @Fourier Series EA.mq4 |
//| Thana Supamanop |
//| https://www.mql 5.com |
//+------------------------------------------------------------------+
#property copyright "Thana Supamanop"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
input int Period = 50; // Period of price data to analyze
input int FourierTerms = 5; // Number of Fourier terms to use
input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // Timeframe
double FourierOutput[];
// Function to calculate Fourier Series
void CalculateFourierSeries(double &output[], int terms, int period)
{
int size = Bars(Symbol(), TimeFrame); // Fixed: Number of bars in the timeframe
ArrayResize(output, size);
for (int i = 0; i < size; i++)
{
double a0 = 0, an = 0, bn = 0; // Fourier coefficients
for (int t = 0; t < period; t++)
{
double price = iClose(Symbol(), TimeFrame, t); // Fixed: Corrected function call
double omega = 2 * M_PI * t / period;
a0 += price / period;
for (int n = 1; n <= terms; n++)
{
an += (price * MathCos(n * omega)) / period;
bn += (price * MathSin(n * omega)) / period;
}
}
// Fourier output at bar i
output[i] = a0 + an + bn;
}
}
//+------------------------------------------------------------------+
//| Expert Initialization |
//+------------------------------------------------------------------+
int OnInit()
{
Print("Fourier Analysis EA Initialized");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert Tick Function |
//+------------------------------------------------------------------+
void OnTick()
{
double CurrentFourierTrend[];
CalculateFourierSeries(CurrentFourierTrend, FourierTerms, Period);
// Use the Fourier trend for decision-making (e.g., Buy/Sell signals)
if (iClose(Symbol(), TimeFrame, 0) > CurrentFourierTrend[0])
{
Print("Price is above the Fourier trend. Buy Signal.");
}
else
{
Print("Price is below the Fourier trend. Sell Signal.");
}
}
//+------------------------------------------------------------------+
//| Expert Deinitialization |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Print("Fourier Analysis EA Deinitialized");
}
//+------------------------------------------------------------------+
การอธิบายโค้ด:
- ตัวแปรสำคัญ:
- Period: จำนวนแท่งเทียนที่ใช้ในการคำนวณ
- FourierTerms: จำนวนของเทอม (Terms) ในอนุกรม Fourier ที่ใช้
- TimeFrame: ระบุ Timeframe ของกราฟ เช่น H1, M15
- ฟังก์ชัน CalculateFourierSeries:
- ใช้คำนวณค่าของอนุกรม Fourier โดยวนลูปในช่วงเวลา (Period) และคำนวณค่าสัมประสิทธิ์ Fourier (a0, an, bn)
- ส่วนการตัดสินใจ:
- ใช้แนวโน้มที่ได้จาก Fourier Series (CurrentFourierTrend) เพื่อพิจารณาส่งสัญญาณ Buy หรือ Sell
การใช้งาน:
- ติดตั้ง EA นี้ใน MetaTrader 4 โดยการคัดลอกโค้ดไปที่ MetaEditor ในโฟลเดอร์ Experts
- ทดสอบกับข้อมูลย้อนหลัง (Backtesting) โดยกำหนดช่วงเวลาและจำนวน Terms ที่เหมาะสม
- วิเคราะห์ผลลัพธ์ที่ได้ว่าตรงกับแนวโน้มหรือคาบที่เกิดขึ้นจริงในตลาดหรือไม่
สรุป:
การใช้อัลกอริทึมอนุกรม Fourier เป็นการนำเครื่องมือทางคณิตศาสตร์มาใช้ในการวิเคราะห์แนวโน้มของตลาดโดยไม่ต้องพึ่งพา Machine Learning ช่วยให้ผู้เทรดสามารถตรวจจับแนวโน้มและรูปแบบการเคลื่อนไหวที่สำคัญในตลาดการเงินได้อย่างมีประสิทธิภาพ
ทิ้งคำตอบไว้
- 41 ฟอรัม
- 1,319 หัวข้อ
- 3,709 กระทู้
- 57 ออนไลน์
- 1,446 สมาชิก