Indicator Math V2 (indicator_math_v2) 🚀
ไลบรารี Rust ประสิทธิภาพสูงสำหรับการวิเคราะห์ทางเทคนิคทางการเงิน (Financial Technical Analysis) ที่ถูกออกแบบมาเพื่อ สืบทอดและเพิ่มประสิทธิภาพ ของลอจิกจาก clsAnalysisGenerator.js โดยเฉพาะ
ด้วยการออกแบบใหม่ทั้งหมด ทำให้ indicator_math_v2 มีจุดเด่นในเรื่องการประมวลผลแบบขนาน (Parallel Processing) และการวิเคราะห์แบบสะสม (Incremental Analysis) ซึ่งเบาและเร็วกว่าตัวเก่าอย่างเทียบไม่ติด
✨ คุณสมบัติเด่น (Features)
1. ⚡ Parallel Asset Processing (คำนวณหลายคู่เงินพร้อมกันแบบไร้คอขวด)
ใช้พลังของ tokio (Asynchronous Runtime) และ rayon (Data-parallelism) ในการกระจายงานคำนวณอินดิเคเตอร์ของหลายคู่เงินไปรันบน CPU หลายๆ Core พร้อมกัน ทำให้เซิร์ฟเวอร์สามารถรับโหลดได้จำนวนมหาศาล
2. 🧠 Incremental State Management (O(1) Update Time)
ลาก่อนการคำนวณซ้ำ O(N): ในเวอร์ชันปกตินั้น เวลาคุณมีข้อมูลตั้งต้น 1,000 แท่ง เมื่อมี Tick ใหม่มา 1 ครั้ง ระบบจะคำนวณใหม่ไล่ตั้งแต่แท่งที่ 1 ยัน 1,001 (เสียเวลามาก)
แต่ V2 ฉลาดกว่า: ระบบมี
GeneratorStateคอยจดจำ "ค่าตัวแปรสุดท้าย" เอาไว้ (เช่น EMA ของแท่งล่าสุด) ทำให้เมื่อมีราคา Tick เข้ามา ระบบจะเอา ราคาใหม่ + ค่าใน State เดิม มาคำนวณได้ทันที (ใช้แค่ 1 Operation (O(1)) ไม่ใช่พันครั้ง!) ทำให้เบากระชากใจ
3. 🌐 Built-in Deriv Integration
มีโค้ดจัดการการดึงข้อมูล OHLC ย้อนหลังจาก Deriv WebSocket/API ในตัว ไม่ต้องเขียนโค้ดยิง API เองให้เมื่อย โหลดข้อมูลตั้งต้นเป็นร้อยเป็นพันกราฟได้สบายๆ รวดเดียว
4. 🧮 Comprehensive Indicators
มีชุดอินดิเคเตอร์ครบครันและได้รับการรีไรต์ให้เข้ากับการทำงานแบบ State (Incremental):
- Moving Averages: EMA, HMA, EHMA, WMA
- Momentum/Trend: RSI, MACD, ADX
- Volatility: ATR, Bollinger Bands, Choppiness Index (CI)
- Smart Money Concepts (SMC): Market Structure (CHoCH, BOS), Swing Points, Order Blocks, FVG, Premium/Discount Zones
5. 🎯 Status Code Matching
ตัวนี้ทีเด็ด! มันสามารถวิเคราะห์และรวมอินดิเคเตอร์สิบกว่าตัว แล้วสรุปสถานะแท่งเทียนนั้นออกมาให้เป็น SeriesCode ตัวแปรเดียว (เช่น M-UU-G-C) ซึ่งตรงกับรูปแบบ CandleMasterCode ที่เอาไว้ใช้พิจารณาเข้าเทรดได้เลยอัตโนมัติ ไม่ต้องมานั่งเขียน if-else เอง
อัปเดตใหม่: ระบบรองรับการตั้งค่าดึงกฎแบบ Dynamic JSON ในตอนสั่งบิลด์ ทำให้สามารถอ่านและอัปเดตกฎเทรดจากไฟล์ CodeCandleMaster.json (จาก root โปรเจกต์) ได้โดยไม่ต้องไปแกะและฮาร์ดโค้ดใน Library อีกต่อไป
6. 🌍 WebAssembly (Wasm) First
คุณสามารถนำคณิตศาสตร์ดั้งเดิมไปรันบน Client/Browser ได้โดยตรง! ตอนนี้เรารองรับโหมด CPU Wasm เพื่อให้นำฟังก์ชันประเมินกราฟราคาแบบ Incremental ไปฝังให้ Web Worker ของโปรเจกต์ React/Vue ใช้งานแบบเรียลไทม์ได้ทันที!
🛠️ โครงสร้างฟังก์ชันหลัก (Key Functions)
ตัวจัดการหลักของไลบรารีนี้คือ AnalysisManager ซึ่งมีฟังก์ชันที่คุณจะได้ใช้บ่อยๆ ดังนี้:
1. AnalysisManager::new(options, master_codes)
- ใช้ทำอะไร: สร้าง Instance บริหารการคำนวณขึ้นมาใหม่
- พารามิเตอร์ที่รับ: รับ
AnalysisOptions(ตั้งค่าว่าจะเอา Period เท่าไหร่) และmaster_codes(กติกา Status Code ว่าแบบไหนเรียกว่าอะไร)
2. manager.initialize(ws_url, assets).await
- ใช้ทำอะไร: ดึงข้อมูลแท่งเทียนย้อนหลังของรายชื่อเหรียญ (
assets) ผ่าน Web Socket URL ที่ให้ไป จากนั้นมันจะคำนวณอินดิเคเตอร์ย้อนหลังทั้งหมดทีเดียวและเก็บข้อมูลไว้ใน State ให้พร้อมใช้งาน - เหมาะสำหรับ: การบู้ท (Boot Up) ระบบครั้งแรก
3. manager.process_tick(asset, price, epoch)
- ใช้ทำอะไร: เป็นหัวใจหลักของโหมด Live Trading เมื่อมีสัญญาณราคาขยับ (Tick) ส่งราคาล่าสุด (
price) ไปให้ มันก็จะเอาไปเช็คดูว่าปิดแท่งเทียนเดิมรึยัง- ถ้าปิดแล้ว ระบบก็จะ "คืนค่า (Return)" ไฟล์
AnalysisResultกลับมาบอกผลวิเคราะห์ของแท่งล่าสุดทันที - ถ้ายังไม่ปิด มันก็แค่เซฟไว้และคืนค่า
None
- ถ้าปิดแล้ว ระบบก็จะ "คืนค่า (Return)" ไฟล์
- ประสิทธิภาพ: O(1) เร็วและไม่กิน CPU อย่างที่กล่าวไปข้างต้น
4. manager.get_all_status()
- ใช้ทำอะไร: สำหรับเรียกดู "สถานะล่าสุด" ของทุกคู่เงินที่เราได้สั่งให้มันทำงานไว้ มันจะรวบรวมข้อมูลสถานะ (Status Code) แปะมาให้ทันที เอาไปโชว์ใน Web / Mobile ได้ง่ายสุดๆ
📦 วิธีการติดตั้ง
เพิ่มมันลงใน Cargo.toml ระบบคุณ ดังนี้:
[]
= { = "indicator_math", = "RustLib/indicator_math" }
= { = "1.0", = ["full"] }
ปล. ต้องใช้คู่กับแพ็กเกจ tokio เสมอเพราะมันเป็นระบบทำงานขนานแบบ Asynchronous
🔗 วิธีการใช้งาน (Integration Guide)
1. การเชื่อมต่อกับ main.rs (Backend)
การนำไปใช้ใน main.rs นั้น คุณจะต้องสร้าง AnalysisManager เอาไว้เป็น Global State/Shared State ผ่านตระกูล Arc<Mutex<>> หรือ Arc<RwLock<>> เพื่อให้ระบบ WebSocket หรือ Thread ต่างๆ เข้ามาเรียกใช้พร้อมกันได้
ตัวอย่างโค้ดใน main.rs:
use ;
use Arc;
use RwLock;
// สร้างข้อมูล State รวมที่สามารถแชร์ไปใน Axum (หรือ WebSocket) ได้
type SharedManager = ;
async
2. ข้อมูลล้ำค่าที่ส่งกลับไปให้ Main (Actionable Data)
เมื่อ indicatorMath_ULTRA_Rust ประมวลผลแท่งเทียนเสร็จ มันจะคายก้อน AnalysisResult (struct ขนาดใหญ่) ตัดส่งกลับไปให้ Main ของ Rust ผ่านฟังก์ชัน process_tick โดยแบ่งกลุ่มค่าสำคัญที่ส่งกลับไปพิจารณาการเข้าเทรด ดังนี้:
1. ทิศราชสีห์ (เทรนด์หลักจากเส้น EMA)
มันแยกให้เลยว่าเส้น EMA 3 ระดับกำลังหัวเชิด หรือหัวปัก
ema_short_direction,ema_medium_direction,ema_long_direction: (ได้ค่า "Up", "Down", "Flat")ema_above,ema_long_above: เอาไว้ดูว่าเส้นสั้นอยู่เหนือเส้นยาวไหม ("ShortAbove", "MediumAbove", "LongAbove") ช่วยหาจุด Golden Crossema_short_turn_type: ("TurnUp" หักหัวขึ้น, "TurnDown" หักหัวลง) อันนี้ใช้จับจุดกลับตัวแบบไวโคตรๆ ได้
2. สถานะความผันผวนของตลาด (Indicators อื่นๆ)
rsi_value: ค่า RSI 0-100 ไว้ดู Overbought / Oversoldbb_position: ราคาอยู่ในโซนไหนของ Bollinger Bands ("NearUpper", "NearLower", "Middle") เหมาะทำสาย Reversal (ชนขอบแล้วเด้งกลับ)choppy_indicator: หาว่าตลาดช่วงนี้ "มีเทรนด์" (ค่าน้อย) หรือ "สวิงไซด์เวย์" (ค่ามาก)adx_value: วัด "ความแข็งแกร่งของเทรนด์" (ADX > 25 แปลว่าเทรนด์แข็งแรงสุดๆ)
3. ชันสูตรแท่งเทียน (Candlestick Anatomy)
เหมาะกับคนที่เทรดด้วย Price Action หรือล่า Price Rejection (ไส้เทียนยาว)
body_percent: เนื้อเทียนคิดเป็นกี่เปอร์เซ็นต์ของทั้งแท่งu_wick_percent,l_wick_percent: ไส้เทียนบนและล่างยาวกี่เปอร์เซ็นต์ (เช่น ถ้าl_wick_percentยาวมากตอนอยู่แถวแนวรับ ก็อาจจับจังหวะ Call/Buy ได้)is_abnormal_candle,is_abnormal_atr: ค่า Boolean ห้ามเทรดตอนที่บอกว่า "จริง (True)" เพราะหมายถึงเกิดข่าวลากไส้รุนแรง ราคาช็อกตลาด
4. ร่องรอยรายใหญ่ (Smart Money Concepts - SMC)
วิเคราะห์พฤติกรรมกลไกราคาเชิงลึก:
swing_trend,internal_trend: เทรนด์ของสวิงหลักและสวิงย่อย ("bullish","bearish")structures: จุดทะลุโครงสร้าง CHoCH (Change of Character) และ BOS (Break of Structure)order_blocks: โซนคำสั่งซื้อขายก้อนใหญ่ที่เกิดจากการทิ้งตัวแรงๆ (Bullish/Bearish Order Blocks)fair_value_gaps: โพรงราคา (FVG) ที่แท่งเทียนพุ่งแรงจนเกิดช่องว่างpremium_discount_zone: โซนราคาถูก (Discount) และโซนของแพง (Premium)
5. รหัสลับสถานะ (The Master Code)
ตัวนี้เอาไว้ยัดรวมสภาพตลาดทุกอย่างเป็นบรรทัดเดียว เบ็ดเสร็จ:
status_desc: เช่น ค่า"L-DU-U-R-C"(ยาวกว่า Medium, สั้นตัดกลางทิ่มหัวลง, ยาวชี้หัวขึ้น, แท่งสีแดง, แมคดีชนกัน)status_code: โค้ดแปลจากหน้าเทรด เป็นตัวเลขเช่น"25","13"
ตัวอย่างการนำไปเขียน Logics ตัดสินใจเทรดใน Main:
// ตัวอย่างที่ 1: เล่นตามน้ำ (Follow Trend) จากรหัสสถานะ
if analysis.status_desc == "L-UU-U-G-D" && analysis.adx_value.unwrap_or > 25.0
// ตัวอย่างที่ 2: ดักจับจุดกลับตัวแบบมีไส้ (Rejection on BB Lower)
if analysis.bb_position == "NearLower" && analysis.l_wick_percent > 60.0
// ตัวอย่างที่ 3: ระบบป้องภัย
if analysis.is_abnormal_candle || analysis.choppy_indicator.unwrap_or > 61.8
3. การนำไปใช้กับ Lightweight Charts (Frontend)
เมื่อ Backend รัน process_tick() ได้แท่งเทียนปิดและวิเคราะห์เสร็จ มันจะคืนรูปมาเป็นค่าต่างๆ เช่น open, high, low, close, ema_short_value, rsi_value
สิ่งที่คุณต้องทำบน Frontend (HTML/JS) คือ เอาตัวแปลเหล่านั้นป้อนใส่ TradingView Lightweight Charts คล้ายกับวิธีดั้งเดิม:
ตัวอย่างโค้ดฝั่ง Javascript:
// 1. สร้างชาร์ตแท่งเทียนหลักและเส้น EMA
const chart = ;
const candleSeries = chart.;
const emaSeries = chart.;
// 2. รอรับข้อมูล JSON จาก WebSocket Rust
socket ;
📦 โครงสร้างข้อมูล JSON (AnalysisResult) และคำอธิบายฟิลด์
เมื่อ indicatorMath_ULTRA_Rust คำนวณจบแต่ละแท่งเทียน จะทำการคืนค่ากลับมาในรูปแบบ Struct ซึ่งเมื่อส่งข้าม WebSocket ไปยังหน้า Frontend (หรือตอนแปลงเป็น JSON) จะมีหน้าตาและรายละเอียดดังนี้:
คำอธิบายการใช้งานในแต่ละตัวแปร 📝
หมวดหมู่ข้อมูลทั่วไปของแท่งเทียน (Basic Candle Info):
index: ตำแหน่งเรียงลำดับของแท่งเทียนตั้งแต่เริ่ม (History length)candletime: เวลาของปิดแท่งเทียนฉบับ Epoch Time (วินาที)candletime_display: เวลาที่ถูกจัดการเป็น String (Optional)open,high,low,close: ข้อมูลราคาพื้นฐานcolor: สีของแท่งเทียน ("Green","Red","Equal")next_color: ใช้ในกรณีวิเคราะห์แท่งเทียนแบบย้อนหลัง (จะรู้สีแท่งในอนาคตเพื่อการทำ Backtesting ได้)pip_size: ขนาดส่วนต่างของราคาเปรียบเทียบจาก Open-Close
หมวดหมู่เส้นค่าเฉลี่ย (Moving Averages - EMA/HMA/WMA):
ema_short_value,medium,long: ตำแหน่ง Y ของจุด EMA (เส้นสั้น, กลาง, ยาว) บนกราฟema_short_direction,medium,long: ทิศทางปัจจุบันของแต่ละเส้น ว่าเงยหน้าขึ้น ("Up"), ปักหัวลง ("Down"), ไซด์เวย์ ("Flat")ema_short_turn_type: รูปแบบการกลับตัวของเส้นสั้น ("TurnUp","TurnDown","-")ema_above,ema_long_above: เรียงลำดับว่าเส้นสั้นอยู่เหนือกลาง (ShortAbove) หรือกลางอยู่เหนือยาว (MediumAbove)
หมวดหมู่ MACD และอัตรถ่างขยาย (Convergence/Divergence):
macd_12,macd_23: ความห่างระหว่างเส้น (เหมือน MACD Histogram ยิ่งมากยิ่งห่าง)previous_...: ค่าประวัติในแท่งก่อนหน้า เพื่อหาโมเมนตัมที่เปลี่ยนไปema_convergence_type: โมเมนตัมระหว่างเส้นสั้นกับกลาง ("convergence"= ลู่เข้า,"divergence"= ถ่างกว้างขึ้นเรื่อยๆ,"neutral")ema_long_convergence_type: การลู่เข้า/ถ่างออกของเส้นกลางกับยาวย่อตัวอักษรเดียว ("C","D","N")
หมวดหมู่อินดิเคเตอร์วัดระดับ (Oscillators & Volatility):
choppy_indicator: หาความผันผวนไซด์เวย์ (ยิ่งน้อยเทรนด์ยิ่งแข็ง, ยิ่งมากวิ่งไร้ทิศทาง)adx_value: วัดพลังสปีดของเทรนด์ (ถ้า > 25 แปลว่าวิ่งแรง)rsi_value: ดัชนีความแข็งของราคา ไว้หาจังหวะซื้อมากเกินไป (Overbought/Oversold)bb_values: {upper,middle,lower} เส้นตำแหน่งของ Bollinger Bands ทั้ง 3 เส้นbb_position: ราคาไปเกาะอยู่โซนไหนของ Band ("NearUpper","NearLower","Middle")atr: Average True Range วัดระยะทางเฉลี่ยที่แท่งเทียนสวิงตัว
หมวดหมู่อนาโตมีแท่งเทียนและความผิดปกติ (Anatomy & Abnormality):
is_abnormal_candle: แท่งเทียนกระชากตัวรุนแรง (เทียบกับ ATR ส่วนใหญ่มักเกิดจากข่าวหลุด)is_abnormal_atr: ค่าแกว่งแท่งนั้นๆ มีปริมาณเนื้อแท่งมหาศาลหรือหดตัวรุนแรงกว่าปกติu_wick,body,l_wick: ราคาจริงของไส้บน, ตัวเนื้อ, รถม้าล่างu_wick_percent,body_percent,l_wick_percent: คิดเป็นตัวเลขกี่ % เมื่อนำความสูงเทียนไปหารกับขนาดทั้งดุ้น (สำคัญต่อสายหาแท่งหางยาว)
หมวดหมู่เส้นตัดทิศทาง (Crossings & Counters):
ema_cut_position: จุดที่เส้นราคาตัดกับ EMA (เช่นทะลุตลอดตัว B1, ตัดปลาย 3,4 เป็นต้น)ema_cut_long_type:"UpTrend","DownTrend"บอกสายลมหลักcandles_since_ema_cut: ผ่านมากี่แท่งหลังจากจุด Golden Cross (ถ้าน้อยกว่า 3 มักเป็นจุดเพิ่งเริ่มเทรนด์)up_con_medium_ema,down_con_medium_ema...: ดัชนีนับคอมโบ (Combo counters) ของเส้นที่ชี้ขึ้นกี่มัด ชี้ลงกี่มัดรวด
หมวดหมู่ Smart Money Concepts (SMC):
smc.swing_trend,smc.internal_trend: เทรนด์ปัจจุบันของรอบใหญ่และรอบเล็ก ("bullish","bearish","neutral")smc.structures: อาร์เรย์เก็บประวัติการทำ Break of Structure (BOS) และ Change of Character (CHoCH)smc.swing_points: อาร์เรย์ระบุจุดกลับตัว High/Low (เช่น"HH"Higher-High,"LL"Lower-Low)smc.order_blocks: อาร์เรย์เก็บโซน Order Block (OB) ที่เกิดแท่งอิมบาลานซ์ ระบุเป็นกรอบราคา Upper-Lowersmc.fair_value_gaps: อาร์เรย์เก็บโซน FVG (Fair Value Gap) หรือ Imbalance ที่รอราคาลงมาเติมเต็ม (Mitigate)smc.equal_highs_lows: อาร์เรย์เก็บคู่ยอดที่ทำ Equal Highs (EQH) ปลายแหลมสองยอด หรือ Equal Lows (EQL)smc.premium_discount_zone: ข้อมูลกล่องคำนวณแบ่งครึ่งราคา Premium โซนของแพงด้านบน / Discount โซนของถูกด้านล่างsmc.strong_weak_levels: แนวรับแข็ง/อ่อน (Strong/Weak High-Low) (โครงสร้างข้อมูล SMC ทั้งหมดนี้มีแบบเดียวกับไลบรารี SMCIndicator.js ฝั่ง Frontend)
หมวดหมู่รหัสสถานะ (Bot Configuration Codes):
status_desc: "รหัสบรรทัดเดียวครอบจักรวาล" สูตรที่ขยำทุกอย่างมาบอกเช่นL-DU-U-R-Cแปลความง่ายๆ = Mediumอยู่เหนือยาว(L), กลางลงแต่อุ้มสั้นขึ้น(DU), ยาวเชิดตรง(U), สีแดง(R), ถ่างออก(C)status_code: Code ตัวเลขเช่น"13","25"ที่แปลงค่า Desc ให้เป็นเลขแมตช์เข้าตารางis_mark,hint_status,suggest_color: ส่วนรองรับอื่นๆ ไว้ฉีดสัญญาณบอกผู้ใช้ในระบบ Frontend