วันอาทิตย์ที่ 31 มกราคม พ.ศ. 2559

หลังจากไปงานสัมนาพี่มด แมงเม่าคลับ เลยเกิดความคัน อยากจะลองทำข้อมูลพื้นฐานสำหรับ Backtest ระบบดูบ้าง

Iหลังจากไปงานสัมนาพี่มด แมงเม่าคลับ เลยเกิดความคัน อยากจะลองทำข้อมูลพื้นฐานสำหรับ Backtest ระบบดูบ้าง

เลยเริ่มค้นคว้าและได้ลองทดสอบทำระบบขายหุ้นก่อนขึ้นเครื่องหมาย XD โดยโหลดข้อมูลการขึ้นเครื่องหมาย XD จากเวป SETTrade มาเก็บใน SQL Database (http://feeds.feedburner.com/Setorth-Xd)

ส่วนข้อมูลการขึ้นเครื่องหมาย XD ย้อนหลังผมได้ใช้จาก Excel คุณ Kanchit Paisan สำหรับคนที่สนใจสามารถดูลิงค์รายละเอียดจาก Page ที่ผมได้แชร์ไว้ก่อนหน้านี้

บทความนี้ค่อนข้างจะยุ่งยาก และน่าจะเหมาะสำหรับคนที่มีพื้นฐาน SQL Database อยู่แล้ว ผมจะขออธิบายคร่าวๆ ไม่ได้ลงลึกในรายละเอียด ถ้าสนใจก็สามารถศึกษารายละเอียดใน Amibroker นะครับ

Reference: http://www.amibroker.com/odbc.html

หลังจากสร้าง SQL Database แล้ว และทำการเตรียมข้อมูลเรียบร้อยแล้ว ก็จะมาสร้าง Amibroker ดึงข้อมูลจาก SQL Database

จากตัวอย่างในภาพ ผมได้โหลดข้อมูลหุ้น และ สร้างข้อมูลรายการ XD ของหุ้นเพื่อใช้สำหรับ Backtest ย้อนหลัง เนื่องจาก Amibroker เก็บข้อมูล XD ได้เพียงค่าเดียวซึ่งจะเป็นค่าล่าสุด ทำให้เราไม่สามารถ Backtest ย้อนหลังได้

ผมจึงต้องสร้าง Symbol_XD เพื่อเก็บข้อมูลเป็น Time Series สำหรับ Backtest ข้อมูลย้อนหลัง ตามตัวอย่าง



1 สร้าง Amibroker Database
1.1 File New Database
1.2 กำหนด Data Source = ODBC/SQL Univeral Data Plug-in
1.3 คลิก Configure เพื่อกำหนดการ Connect Database และ กำหนดการอ่านค่าแต่ละ Field ให้ตรงกับ SQL 


ตัวอย่าง Code การขาย โดยผมใช้ช่อง Open เก็บค่าเป็น 1 เพื่อให้ระบบสั่งขาย

SellXD= Foreign(Name()+"_XD","OPEN")==1; 


จากตัวอย่างระบบก็จะทำการขายล่วงหน้า 1 วัน
กรณีที่ XD วันจันทร์ เราก็สามารถสั่งให้ขายวัน ศุกร์ ได้โดยต้องอยู่ในขั้นตอนการเตรียมข้อมูล SQL

ผมได้ลอง Connect Database เพื่อผ่านข้อมูลใน Afl Code แต่ยังติดปัญหาไม่สามารถนำค่าที่อ่านได้มา Backtest ระบบได้ต่อ

สำหรับผมมันเพิ่งเริ่มต้น งานยาก งานหิน ยังรออยู่ข้างหน้าอีกเพียบ ขอเพียงสนุก และมีความสุขที่ได้ค้นคว้า ทดลอง 

หวังว่าบทความนี้จะเป็นไอเดีย ให้เพื่อนๆ นำไปค้นคว้า และทดลอง ทดสอบเล่นกันดูครับ ทำแล้วอยากแชร์ไอเดียก็ Message มาคุยกันได้ครับ

ขอบคุณพี่มดสำหรับไอเดียดีๆในการทำระบบ และพี่ๆที่ไม่ประสงค์ออกนาม ที่ให้คำแนะนำสำหรับแหล่งข้อมูลพื้นฐาน และไอเดียการขายก่อนขึ้นเครื่องหมาย XD




วันพฤหัสบดีที่ 14 มกราคม พ.ศ. 2559

ใคร Port ใหญ่ต้องอ่าน


Limit trade size as % of entry bar volume :



ปกติผมเทรดไม่มีปัญหาอะไรหรอกครับ เพราะ Port เล็กนิดเดียว

แต่อยากให้คน Port ใหญ่ลองอ่านดู
การจำกัดการซื้อหุ้น 1% ของปริมาณการซื้อขายหุ้นทั้งหมด (Volume)

สำหรับคนใช้ Efin Smart Data ก่อนอื่นเช็คก่อนว่าเราโหลด Data แบบใหนมา ซึ่งมี 2 แบบ
1 Volume / 100 
2 Volume ปกติ

กำหนดค่าใน Amibroker เพื่อ limit trade size เพื่อจำกัด % การซื้อขายหุ้น

Backtest setting->Portfolio tab
Limit trade size as % of entry bar volume 
1 Volume / 100   (กำหนดแล้วมีปัญหาอยู่ครับ)
2 Volume ปกติ.   กำหนด 1%

 

 ภาพ สำหรับคนที่ใช้  Vol /100 เมื่อ Backtest แล้วจำนวนเงินที่ซื้อ Limit ไว้น้อยกว่าจำนวน Limit จริงๆซึ่งอาจจะ ผิดอยู่นะครับ เดี๋ยวยังไงจะลองหาวิธีแก้ไขอีกที

ใครที่กำหนด Volume/100 ตอนนี้แก้ปัญหาโดยการคลิกถูก Don't use volume/100 เพื่อกลับมาใช้ Volume ปกติ

ถ้าจำนวนที่ซื้อเกิน 1% Amibroker จะตัดจำนวนเหลือ 1% ทำให้เราไม่ต้องเป็นเจ้าลากหุ้นซะเอง และให้ผลการ Backtest ใกล้เคียงกับการเทรดจริงๆ 

จำนวนหุ้นที่จะซื้อ เมื่อเทียบกับจำนวนซื้อขายระหว่างวัน ยิ่งมี % มากยิ่งมีโอกาสเกิด Slipage เวลาซื้อขายจริงมาก เช่น ราคาปิด 10 บาทอาจจะขยับเป็น 10.10 จะทำให้เกิดผลต่างการ Backtest กับการเทรดจริง

จากรูปประกอบ จะเห็นการเปรียบเทียบ จำนวนหุ้นที่ซื้อ ของทั้ง 2 แบบ จะเห็นว่าจำนวนเงินต่างกันพอสมควร

สำหรับคนที่ Backtest ระบบด้วยเงิน 1 ล้าน ระยะเวลา 5-6 ปีขึ้นไปลองเปรียบเทียบผลการ Backtest แบบ Limit กับ ไม่ Limit ดูนะครับ

Comment ดีๆจากเพื่อนร่วม Page

เวลาผม Backtest หลายๆปี ผมจะเช็คแบบ Limit 1 ครั้ง และ ไม่ Limit 1 ครั้ง เพราะการ Limit มันจะเหมือนการช่วยลด DD ในปีท้ายๆ คล้ายๆ Survival เหมือนกัน


Reference
https://www.amibroker.com/guide/w_settings.html

วันจันทร์ที่ 4 มกราคม พ.ศ. 2559

เพิ่มข้อมูล Buy & Hold ในรายงาน Backtest

    เพิ่มข้อมูล Buy & Hold ในรายงาน Backtest
 


1 กำหนด Buy & Hold Stat ในรายงานผลการ Backtest เพื่อเปรียบเทียบ โดยมีขั้นตอนดังนี้
   1.1 Click Backtester Settings (รูปไขควง)
   1.2 Click Tap Report
   1.3 Click Include Buy & Hold Stat  และพิมพ์ SET
   1.4 Click OK


2 เมื่อกำหนดค่าต่างๆเรียบร้อยแล้ว เมื่อกด Backtest ระบบจะแสดงผล Buy & Hold Stat ในช่องขวามือสุดก็จะแสดงผล Net Profit  หรือ Max. system drawdown เพื่อเปรียบเทียบให้ด้วย