Example of Single-indicator based strategy with Python(Bollinger bands)

บทความนี้เราจะนำตัวอย่างการสร้างกลยุทธในการเทรดจาก Bollinger Bands ด้วย Python มาฝากกันค่ะ โดยเราจะแสดงให้เห็นว่า Python เป็นภาษาที่ยืดหยุ่นมาก สามารถใช้ในการเทรดได้อย่างสมบูรณ์ ตั้งแต่การอ่านข้อมูล วิเคราะห์ข้อมูล สร้างกลยุทธ์ สร้างสัญญาณซื้อขาย คำนวนค่า Return และ ค่าวัดผลอื่นๆ นอกจากนี้ Python ยังสามารถเชื่อมต่อกับ Interactive Broker เพื่อส่งสัญญาณ ซื้อ – ขาย ได้อัตโนมัติได้แบบสบายๆ อีกด้วย

FlywithPython

อย่าให้เสียเวลาเรามาเริ่มกันเลยดีกว่า การเทรดโดยเขียนโปรแกรมด้วยตัวเองทั้งหมด แบบไม่ใช้ตัวช่วยเลย ไม่ได้ยากเย็นอะไรนัก มีเพียง 5  ขั้นตอนหลักๆ เท่านั้น ดังนี้ ในบทความนี้เราจะยังไม่แจก source code แต่จะมีการปล่อยตัว source code ภายหลัง เพราะจริงๆการทำโปรแกรมเทรดพวกนี้ทำในโปรแกรมสำเร็จรูปอาจจะง่ายกว่าเยอะ แต่ในขั้นต่อไปเรื่องที่เราต้องการนำข้อมูลไปวิเคราะห์ในระดับที่เป็นเชิงลึกขึ้น ตรงนั้นโปรแกรมสำเร็จรูปไม่อาจจะตอบโจทย์เราได้นั่นเอง นั่นเป็นเหตุผลให้ Foundation อย่างการสร้างโปรแกรมการเทรดอย่างง่ายๆที่สามารถทำในโปรแกรมสำเร็จรูปได้ง่ายนั้นออกมาเขียนเอาเองได้ให้นั้นสำคัญเพราะต่อไปเราจะนำพาไปในระดับที่สูงกว่านี้แน่นอน

Step1 :  Download dataset

ขั้นตอนแรกเป็นขั้นตอนที่ง่ายที่สุด ซึ่งก็คือ การอ่านข้อมูลหุ้นเข้ามานั่นเอง การอ่านข้อมูลเข้ามาสามารถทำได้หลายวิธีด้วยกัน ไม่ว่าจะเป็นการอ่านข้อมูลโดยตรงจากเว็บไซต์ผู้ให้บริการเจ้าต่างๆ เช่น Google, Yahoo หรือ  Quandl เป็นต้น หรือ อีกวิธีนึงก็คือ การอ่านข้อมูลจาก ไฟล์ .csv หรือ database ที่ได้ทำการ download ไว้แล้ว

Screen Shot 2017-09-23 at 15.58.01.png
Dataset

Step 2 : Select Indicator(Feature) and Calculation

ขั้นตอนที่ 2  แน่นอน เมื่อมีข้อมูลแล้ว เราก็สามารถทำการคำนวณค่า indicator ที่เราต้องการใช้ในการสร้างกลยุทธ์ในการเทรด ซึ่งในที่นี้ เราจะทำการคำนวณค่าะ Bollinger Bands ซึ่งสามารถทำได้ง่ายมากๆ โดยการเรียกใช้ฟังก์ชันในไลบารี่ Talib การคำนวณมีแค่บรรทัดเดียวเท่านั้น ดังนี้

cpf[‘Upper’], cpf[‘Middle’], cpf[‘Lower’] = ta.BBANDS(np.asarray(cpf[‘Close’]),
timeperiod=14, nbdevup=2, nbdevdn=2, matype=0)

เราก็จะสามารถคำนวณค่า Bollinger Bands ของทั้งข้อมูลได้ และ ยังสามารถแสดงผลได้อย่างสวยงาม ดังนี้

Screen Shot 2017-09-26 at 03.00.12

 

