# CHOP Indicator (ภาษาไทย)
[](https://crates.io/crates/chop-indicator)
[](https://docs.rs/chop-indicator)
[](https://github.com/yourusername/chop-indicator#license)
ไลบรารี Rust สำหรับคำนวณ Choppiness Index (CHOP) ซึ่งเป็นตัวชี้วัดทางเทคนิคที่ออกแบบมาเพื่อการเทรด Options โดยเฉพาะใน timeframe 1 นาที
## 🎯 Choppiness Index คืออะไร?
Choppiness Index (CHOP) เป็นตัวชี้วัดทางเทคนิคที่ช่วยบอกว่าตลาดกำลังเคลื่อนไหวแบบมีทิศทาง (trending) หรือเคลื่อนไหวไปมาแบบไม่มีทิศทาง (choppy/sideways) โดยมีประโยชน์ในการ:
- ระบุสภาพตลาดก่อนเข้าเทรด
- เลือกกลยุทธ์ Options ที่เหมาะสม
- หลีกเลี่ยงตลาดที่เคลื่อนไหวแบบ sideways ซึ่งกลยุทธ์แบบมีทิศทางมักจะล้มเหลว
- จับจังหวะเข้าเทรดแบบขาย Premium
### การตีความค่า CHOP
| ค่า CHOP | สภาพตลาด | คำอธิบาย |
|----------|-----------|----------|
| < 38.2 | Trend แรง | ตลาดมี Trend ที่แข็งแกร่งมาก |
| 38.2 - 45 | Trending | ตลาดกำลัง Trend อยู่ |
| 45 - 55 | ช่วงเปลี่ยนผ่าน | ตลาดอยู่ในช่วงเปลี่ยนสภาพ |
| 55 - 61.8 | Choppy | ตลาดเคลื่อนไหวแบบ sideways |
| > 61.8 | Choppy มาก | ตลาด Choppy มาก ไม่มีทิศทาง |
## ✨ คุณสมบัติ
- **เร็วและแม่นยำ**: เขียนด้วย Rust ที่ optimize แล้ว
- **เน้น Options Trading**: ออกแบบพิเศษสำหรับการเทรด Options ใน 1 นาที
- **วิเคราะห์ตลาด**: ตรวจจับสภาพตลาดอัตโนมัติ
- **แนะนำกลยุทธ์**: มีคำแนะนำกลยุทธ์ Options ในตัว
- **จัดการ Error**: มี error types และ validation ครบถ้วน
- **รองรับ Serde**: สามารถเลือกใช้ serialization ได้
- **ทดสอบครบถ้วน**: มี test suite ที่ครอบคลุม
## 📦 การติดตั้ง
เพิ่มใน `Cargo.toml`:
```toml
[dependencies]
chop-indicator = "0.1.0"
```
หรือพร้อม serde support:
```toml
[dependencies]
chop-indicator = { version = "0.1.0", features = ["serde"] }
```
## 🚀 เริ่มต้นใช้งาน
### การใช้งานพื้นฐาน
```rust
use chop_indicator::{choppiness_index, analyze_chop};
fn main() {
// ข้อมูลราคา (ต้องมีอย่างน้อย 15+ candles สำหรับ period 14)
let high = vec![
100.0, 102.0, 104.0, 103.0, 105.0, 107.0, 106.0, 108.0,
110.0, 109.0, 111.0, 113.0, 112.0, 114.0, 116.0
];
let low = vec![
98.0, 100.0, 102.0, 101.0, 103.0, 105.0, 104.0, 106.0,
108.0, 107.0, 109.0, 111.0, 110.0, 112.0, 114.0
];
let close = vec![
99.0, 101.0, 103.0, 102.0, 104.0, 106.0, 105.0, 107.0,
109.0, 108.0, 110.0, 112.0, 111.0, 113.0, 115.0
];
// คำนวณค่า CHOP
let chop_values = choppiness_index(&high, &low, &close, 14).unwrap();
println!("ค่า CHOP: {:?}", chop_values);
// วิเคราะห์แบบละเอียด
let analysis = analyze_chop(&high, &low, &close, 14).unwrap();
println!("CHOP ปัจจุบัน: {:.2}", analysis.value);
println!("สภาพตลาด: {:?}", analysis.condition);
println!("กำลัง Trend: {}", analysis.is_trending);
println!("กลยุทธ์แนะนำ: {}", analysis.strategy_recommendation);
}
```
### การเทรด Options ใน 1 นาที
```rust
use chop_indicator::{quick_1min_analysis, OptionsSignal};
fn main() {
let high = vec![/* ราคาสูงสุด 1 นาที */];
let low = vec![/* ราคาต่ำสุด 1 นาที */];
let close = vec![/* ราคาปิด 1 นาที */];
// วิเคราะห์แบบเร็วสำหรับตัดสินใจทันที
let (chop, signal, condition) = quick_1min_analysis(&high, &low, &close).unwrap();
println!("CHOP: {:.2}", chop);
println!("สัญญาณ: {:?}", signal);
println!("สภาพตลาด: {:?}", condition);
// ตัดสินใจเทรดตามสัญญาณ
match signal {
OptionsSignal::StrongDirectional => {
println!("🚀 ตรวจพบ Trend แรง!");
println!("กลยุทธ์: เทรดแบบมีทิศทางอย่างจริงจัง");
println!("→ ซื้อ Calls/Puts แบบ ATM ตามทิศทาง trend");
println!("→ โอกาสที่ trend จะดำเนินต่อสูง");
}
OptionsSignal::Directional => {
println!("📈 ตลาดกำลัง Trend");
println!("กลยุทธ์: เทรดแบบมีทิศทางปานกลาง");
println!("→ ใช้ Vertical spreads");
println!("→ Options แบบ OTM ตามทิศทาง trend");
}
OptionsSignal::Neutral => {
println!("⚠️ ช่วงเปลี่ยนผ่าน");
println!("กลยุทธ์: กลยุทธ์แบบกลางๆ");
println!("→ ใช้ Iron condors");
println!("→ ลดขนาด position ลง");
}
OptionsSignal::SellPremium => {
println!("💰 ตลาด Choppy - ขาย Premium");
println!("กลยุทธ์: ขาย Premium");
println!("→ Credit spreads");
println!("→ Iron butterflies");
println!("→ Short strangles");
}
OptionsSignal::NoTrade => {
println!("🛑 Choppy มาก - อย่าเทรด!");
println!("กลยุทธ์: หลีกเลี่ยงการเทรด");
println!("→ รอสภาพตลาดที่ดีกว่า");
println!("→ หรือใช้ Calendar spreads เท่านั้น");
}
}
}
```
## 📊 กลยุทธ์ Options ตามค่า CHOP
### Trend แรง (CHOP < 35)
- **กลยุทธ์หลัก**: เทรดแบบมีทิศทางอย่างจริงจัง
- **Options**: Calls/Puts แบบ ATM ตามทิศทาง trend
- **ความเสี่ยง**: ต่ำ (โอกาส trend ดำเนินต่อสูง)
- **เป้าหมายกำไร**: Scalp เร็ว (1-5 นาที)
### กำลัง Trending (CHOP 35-45)
- **กลยุทธ์หลัก**: เทรดแบบมีทิศทางปานกลาง
- **Options**: Vertical spreads, Options แบบ OTM
- **ความเสี่ยง**: กลาง (trend อาจอ่อนลง)
- **เป้าหมายกำไร**: 3-10 นาที
### ช่วงเปลี่ยนผ่าน (CHOP 45-55)
- **กลยุทธ์หลัก**: กลยุทธ์แบบกลางๆ
- **Options**: Iron condors, position ขนาดเล็ก
- **ความเสี่ยง**: สูง (ทิศทางไม่แน่นอน)
- **เป้าหมายกำไร**: กำไรจากการเคลื่อนไหวใน range
### Choppy (CHOP 55-65)
- **กลยุทธ์หลัก**: ขาย Premium
- **Options**: Credit spreads, Iron butterflies
- **ความเสี่ยง**: กลาง (คาดว่าจะเคลื่อนไหวใน range)
- **เป้าหมายกำไร**: Time decay + Mean reversion
### Choppy มาก (CHOP > 65)
- **กลยุทธ์หลัก**: หลีกเลี่ยงหรือใช้ Calendar spreads เท่านั้น
- **Options**: อย่าเทรดหรือใช้ Calendar ระยะยาว
- **ความเสี่ยง**: สูงมาก (การเคลื่อนไหวคาดเดาไม่ได้)
- **เป้าหมายกำไร**: รอสภาพที่ดีขึ้น
## 🔧 คู่มือ API
### ฟังก์ชันหลัก
#### `choppiness_index(high, low, close, period) -> Result<Vec<f64>>`
คำนวณค่า CHOP สำหรับทุก period ที่มี
```rust
let chop_values = choppiness_index(&high, &low, &close, 14)?;
```
#### `choppiness_index_last(high, low, close, period) -> Result<f64>`
คำนวณเฉพาะค่า CHOP ล่าสุด
```rust
let current_chop = choppiness_index_last(&high, &low, &close, 14)?;
```
#### `analyze_chop(high, low, close, period) -> Result<ChopAnalysis>`
วิเคราะห์ตลาดแบบละเอียดพร้อมคำแนะนำ
```rust
let analysis = analyze_chop(&high, &low, &close, 14)?;
println!("ค่า: {}", analysis.value);
println!("สภาพ: {:?}", analysis.condition);
println!("กลยุทธ์: {}", analysis.strategy_recommendation);
```
#### `quick_1min_analysis(high, low, close) -> Result<(f64, OptionsSignal, MarketCondition)>`
วิเคราะห์แบบเร็วสำหรับการเทรด 1 นาที (ใช้ period 14)
```rust
let (chop, signal, condition) = quick_1min_analysis(&high, &low, &close)?;
```
### Types (ชนิดข้อมูล)
#### `MarketCondition`
```rust
pub enum MarketCondition {
StrongTrend, // CHOP < 38.2
Trend, // 38.2 <= CHOP < 45
Transitional, // 45 <= CHOP < 55
Choppy, // 55 <= CHOP < 61.8
VeryChoppy, // CHOP >= 61.8
}
```
#### `OptionsSignal`
```rust
pub enum OptionsSignal {
NoTrade, // CHOP >= 65
SellPremium, // 55 <= CHOP < 65
Neutral, // 45 <= CHOP < 55
Directional, // 35 <= CHOP < 45
StrongDirectional, // CHOP < 35
}
```
#### `ChopAnalysis`
```rust
pub struct ChopAnalysis {
pub value: f64, // ค่า CHOP
pub condition: MarketCondition, // สภาพตลาด
pub is_trending: bool, // กำลัง trend หรือไม่
pub is_choppy: bool, // choppy หรือไม่
pub strategy_recommendation: String, // คำแนะนำกลยุทธ์
}
```
## ⚠️ การจัดการ Error
Crate นี้มีระบบจัดการ error ที่ครบถ้วน:
```rust
use chop_indicator::{choppiness_index, ChopError};
match choppiness_index(&high, &low, &close, 14) {
Ok(values) => println!("CHOP: {:?}", values),
Err(ChopError::InsufficientData { required, got }) => {
eprintln!("ต้องการ {} จุดข้อมูล แต่ได้ {}", required, got);
}
Err(ChopError::InvalidPeriod) => {
eprintln!("Period ต้องมากกว่า 0");
}
Err(ChopError::MismatchedLengths) => {
eprintln!("Array ของ high, low, close ต้องมีความยาวเท่ากัน");
}
Err(e) => eprintln!("Error: {}", e),
}
```
## 💡 เคล็ดลับสำหรับการเทรด Options ใน 1 นาที
### 1. ใช้ร่วมกับ Indicators อื่น
อย่าใช้ CHOP เพียงอย่างเดียว ควรใช้ร่วมกับ:
- **RSI**: ยืนยัน overbought/oversold
- **MACD**: ยืนยันทิศทาง trend
- **Volume**: ยืนยันความแรงของ breakout
- **Moving Averages**: หา support/resistance
### 2. การบริหารความเสี่ยง
- **Stop Loss**: ต้องใส่ stop loss ที่แน่น (ไม่เกิน 2-3%)
- **ขนาด Position**: อย่าเสี่ยงเกิน 1-2% ต่อเทรด
- **จำนวน Position สูงสุด**: จำกัดไว้ 2-3 position พร้อมกัน
- **จำกัดเวลา**: ออกจาก position หลัง 5-10 นาทีไม่ว่าอย่างไร
### 3. ช่วงเวลาที่ดีที่สุดในการเทรด
- **หลีกเลี่ยง**: 15 นาทีแรกหลังตลาดเปิด
- **ดีที่สุด**: 9:45 AM - 11:00 AM, 2:00 PM - 3:30 PM EST
- **หลีกเลี่ยง**: 10 นาทีสุดท้าย (คาดเดาไม่ได้)
### 4. กฎเกี่ยวกับ CHOP
- **CHOP > 65**: อย่าเทรดเด็ดขาด
- **CHOP 55-65**: ขาย premium เท่านั้น และใช้ strike ที่กว้าง
- **CHOP 45-55**: ลดขนาด position ลง 50%
- **CHOP < 45**: ใช้ position เต็มขนาดได้
- **CHOP < 35**: พิจารณา scaling in
### 5. การเลือก Options
- **0DTE หรือ 1DTE เท่านั้น** สำหรับการเทรด 1 นาที
- **ATM ถึง OTM 1 strike** สำหรับเทรดแบบมีทิศทาง
- **Wings กว้าง** สำหรับ iron condors ในตลาด choppy
- **Strike ที่มี volume สูง** เท่านั้น
## 🔬 รายละเอียดทางเทคนิค
### สูตรการคำนวณ
```
CHOP = 100 * LOG10( SUM(ATR, n) / (MAX(High, n) - MIN(Low, n)) ) / LOG10(n)
```
โดยที่:
- `ATR` = Average True Range
- `n` = lookback period (ค่าเริ่มต้น: 14)
- `MAX(High, n)` = ราคาสูงสุดใน n periods
- `MIN(Low, n)` = ราคาต่ำสุดใน n periods
### ประสิทธิภาพ
- **Time Complexity**: O(n * period) โดยที่ n คือจำนวนข้อมูล
- **Space Complexity**: O(n)
- **ประสิทธิภาพทั่วไป**: < 1ms สำหรับ 100 candles บน CPU สมัยใหม่
## 🧪 การทดสอบ
รัน test suite:
```bash
cargo test
```
รันพร้อมแสดงผลลัพธ์:
```bash
cargo test -- --nocapture
```
## 📝 ตัวอย่าง
ดูตัวอย่างเพิ่มเติมในโฟลเดอร์ `examples/`:
```bash
cargo run --example basic
cargo run --example realtime_1min
cargo run --example backtesting
```
## 🤝 การมีส่วนร่วม
ยินดีรับ Contribution! กรุณา submit Pull Request ได้เลย
1. Fork repository
2. สร้าง feature branch (`git checkout -b feature/ฟีเจอร์เจ๋งๆ`)
3. Commit การเปลี่ยนแปลง (`git commit -m 'เพิ่มฟีเจอร์เจ๋งๆ'`)
4. Push ไปยัง branch (`git push origin feature/ฟีเจอร์เจ๋งๆ`)
5. เปิด Pull Request
## 📄 ใบอนุญาต
โปรเจกต์นี้ใช้ใบอนุญาตอย่างใดอย่างหนึ่งจาก:
- MIT License ([LICENSE-MIT](LICENSE-MIT) หรือ http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) หรือ http://www.apache.org/licenses/LICENSE-2.0)
ตามที่คุณเลือก
## 🙏 กิตติกรรมประกาศ
- แรงบันดาลใจจาก Choppiness Index ดั้งเดิมโดย E.W. Dreiss
- สร้างขึ้นสำหรับชุมชน Rust trading
- ขอบคุณผู้มีส่วนร่วมทุกท่าน
## 📧 ติดต่อ
- Issues: [GitHub Issues](https://github.com/yourusername/chop-indicator/issues)
- Email: your.email@example.com
- Twitter: [@yourhandle](https://twitter.com/yourhandle)
## ⚖️ ข้อจำกัดความรับผิดชอบ
**ซอฟต์แวร์นี้มีวัตถุประสงค์เพื่อการศึกษาเท่านั้น การเทรด Options มีความเสี่ยงสูงต่อการสูญเสียเงินทุนและไม่เหมาะสำหรับทุกคน ผลการดำเนินงานในอดีตไม่ได้บ่งชี้ถึงผลลัพธ์ในอนาคต ควรศึกษาข้อมูลด้วยตนเองและปรึกษาที่ปรึกษาทางการเงินที่มีใบอนุญาตก่อนตัดสินใจลงทุนเสมอ**
---
สร้างด้วย ❤️ สำหรับชุมชน Rust trading
---
## 🇹🇭 เอกสารเพิ่มเติมภาษาไทย
### คำศัพท์ที่ควรรู้
- **Choppy**: การเคลื่อนไหวของราคาแบบไปมา ไม่มีทิศทางชัดเจน
- **Trending**: ราคามีทิศทางชัดเจน (ขึ้นหรือลง)
- **ATM (At The Money)**: Options ที่ราคา strike ใกล้เคียงราคาตลาด
- **OTM (Out of The Money)**: Options ที่ราคา strike ห่างจากราคาตลาด
- **Premium**: ค่า Options ที่ต้องจ่าย
- **Time Decay**: การลดลงของมูลค่า Options เมื่อเวลาผ่านไป
### คำถามที่พบบ่อย
**Q: ควรใช้ period เท่าไหร่สำหรับ 1 นาที?**
A: แนะนำ 14 (default) หรือ 10 สำหรับความไวที่สูงขึ้น
**Q: CHOP เหมาะกับ timeframe อื่นไหม?**
A: ใช่ แต่ crate นี้ optimize สำหรับ 1 นาที สามารถใช้กับ 5, 15, 30 นาทีได้
**Q: ต้องใช้กับ indicators อื่นด้วยหรือไม่?**
A: ควรใช้ร่วมกับ RSI, MACD, Volume เพื่อยืนยันสัญญาณ
**Q: CHOP บอกทิศทางได้ไหม?**
A: ไม่ได้ CHOP บอกเพียงว่าตลาด trending หรือ choppy เท่านั้น ต้องใช้ indicators อื่นดูทิศทาง