ข้อมูล Open High Low Close ตาม Time Frame ที่เรารู้จักมีจุดอ่อนอย่างไร?

เชื่อว่าหลายๆคนที่ลงทุนอยู่น่าจะคุ้นเคยกับข้อมูลการลงทุน Format แบบ Open, High, Low, Close ที่มักจะตัดแบ่งตามช่วงเวลาหนึงๆ วันนี้เราจะมาแนะนำให้รู้จัก Standard Bar กันครับก็จะแบ่งด้วย 3 แบบคือ Time bar, Volume bar และ Dollar bar โดยข้อมูลที่พวกเรารู้จักกันดีก็คือ Time bar นั่นเอง แต่ข้อมูลแต่ละแบบก็มีข้อดีข้อเสียต่างกันไปไปครับ

Time bar

time bar ก็คือ สิ่งที่เรารู้จักกันดีครับคือการเก็บข้อมูลตามช่วงเวลาหนึงๆ เช่น ตัดทุก 15, 30, 60 นาที, ชั่วโมง , รายวัน, สัปดาห์ กันดี โดยมักจะประกอบไปด้วย time stamp ตามด้วย open high low close volume หรือ bid ask volume ก็ตาม แต่หลักสำคัญคือจะมี time stamp มาบอกเวลาแต่ละ tick

ตัวอย่างข้อมูลแบบ Tick data เก็บทุก transaction

รูปที่1. ข้อมูล Time bar แบบ tick data

Sampling!!!

แต่ข้อมูลมันอาจจะมากเกินไปหน่อย tick data ประกอบด้วยข้อมูลหลายพัน row ต่อหนึ่งวัน เมื่อเราจะวิเคราะห์ข้อมูลหลายๆปี มันก็จะประกอบด้วยข้อมูลเป็นล้าน row (ข้อมูลที่ใช้ตั้งแต่ปี 2009 จนถึง 2019 ระยะเวลาไม่เต็ม 10 ปีดี ก็มีขนาดกว่า 1,700,000 row!!!) ซึ่งเราสามารถ sampling ข้อมูลเช่น เก็บทุก 150 tick มาใช้ประมวลผลเป็นต้น ก็จะได้ประมาณกว่า 11,000 rowใน 10 ปี ซึ่งก็ว่ากว่า end of day data หลายเท่าอยู่ดี

รูปที่2 เปรียบเทียบระหว่าง tick data และ time bar sampling ใน 2 ช่วงเวลา

จะเห็นว่า รูปบน tick data จำนวน 780 row ในวันที่ 04/01/2010 ถูก sampling ด้วย time bar จำนวน 5 row ตามจำนวน tick ขณะที่ในวันที่ 2019-01-02 หรืออีก 9 ปีต่อมา วันนั้นการเทรดของหลักทรัพย์นี้จะหนาแน่นกว่าเดิมอยู่ไม่น้อย แต่ถูกแทนที่ time barจำนวน 14 row ซึ่งก็ถือว่าสมมาตรตามอัตราเดิม (2125/150 = ~14) และนี่คือการ sampling data สำหรับข้อมูลแค่ 1 วันเท่านั้นครับ และปัญหามันก็เยอะแยะไปหมด

นี่เป็นแค่รูปแบบหนึงในการ sampling ข้อมูลมาวิเคราะห์ โดยเราอาจจะทดลองหาตัวเลขที่เหมาะสมในการ sampling ได้ครับ แต่อย่างที่ว่าการ represent ข้อมูลแบบนี้มันจุดอ่อนเยอะไปหน่อย ประเด็นก็คือตลาดไม่ได้รับ Information แบบนี้ การตัดแบ่งตามช่วงเวลาที่มนุษย์เรากำหนดขึ้นมาเอง ตลาดไม่ได้สนใจที่จะเก็บดาต้าทุกช่วงเวลาที่ว่าซักหน่อยเช่น ชั่วโมงตอนเปิดตลาด มักจะมี transaction สูงกว่า ชั่วโมงกลางๆของการทำการ จึงมีผลทำให้ ข้อมูลที่รับมาไม่อาจแจกแจงตามการแจกแจงปรกติ(หรือใกล้เคียง)ได้ ท้ายบทความผมจะเทสการแจกแจงว่าข้อมูลทั้งหมดที่เราทำกันในวันนี้ แบบไหนบ้างที่แจกแจงใกล้เคียง normal distribution มากที่สุดให้ดูครับ

Volume bar