มาดูภาพขยาย Bollinger Bands กันชัดๆ อีกหน่อย จากรูปภาพด้านล่าง จะเห็นได้ชัดว่า เมื่อเราคำนวณ Bollinger Bands ในการแสดงผล เราจะ plot ข้อมูล 4 ชุดด้วยกัน คือ

  • ข้อมูลราคา –> (กราฟเส้นหนาสีดำ)
  • ข้อมูล Middle ซึ่งโดยปกติจะคำนวณได้จากค่า Moving Average –> (เส้นประสีน้ำเงิน)
  • ข้อมูล Upper and Lower bands ซึ่งโดยปกติจะคำนวนได้จากการ +,-  2*STDVE จากเส้น Middle นั่นเอง –> (เส้นประสีเขียว และ แดง)

 

Screen Shot 2017-09-24 at 13.31.46.png
Bolliger Bands

Step 3 : Setting Indicator(Bollinger Bands) trading signals

เมื่อคำนวณค่าต่างๆ ที่เกี่ยวข้องกับ Bollinger Bands เรียบร้อยแล้ว ขั้นตอนต่อไป ก็คือ การคิดกลยุทธ์ที่เราจะได้ในการสร้างสัญญาณซื้อขาย ในที่นี้ เราจะลองสร้างสัญญาณง่ายๆ กันก่อน โดย

  • เราจะเข้าซื้อเมื่อ ค่า Close ของสองวันที่แล้วมีค่าน้อยกว่า Lower Band ในขณะที่ ค่า Close  เมื่อวานมีค่ามากกว่า Lower Band (ค่า Close วิ่งตัดเส้น Lower Band ขึ้นมา)
  • เราจะขายเมื่อ ค่า Close ของสองวันที่แล้วมีค่าน้อยกว่า Upper Band ในขณะที่ ค่า Close  เมื่อวานมีค่ามากกว่า Upper Band (ค่า Close วิ่งตัดเส้น Upper Band ขึ้นมา)

นี่เป็นการสร้างสัญญาณอย่างง่ายที่สุดนะคะ โดยนำเส้น Lower Band มาใช้ในการตัดสินใจเข้าซื้อ และ ใช้เส้น  Upper Band ในการตัดสินใจขาย ด้วยสมมุติฐานที่ว่า เมื่อไหร่ก็ตามที่ราคาวิ่งออกนอกช่วง  Upper หรือ ​Lower band ดังกล่าว ในที่สุดแล้ว ราคาก็ต้องต้องวิ่งกลับตัวเข้าสู่ช่วงตรงกลางระหว่างเส้น Upper และ Lower Bands นั่นเอง

  • เมื่อราคาวิ่งเลยขึ้นเหนือเส้น Upper Band –> สามารถตีความหมายได้ว่า ราคาขณะนี้มีความเป็นไปได้ที่จะ Overprice ดังนั้น สามารถคาดหวังให้ราคาตกกลับได้ในอนาคต –> ส่งผลให้มีการขาย
  • เมื่อราคาวิ่งลงต่ำกว่าเส้น Lower Band –> สามารถตีความหมายได้ว่า ราคาขณะนี้มีความเป็นไปได้ที่จะ Underprice ดังนั้น สามารถคาดหวังให้ราคาดีดขึ้นมาได้ในอนาคต –>  ส่งผลให้มีการเข้าซื้อ

Screen Shot 2017-09-24 at 12.51.50.png

มาดูผลลัพธ์ที่ได้จากการสร้างสัญญาณโดยใช้ Python จากกลยุทธ์ข้างต้นกันค่ะ

screen-shot-2017-09-24-at-23-53-33.png
Buy and Sell signals from Bollinger Bands

มาดูภาพขยายสัญญาณที่ได้จาก Bollinger Bands กันชัดๆ อีกหน่อย

23191890_10214561544853042_1108798115_o

จากรูปด้านบนจะเห็นได้ว่า เมื่อราคา Close (เส้นสีดำ) วิ่งตัดเส้น Lower Band (เส้นสีแดง) ขึ้น ระบบก็จะสร้างสัญญาณ “ซื้อ (+1 คือ สัญญาณ เข้าซื้อ)” ขึ้นมา ในทางกลับกัน เมื่อราคา Close ตัดเส้น Upper Band(เส้นสีเขียว) ขึ้น ระบบก็จะทำการสร้างสัญญาณ “ขาย (-1 คือ สัญญาณ ขาย)” ขึ้น

