Correlation ในราคาหุ้น

by m3rLinEz 13. June 2010 21:20

ช่วงนี้สนใจเรื่องแนวๆ quantitative มากเป็นพิเศษ อ่านไปเรื่อยๆก็สนุกดี แต่บางทีก็อดรู้สึกไม่ได้ว่านี่เอาเวลามาทำอะไรอยู่ฟะเนี่ย -*- ยิ่งทำๆไปแล้วยังไม่เห็นผลลัพธ์ที่จับต้องได้นี่ มันจะเริ่มหงุดหงิดๆ 555+

Correlation นี่มันเป็นความสัมพันธ์เชิงสถิติระหว่างข้อมูล (ในที่นี่ก็หมายถึงพวกราคานั่นแหละ) ซึ่งบางทีการที่ข้อมูลสองชุดมัน correlate กัน ก็ อาจจะ แปลว่ามีความสัมพันธ์อะไรบางอย่างอยู่เบื้องหลังก็ได้

สำหรับพวกข้อมูลที่เป็นตัวเลข (เช่นราคาหุ้น) การที่มัน correlate กันนั้นก็หมายถึงราคามันจะเปลี่ยนแปลงไปพร้อมๆกัน เช่น ตัวนึงขึ้นมาก อีกตัวก็ต้องขึ้นมากด้วย ตัวนึงนิ่ง อีกตัวนิ่ง หรือจะเป็นแบบตัวนึงขึ้นมากอีกตัวนึงลงมากก็ได้

ใน Excel มีฟังก์ชันสะดวกๆให้ใช้ชื่อ CORREL ส่วนใน Python เข้าใจว่าใน SciPy ก็มีเหมือนกัน แต่บางครั้งคนเราควร Reinvent the Wheel บ้าง เพื่อความบันเทิง :P

Pearson

วิธีการตีความผลลัพธ์คือ

  • ถ้าได้ค่าใกล้ 1 มาก แปลว่ามันขึ้นลงพร้อมๆกันมากๆ (correlate)
  • ถ้าได้ค่าใกล้ 0 แปลว่ามันแทบจะไม่ correlate กันเลย
  • ถ้าได้ค่าใกล้ 1 มาก แปลว่ามันจะขึ้นลงกลับกันมากๆ (correlate)