การ represent ข้อมูลด้วยการใช้ volume มีขึ้นมา เพื่อแก้ปัญหาของ time bar เพราะข้อมูลแบบ time bar ที่เรา sampling มาจาก tick data มันมีจุดอ่อนด้อยที่สำคัญมาก ยิ่งทำให้ข้อมูลมันมีลักษณ์ไม่แจกแจงปรกติได้จุดหนึงก็คือ ถ้าเราจะ sampling 150 tick มันก็ดูสมเหตุสมผลดี แต่ถ้าข้อมูล ที่มา ไม่ว่า tick นั้นเราจะมีการซื้อขาย(volume) 1000 lot จะถูกเก็บเป็น 1 tick(row) เท่าๆกับ tick ที่มีการซื้อขายแค่ 1 lot ดังรูปที่2 เราไม่มีทางรู้ได้เลยว่าแต่ละจุดที่ถูก sampling มามีความสมดุลแค่ไหน

การ sampling ด้วยวิธีการ volume bar ก็ทำได้โดยการเปลี่ยนมุม sampling ครับจากการ sampling ผ่านช่วงเวลามาเป็น ช่วงเวลาแค่ไหนเราไม่สนแล้ว เรามานับตาม volume แทน เช่น ถ้า volume ถึง threshold ที่เรากำหนด เช่น 1000 lot เราก็จะ sampling ราคามา 1 ครั้งแทน ทำแบบนี้เราจะหมดปัญหาข้างต้นได้

รูปที่ 3 ตาราง cumvol ที่รวมการเทรดในแต่ tick ไว้

มาดูรูปกันดีกว่า!

รูปที่4 เปรียบเทียบระหว่าง tick data และ volume bar sampling ใน 2 ช่วงเวลา

จะเห็นว่า volume bar ในวันที่ 02/01/2019 เพิ่มขึ้นมากกว่าในช่วงเวลาเมื่อ 9 ปีก่อน เหมือนกันก็จริง แต่ไม่ได้เพิ่มแบบสมมาตรในเชิงเวลาแล้วครับ มันกลับไปเพิ่มขึ้นในเชิงของ lot ที่ซื้อมามากกว่า เช่น อาจจะมีช่วงเวลาสั้นมากๆ แต่กลับมี volume เข้ามาเยอะ มันก็อาจจะ sampling ราคาช่วงนั้นถี่ก็ได้ นี่คือไอเดียเบื้องหลัง volume bar ครับ

อีกครั้งกับการหา threshold ซึ่งทำได้หลายวิธี ในที่นี้ผมจะใช้ ratio ของ volume กับ tick ปรับ ratio เล็กน้อยครับ ถึงแม้เราจะแก้ข้อด้อยของ tick bar ได้แล้วแต่ก็ใช่ว่ามันจะไร้จุดอ่อนเสียทีเดียวปัญหาก็คือ ถ้าเราคิดแต่ volume มันจะมีความไม่สมดุลอยู่ ตัวอย่างเช่น

  • ตอนที่หลักทรัพย์ตัวนี้ ราคาอยู่ที่ประมาณ 10 เหรียญ ถ้าเรา sampling ด้วย volume 1,000 lot เงินที่เข้าไปในตลาดคือ 10,000 เหรียญ คือเรากำลัง sampling infoamation ที่ 10,000 เหรียญที่เข้าไปในตลาด
  • กลับกันถ้าราคาหลักทรัพย์ขึ้นไป 500 เหรียญ ถ้าเรา sampling ด้วย volume 1,000 lot เท่ากันเงินที่เข้าไปตลาดคือ 500,000 เหรียญ คือเรากำลัง sampling infoamation ที่เข้าไปตลาดมากกว่าช่วงแรกถึง 50 เท่า

ปัญหาเหล่านี้ถูกแก้ได้ด้วย dollar bar ดังที่จะกล่าวต่อไปครับ

Dollar Bar

ตัว dollar bar ถูกคิดมาแก้ปัญหาด้านบนครับ โดยวิธีการแก้ก็ง่ายๆเลยคือคำนวณ ราคาตามไปกับจำนวน lot หรือ volume ไปด้วยเลย โดยการคำนวณ dollar ก็แค่เอา จำนวน lot มา คูณกับ priceไปเท่านั้น

รูปที่ 5 ตาราง Dollar และ Cumalative Dollar

