ช่วงนี้สนใจเรื่องแนวๆ quantitative มากเป็นพิเศษ อ่านไปเรื่อยๆก็สนุกดี แต่บางทีก็อดรู้สึกไม่ได้ว่านี่เอาเวลามาทำอะไรอยู่ฟะเนี่ย -*- ยิ่งทำๆไปแล้วยังไม่เห็นผลลัพธ์ที่จับต้องได้นี่ มันจะเริ่มหงุดหงิดๆ 555+
Correlation นี่มันเป็นความสัมพันธ์เชิงสถิติระหว่างข้อมูล (ในที่นี่ก็หมายถึงพวกราคานั่นแหละ) ซึ่งบางทีการที่ข้อมูลสองชุดมัน correlate กัน ก็ อาจจะ แปลว่ามีความสัมพันธ์อะไรบางอย่างอยู่เบื้องหลังก็ได้
สำหรับพวกข้อมูลที่เป็นตัวเลข (เช่นราคาหุ้น) การที่มัน correlate กันนั้นก็หมายถึงราคามันจะเปลี่ยนแปลงไปพร้อมๆกัน เช่น ตัวนึงขึ้นมาก อีกตัวก็ต้องขึ้นมากด้วย ตัวนึงนิ่ง อีกตัวนิ่ง หรือจะเป็นแบบตัวนึงขึ้นมากอีกตัวนึงลงมากก็ได้
ใน Excel มีฟังก์ชันสะดวกๆให้ใช้ชื่อ CORREL ส่วนใน Python เข้าใจว่าใน SciPy ก็มีเหมือนกัน แต่บางครั้งคนเราควร Reinvent the Wheel บ้าง เพื่อความบันเทิง :P
วิธีการตีความผลลัพธ์คือ
- ถ้าได้ค่าใกล้ 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 ต้องลองเข้าไปดู มีอะไรให้เก็บเกี่ยวเยอะแน่นอน
a9e077e1-051d-4d4d-bf56-b4f59f8ce345|0|.0
General
finance, statistics, trading