chop-indicator

Crates.iochop-indicator
lib.rschop-indicator
version0.1.0
created_at2026-01-01 03:01:21.899354+00
updated_at2026-01-01 03:01:21.899354+00
descriptionChoppiness Index (CHOP) indicator for technical analysis and options trading
homepage
repositoryhttps://github.com/yourusername/chop-indicator
max_upload_size
id2015672
size56,274
(Pick999999)

documentation

README

CHOP Indicator (ภาษาไทย)

Crates.io Documentation 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:

[dependencies]
chop-indicator = "0.1.0"

หรือพร้อม serde support:

[dependencies]
chop-indicator = { version = "0.1.0", features = ["serde"] }

🚀 เริ่มต้นใช้งาน

การใช้งานพื้นฐาน

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 นาที

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 ที่มี

let chop_values = choppiness_index(&high, &low, &close, 14)?;

choppiness_index_last(high, low, close, period) -> Result<f64>

คำนวณเฉพาะค่า CHOP ล่าสุด

let current_chop = choppiness_index_last(&high, &low, &close, 14)?;

analyze_chop(high, low, close, period) -> Result<ChopAnalysis>

วิเคราะห์ตลาดแบบละเอียดพร้อมคำแนะนำ

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)

let (chop, signal, condition) = quick_1min_analysis(&high, &low, &close)?;

Types (ชนิดข้อมูล)

MarketCondition

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

pub enum OptionsSignal {
    NoTrade,           // CHOP >= 65
    SellPremium,       // 55 <= CHOP < 65
    Neutral,           // 45 <= CHOP < 55
    Directional,       // 35 <= CHOP < 45
    StrongDirectional, // CHOP < 35
}

ChopAnalysis

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 ที่ครบถ้วน:

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:

cargo test

รันพร้อมแสดงผลลัพธ์:

cargo test -- --nocapture

📝 ตัวอย่าง

ดูตัวอย่างเพิ่มเติมในโฟลเดอร์ examples/:

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

📄 ใบอนุญาต

โปรเจกต์นี้ใช้ใบอนุญาตอย่างใดอย่างหนึ่งจาก:

ตามที่คุณเลือก

🙏 กิตติกรรมประกาศ

  • แรงบันดาลใจจาก Choppiness Index ดั้งเดิมโดย E.W. Dreiss
  • สร้างขึ้นสำหรับชุมชน Rust trading
  • ขอบคุณผู้มีส่วนร่วมทุกท่าน

📧 ติดต่อ

⚖️ ข้อจำกัดความรับผิดชอบ

ซอฟต์แวร์นี้มีวัตถุประสงค์เพื่อการศึกษาเท่านั้น การเทรด 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 อื่นดูทิศทาง

Commit count: 0

cargo fmt