ส่วนวิธีการเลือกก็เหมือนเดิมครับ เราก็หา threshold ที่เหมาะสมในการ sampling ข้อมูลเหมือนเดิม เช่น sampling ทุก 100,00 เหรียญ เราก็จะได้ราคาที่ วันที่ 2009.09.28 09:31:50 มาเป็นดาต้า sample ตัวแรก เป็นต้น หรือจะใช้เป็นวิธีการ sampling โดยใช้ ratio ของ dollar ต่อ tick ก็ได้ ซึ่งผู้เขียนก็เลือกวิธีนี้ แต่ adjusted มันเล็กน้อยจะได้ดังนี้ครับ

รูปที่6 เปรียบเทียบระหว่าง tick data และ volume bar sampling ใน 2 ช่วงเวลา

คราวนี้จะเห็นชัด แม้จำนวนการเทรดของ ตัวอย่างในวันที่ 02/01/2019 เพิ่มมา 2.7 เท่า แต่อัตรา dollar bar กลับเพิ่มขึ้นถึง 4.6 เท่าทีเดียว ทั้งนี้ก็เพราะว่าตลาดในช่วงปี 2019 ได้รับ information เป็นจำนวนเงินมากกว่าตลาดในปี 2009 เยอะ ราคาเพิ่มไป 2 เท่าแล้วเงินที่เข้าไป * volume ก็เพิ่มขึ้นด้วยเช่นกัน นี่คือการ sampling ที่มีพื้นฐานมาจากการรับข้อมูลของตลาดโดยแท้จริง

เมื่อรู้จักทั้ง 3 แบบแล้ว เราอาจจะมีคำถาม ทำไปทำไมใช่ไหมครับ เดี๋ยวผมจะนำข้อมูลทั้ง 3 + 2(raw data และ ohlc data) แบบนั้นมาทดสอบ การแจงแจกปรกติให้ดูกันครับ

Test for normal distribution

ในการสร้างโมเดลทาง machine learning ส่วนใหญ่ตั้งอยู่บนพื้นฐายของการแจกแจงปรกติครับ(normal distribution)แต่ ข้อมูลการลงทุนส่วนใหญ่ มันจะเป็นข้อมูลที่หางอ้วน(fat tailed) ทำให้การสร้างโมเดลมันไม่ค่อยจะได้ผลดีนัก ฉะนั้นเราจะมาเทสกันครับว่าหลังจากที่เรา sampling ข้อมูลตามหลักการต่างๆแล้วมันให้ผลให้ข้อมูลมีการแจกแคงที่ดีขึ้นหรือแย่ลงอย่างไร

โดยเราจะใช้ Shapiro–Wilk test ซึ่งเป็นตัวชี้วัดที่ใช้ในการทดสอบว่า ดาต้านั้นมีคุณสมบัติเป็นการแจกแจงปรกติหรือไม่มาเทส ค่าจากการเทสยิ่งเข้าใกล้ 1 เท่าไหร่แปลว่า การแจกแจงนั้นๆเข้าใกล้ความเป็น normal distribution แล้วนั่นเอง นอกจาก ข้อมูลดิบ time bar volume bar dollar bar แล้วผมได้คำนวณ open high low close ของจุดตัดทุก 10 นาทีมาร่วมเทสด้วย ก่อนจะดูผลเรามาดู distribution ของข้อมูลกันก่อนดังนี้

รูปที่7 กราฟเปรียบเทียบ distribution

ดูจากรูปอาจจะไม่เห็นผลเท่าใดนักว่าอันไหนใกล้เคียง normal distribution มากที่สุด เราจึงต้องมาดูค่า test กันดังนี้

รูปที่ 8 ผลการเทส Shapiro-wilk

จะเห็นว่าการ sampling ทั้ง 4 รูปแบบ รวมทั้งข้อมูลดิบด้วย dollar bar(ถ้าเป็นไทยก็ baht bar ล่ะนะ) จะให้ค่าใกล้เคียง normal distribution ที่สุดนะครับ แต่มันก็ยังไม่ได้เป็น normal distributin เสียทีเดีบวแต่ยังไงก็ตามนี่ก็เป็นเพียง standard bar นะครับ ยังมีวิธีการ sampling ที่ได้ผลกว่านี้ก็คือ Information driving bar คือการ sampling ข้อมูลผ่านข้อมูลที่ตลาดได้รับเข้าไป เช่น การหาข้อมูลจากการไม่สมดุลกันของตลาด อารมณ์คล้ายๆ on balance volume แต่ on steroids(ดีกว่าเยอะ) มาใช้ในการ sampling ข้อมูลโดยจะกล่าวถึงในโอกาสหน้าครับ

One Comment Add yours

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s