Step 4 : Create trading strategy backtest

เมื่อได้สัญญาณ ซื้อ – ขาย มาแล้ว ขั้นตอนนี้เราก็จะทำการสร้างกลยุทธ์เพื่อ กำหนดว่า ณ ช่วงเวลาหนึ่งๆ หุ้นตัวนี้ จะอยู่ใน Portfolio ของเราหรือไม่ เช่น เมื่อมีสัญญาณ ซื้อเข้ามา ระบบก็ทำการสั่งซื้อ และ เมื่อคำสั่งสมบูรณ์ position นั้นก็จะถูกใส่เข้าไปใน Portfolio ในขณะเดียวกัน ถ้ามีสัญญาณขาย ระบบก็จะลบหุ้นตัวนั้นออกไปนั่นเอง

screen-shot-2017-09-25-at-12-45-40.png
Portfolio crated from Bollinger bands signals

มาดูรูปขยายสัญญาณภายใน Portfolio กันชัดๆ ค่ะ

Screen Shot 2017-09-26 at 03.37.39.png
Inside portfolio

จากรูปด้านบน จะเห็นได้ว่าเมื่อมีการ ซื้อ เกิดขึ้น เมื่อสถานะได้รับการยืนยันแล้ว ระบบจะใส่ position นั้นลงใน portfolio (1 หมายถึง หุ้นอยู่ภายใน portfolio) ในทางกลับกัน เมื่อเกิดการ ขาย ระบบก็จะเปลี่ยนสถานะของ position นั้นเป็น 0 ซึ่งหมายความว่า หุ้นไม่อยู่ใน porfolio นั่นเอง

Step 5 : Calculate returns

ก่อนที่จะทำการยืนยันกลยุทธ์ และ ทำการเชื่อมต่อกับ Interactive Broker เพื่อให้มีการส่งสัญญาณอัตโนมัติ เราก็จะมีการคำนวณค่า Return กันก่อน โดยเอาผลช่วงเวลาที่หุ้นอยู่ในพอร์ตและอยู่นอกพอร์ตมาคำนวนเมื่อเราเขียนเองเราก็มีอิสระที่จะใส่อะไรหลายๆอย่างในการเทสได้ เช่นCommission Slippage แม้กระทั้งการทำ Simulation ได้หลากหลายรูปแบบไม่จำเป็นต้องเลือกเฉพาะที่มีอยู่ในโปรแกรมสำเร็จรูปเท่านั้น โดยในที่นี้จะทำการคำนวณโดยคิดค่า Commission 1% ต่อเทรด ก็จะได้ผลลัพธ์ดังนี้

figure_1-1.png

ยังไม่ต้องกังวลเรื่องผลมาก มันย่อมไม่ดีมากอยู่แล้วเพราะนี่มันแค่การคำนวนในมิติเดียวยังไม่ได้มีการนำ ML หรือ Risk Management มาช่วยแต่อย่างใดแต่ในโพสต่อไปเราจะอธิบายเรื่องการคำนวนและ Hypothesis ของการทำระบบเทรดแบบ Indicator based และ Machine Learning Based กันน

นอกจากค่า Return แล้ว ยังมีค่า Common matrix ที่จำเป็นอื่นๆ อีกมากมาย ที่เราควรจะต้องมีการคำนวณ เช่น Sharpe Ratio หรือ Drawdown เป็นต้น ซึ่งในส่วนนี้เราจะยังไม่ได้แสดงให้ดูนะคะ เพราะจุดมุ่งหมายของบทความนี้ คือ ต้องการแสดงขั้นตอนในการทำงานด้วยการเขียนโปรแกรมเองเช่น Python ในการเทรดเท่านั้น หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยแก่ผู้ที่สนใจ และ มีความต้องการจะสร้างระบบเทรดอัตโนมัติด้วยตนเองโดยไม่ใช้โปรแกรมสำเร็จรูป หวังว่าคงจะเห็นภาพการทำงานโดยรวม ในโอกาสหน้าทางเราก็จะนำ source code มาฝากกันต่อไปค่ะ

 

 

 

Advertisements

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