def corr(series1, series2):
"""Calculate Pearson's product-moment coefficient

More info: http://en.wikipedia.org/wiki/Correlation_and_dependence#Pearson.27s_product-moment_coefficient

"
""
if len(series1) != len(series2):
raise Exception((series1, series2), 'Lengths of series are not equal')

n = len(series1)
sum_x = sum(series1)
sum_y = sum(series2)
sum_sqx = sum(a*a for a in series1)
sum_sqy = sum(a*a for a in series2)
sum_xy = sum(map(lambda s: s[0] * s[1], zip(series1, series2)))

import math
res = (n*sum_xy - sum_x*sum_y)/(math.sqrt(n*sum_sqx - sum_x*sum_x)*math.sqrt(n*sum_sqy - sum_y*sum_y))

return res

ตัวอย่างที่ค่อนข้าง obvious:

  • [1,2,3] กับ [3,4,5] ได้ 1.0
  • [1,2,3] กับ [-3,-4,-5] ได้ -1.0

ลองเอามาทดสอบกับราคาหุ้นดู ช่วงนี้ผมมีฐานข้อมูลราคาเป็นของตัวเองแล้ว (จากการไป pull ข้อมูลมาจากเว็บสาธารณะ) เก็บใส่ mongdb ไว้ ใช้คู่กับ Python สะดวกโยธินมาก (เอาเวลาตอนไหนไปทำวะเนี่ย)

ทดสอบกับ data 500 วันล่าสุด

  • CPF กับ CPALL = 0.96  -- ขึ้นลงตามกันโคดๆๆ .. แน่ล่ะ
  • CPF กับ TUF = 0.94 -- อาหารเหมือนกันมั้ง
  • BBL กับ KBANK = 0.94 -- กลุ่มธนาคารเหมือนกัน
  • PS กับ QH = 0.89 -- อันนี้อยู่ใน sector อสังหาเหมือนกัน
  • DTAC กับ ADVANC = 0.74 -- ไม่เยอะอย่างที่คิด
  • CPN กับ CPF = 0.37 -- ห้างเซ็นทรัล กับ อาหาร
  • CPF กับ CAWOW = –0.68 – ไก่ ลง ฟิตเนส ขึ้น ??
  • TRC กับ PS = -0.11 -- ไม่ค่อยเกี่ยวกันเท่าไหร่ …
  • ..

พวก quant ตัวเทพเค้าบอกว่า จริงๆ correlation ไม่ค่อยมีประโยชน์กับการ trade เท่าไหร่ ที่มีประโยชน์คือ cointegration เป็นคุณสมบติอีกแบบที่บอกว่า series สองอันมันจะแตกต่างกันได้บ้างเป็นบางเวลา แต่สุดท้ายแล้วต้องกับมาขึ้นลงคู่กันอีกรอบ คุณสมบัตินี้ทำให้เอาไปใช้ทำ pair trading ได้

สรุปว่าถ้าลองทำกับทุกคู่ในตลาด (ประมาณ 500 ตัว) น่าจะพอเห็นอะไรบ้าง … ไว้เวลาเอื้ออำนวยอีกรอบละกัน :)

ช่วงนี้ความสนใจเยอะจัด สับสนมาก เลือกทำไม่ถูก - -‘ อย่างนึงที่ทำก็คือไล่อ่านบลอกของไอดอลคนใหม่อยู่ (Max Dama) ใครสนใจเรื่องพวก automated trading ต้องลองเข้าไปดู มีอะไรให้เก็บเกี่ยวเยอะแน่นอน

Tags: , , Category: General

Comments (6) -

chakrit
chakrit
6/14/2010 3:28:17 AM #

โอ ... ทำไมคำว่า Automated Trading มันฟังดูน่ากลัวอย่างบอกไม่ถูก

กร
กร
6/14/2010 9:28:41 AM #

ที่จะเรียน AI สินะ

ว่าแต่มึงฟิตชิบหายเลยหวะ เหอๆ กูไร้อารมณ์ทำทุกสิ่งทุกอย่างเลยเนี่ย

ปล. ชอบประโยคนี้จังหวะ "แต่บางครั้งคนเราควร Reinvent the Wheel บ้าง เพื่อความบันเทิง Tong"

กร
กร
6/16/2010 10:35:28 PM #

เฮ้ย ถามไรหน่อย ค่านี้มันเอามาทำไรต่อได้บ้างอะ มันจะช่วยในการ automate trading ได้ไง มันจะช่วยบอกได้เหรอว่าหุ้นนี้น่าขายแล้ว
พยายามคิดแล้วไม่ค่อยเข้าใจหวะ

m3rlinez
m3rlinez
6/17/2010 7:32:57 PM #

ถ้าอยากดูพวกสัญญาณซื้อขายจริงๆน่าจะไปดูพวก indicator ว่ะ

ไอ่ correlation นี่จริงๆกุเห็นมาจากบลอกนี้ www.maxdama.com/.../...ing-new-indicator-vpci.html

ต้นฉบับมันวิเคราะห์แล้วสามารถสรุปได้ว่า ถ้าวันนี้มี volume การซื้อขายเยอะ วันต่อไปราคาจะเปลี่ยนเยอะตาม ก็คงเอาไว้ทำนายได้นิดหน่อยล่ะมั้ง ว่าราคามันจะแกว่งแค่ไหน

ส่วนที่กุลองคำนวณดู ตอนนั้นกุคิดเล่นๆว่าถ้ามันมีคู่นึงที่ตัวนึงขั้นอีกตัวลงชัดเจน ตอนตัวนึงขึ้นก็น่าจะเป็นสัญญาณที่ดีที่จะซื้ออีกตัว ... แต่มานั่งคิดดูรุสึกกุจะคิดผิดนะ คือมันน่าจะเอาผลต่างของราคาวันนี้กับวันก่อนหน้ามาหา corr มากกว่า ไม่ใช่เอาราคามาคิดตรงๆ - -'

ัyong
ัyong
3/25/2011 4:29:21 PM #

ไม่ค่อยเข้าใจเรื่อง cointegration ช่วยอธิบายให้หน่อยได้มั๊ยครับ ว่าเอาไปทำ pair trading ได้ยังไง

m3rlinez
m3rlinez
3/27/2011 8:36:31 PM #

@yong เท่าที่ผมเข้าใจคร่าวๆ คือถ้าจะทำ pair testing จริงๆ ต้องเอา series ของราคาหุ้น 2 ตัวมาตรวจสอบว่ามี conintegration กันจริงๆรึเปล่าก่อนน่ะครับ ถ้าไม่มีก็หมดโอกาสทำ pair trading

เรื่อง pair trading ลองดูใน wiki แล้วก็ดูตัวอย่างในนี้ก็ได้ luminouslogic.com/a-pairs-trading-example.htm ผมก็เคยเห็นแค่ในทฏษฎีไม่เคยปฎิบัติจริงเหมือนกัน ในไทยผมไม่แน่ใจว่าว่าจะทำยังไงให้พอร์ตเราทำ short sell ได้ ..

Add comment




biuquote
  • Comment
  • Preview
Loading






Most comments

khimkhim khimkhim
1 comments
weaw weaw
1 comments
domehuhu domehuhu
1 comments

RecentComments

Comment RSS