วันศุกร์ที่ 30 ธันวาคม พ.ศ. 2559

สรุปสิ้นปี 2016

ปีนี้เป็นเริ่มต้นจาก Novice ย่างเข้าสู่ Beginner ของการเป็น System Trade  ปีนี้ได้เปลี่ยนตัวเองมาเทรดตามระบบใน Time Frame Day โดยทดสอบรันระบบไว้ 3 Port ส่วนตัวแล้วพอใจในระดับนึง โดยมีผลตอบแทนชนะตลาด 2  Port และ แพ้ตลาดอยู่ 1  Port หวังว่าปีหน้าจะสามารถทำได้ดีกว่านี้

ปีนี้นับว่าเป็นปีแห่งการพัฒณาตัวเอง มากที่สุดปีนึง ผมโชคดีมากที่ได้รู้จักพี่คนนึงที่ยอมสละเวลาสอนเกี่ยวกับการทำระบบด้วย System Trade ให้และยังให้ระบบตัวอย่างมารันเทส เป็นจุดเริ่มเต้นเมื่อประมาณ 2 ปีก่อนเลยเป็นจุดเริ่มต้นของการเรียนรู้

การมีกลุ่มเพื่อนที่ช่วยกันพัฒณาระบบ ช่วยให้เราพัฒณาได้เร็วขึ้น  โชคดีที่ได้เพื่อนช่วยกันทำโปรแกรม โอนข้อมูลมาเก็บเป็น SQL Database เนื่องจากมันทำให้เราสามารถ จัดการกับข้อมูลได้ดีมากขึ้น เช่นข้อมูล NVDR / XD / XR / XW ก็สามารถ Export จากเวปมาเก็บใน Database ได้  แม้ข้อมูล Fundamental ปีนี้เราจะยังไม่สำเร็จ  

ข้อดีอีกอย่างของการใช้ SQL Database คือการที่เราลบข้อมูลออก แล้วค่อยๆ Insert Data เข้ามาทีละวันสามารถทดสอบระบบแบบ Future Leak ได้ โดยจำลองให้เหมือนมี Data เข้ามาใหม่ทุกวัน

นอกจากเพื่อนในกลุ่มที่ช่วยกันพัฒณาระบบ ยังมีเพื่อนๆ พี่ๆ ที่พูดคุยกันเรื่อง System Trader อีกหลายกลุ่ม บางกลุ่มอาจจะไม่ได้คุยกันทุกวัน บางกลุ่มอาจจะคุยกันเกือบทุกวัน ขอบคุณทุกๆคนที่ช่วยตอบปัญหาในบางเรื่องที่ผมขอปรึกษาไป แม้บางคนจะไม่รู้จักตัวจริงๆกันเลยก็ตาม

มีโอกาส เข้าไปศึกษาเกี่ยวกับการทำ EA ด้วย MT5   ในตลาดบ้านเรา ซึ่งมี 2 แนวทาง
1 คือเปิด Port แล้วพัฒณา EA ด้วยตัวเอง แล้วรันเองที่เครื่องของเรา (ต้องรอตลาดอนุมัติ  คงจะอีกนาน)
2 คือเปิด Port กับทางโบรก และ นำ Model ไปให้ทางโบรก ส่งเรื่องไปยังตลาดเพื่ออนุมัติ พัฒณา EA และให้โบรกรันระบบให้  (วิธีการนี้ยังใช้ได้อยู่สำหรับคนที่สนใจ แต่ทุนเริ่มระบบอาจจะมากหน่อยลองสอบถามแต่ละโบรกเอาเองนะครับสำหรับคนที่สนใจ)

ทีมเราได้มีโอกาสคุยทั้ง 2 แนวทางกับโบรก แม้ว่าสรุปสุดท้ายแล้ว EA เราจะยังไม่ได้เกิด แต่อย่างน้อย Model ที่เราจะนำไปพัฒณาเป็น EA ที่เราตัดสินใจรันคู่ไปเพื่อเทสกับระบบที่ทำ EA กับ Port จริงโดยโดยใช้ Amibroker ก็ยังสามารถทำกำไรได้

ข้อดีของการทำ EA คือ การใช้ Real-time Data ถ้าใช้ระบบ Breakout เราก็สามารถซื้อได้ ณ ราคาที่ Break ไม่ต้องรอจบวัน

ข้อเสียคือ การที่จะให้โบรก รันระบบให้  การที่เราจะปรับปรุง หรือ เปลี่ยนแปลง จะต้องทำตามเงื่อนไขของโบรก ซึ่ง อาจจะขาดความยืดหยุ่นกว่า การที่เรารันระบบเอง รวมทั้งเงินทุนที่ต้องเตรียมไว้เยอะพอสมควร เพราะโบรกก็ต้องมีค่าใช้จ่ายในการ พัฒณา และ รันระบบให้กับเรา

ปีนี้ทีมเราได้พัฒณา System Monitor ขึ้นมาใช้งาน เช่น ผลตอบแทน ของระบบ เทียบกับตลาด
Equity Curve เมื่อเทียบกับ SET อันนี้จะช่วยในแง่ ประเมินว่า ระบบเราทำงานเป็นยังไงในแต่ละภาวะตลาด
Daily Return  จะแสดงว่าในละวัน Port เรา +- กี่ % เราจะอยู่กับระบบได้นานขึ้นกับตัวนี้แหละ บางระบบมันสวิงมากทำให้เราอยู่กับระบบลำบาก
Position Size / Cash  จะแสดงในแต่ละช่วงเวลา ระบบเราจะถือหุ้น และ มีเงินสดในมือ ประมาณใหน ในภาวะตลาดขาลง ระบบถือเงินสดมากใหม หรือ ในภาวะตลาดขาขึ้น ระบบถือหุ้นมากน้อยแค่ใหน

Value at Risk มีโอกาสดู Facebook Live งานสัมนาของครูเสกพูดเรื่อง Value at Risk เลยเป็นจุดเริ่มต้น ให้ทีมเรานำมาศึกษาต่อ และได้นำ Equity / Daily Return มาคำนวณ Value at Risk อันนี้ต้องขอบคุณครูเสกสำหรับความรู้  และเพื่อนในกลุ่มที่ช่วยพัฒณาเครื่องมือขึ้นมาใช้งานร่วมกัน


     คนที่ช่วยพัฒณา VAR ให้กับกลุ่มครับ ฝากติดตามผลงาน ได้ที่ Page เลยนะครับ Market-Lizards

ปีนี้เนื่องจากตลาด Panic หนักๆ  2 รอบ ทำให้เราเรียนรู้ และได้ลองนำ Daily Return มาวิเคราะห์ และได้ลองมาใช้เป็นเงื่อนไขการซื้อขาย โดยใช้ Amibroker Custom Backtest ก็เป็นอีกวิธีที่ช่วย Limit ความเสี่ยงได้

การได้เข้าร่วม โครงการ Tfex Algorithmic 2016 โครงการของจุฬา ทำให้เรียนรู้การคำนวณ Price Value / Gordon Model โดย EPS และ RF และได้เห็นน้องๆ ที่เรียนมาทางสาย Finance ตรงๆ เค้าเก่งๆกันทั้งนั้น นับว่าได้ประสพการณ์ที่ดี

efin Trade+ CNS  คือ โปรแกรมที่เข้ามาช่วยให้ สามารถส่งคำสั่งเป็น Batch Order  เมื่อเรา Backtest แล้วระบบจะสร้างรายการหุ้นที่จะขาย และรายการหุ้นที่จะซื้อ เป็น Text file ซึ่งเราจะสามารถ Import เข้ามาเพื่อส่ง Order เป็นชุดนับว่าเป็นโปรแกรมที่ช่วยให้ คนใช้ Amibroker สามารถส่งคำสั่งได้สะดวกสุด ณ ตอนนี้


ปี 2017 ยังเป็นปีแห่งการเรียนรู้ของผมอีกเช่นกัน วางโครงการคร่าวๆไว้
ศึกษาเรื่องการสร้าง Amibroker Plug-in
ศึกษาเรื่อง Fundamental เพื่อนำมาสร้างระบบ เป็นโครงการต่อเนื่องจากปีที่แล้ว
ศึกษาและจะลองนำ ข้อมูลของทาง SiamQuants มาลองพัฒณาระบบดูบ้าง Data Version 2  นับว่ามีข้อมูล Fundamental ที่น่าสนใจ อีกทั้งมีรูปแบบรายงาน สำเร็จรูปให้ใช้อีกหลายแบบ



วันอาทิตย์ที่ 18 ธันวาคม พ.ศ. 2559

ผลการนำระบบ Breakout Vs Mean Reversion รันในการแข่งขันในรายการ Supertrader


ปีนี้ทดลองใช้ระบบ Breakout VS Mean Reversion  รันคู่กันใน Port เดียว
ลองทดสอบแนวคิด การใช้ Multi Strategy System ที่มีการทำงานที่แตกต่างกันคือซื้อในจุดที่ต่างกัน โดยระบบจะซื้อหุ้นเพียงอย่างเดียว โดยใช้ TF-Day

เริ่มต้นมาระบบ Breakout เจอตลาด Panic Sell ลบไปประมาณ -5%  
ระบบ Mean Reversion ก็ทำหน้าที่ได้ดีพอสมควรทำให้ Port ดีดกลับมาพร้อมตลาดได้
ในจังหวะที่ตลาด -8% ระบบ Breakout มันไม่ทำงาน เพราะภาวะตลาดแบบนั้นคงไม่มีหุ้นเบรก

ตลาดเกิด Panic Sell รอบสอง คราวนี้ระบบ Breakout ไม่มีหุ้นเลยรอดตัวเพราะ Indicator ที่ใช้มักจะยังไม่ส่งสัญญาน เนื่องจากมันโดนตบลง แล้วลากกลับแบบ รวดเร็ว

เลยปล่อยให้ ระบบ Mean Reversion ซื้อทำให้สามารถฟื้นจากการติดลบมาทรงๆตัวแถวๆทุนได้
และระบบ Breakout เริ่มมีสัญญานซื้ออีกรอบก็บวกมาได้  1.99% ก็จบรอบการแข่งขันพอดีต้องขายหุ้นทุกหมดออก และรอเริ่มรอบใหม่

ระบบบางระบบ Back-test แล้ววัด Annual Return อาจจะไม่ได้ผลตอบแทนที่ดี เพราะในแต่ละปีมันไม่ได้เทรดตลอดเวลา เลยต้องไปดู Win% ที่มันทำได้และดู Payoff Ratio แทน

ระบบบางระบบผล Back-test จะให้ผลตอบแทนเป็นบวก แต่การที่จะนำไปใช้จริงๆต้องเข้าใจการทำงานของระบบ จึงจะสามารถตัดสินใจซื้อตามระบบได้

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

หมายเหตุ
การทดสอบในระยะสั้นๆเพียง 2-3 เดือนไม่สามารถบอกได้ในการสร้างผลตอบแทนในระยะยาว
แต่การทดสอบรันระบบครั้งนี้ มันทำให้ผมได้ประสพการณ์ และได้เห็นการทำงานของระบบ ในภาวะตลาดจริงๆ มันมี อารมย์ โลภ กลัว ทำให้เราเข้าใจระบบมากขึ้นนะครับ




วันพุธที่ 9 พฤศจิกายน พ.ศ. 2559

วิธีแสดงกราฟ เขียว แดง และแสดงเงื่อนไขการซื้อ ขาย

วิธีแสดงกราฟ เขียว แดง และแสดงเงื่อนไขการซื้อ ขาย



Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+ " XD Date:"+ DateTimeToStr(GetFnData("ExDividendDate")) + " Aux1: "+WriteVal(Aux1,1.2) +" Aux2: "+ WriteVal(Aux2,1.2)+ "\n\n"+
"Open:"+O+" High:"+H+" Low:"+L+" Close:"+C+ "\n\n"+
EncodeColor(colorWhite)+"buyCon1: : "+WriteIf(buyCon1,EncodeColor(colorGreen)+"Y",EncodeColor(colorRed)+"N")+"\n"+
EncodeColor(colorWhite)+"buyCon2: : "+WriteIf(buyCon2,EncodeColor(colorGreen)+"Y",EncodeColor(colorRed)+"N")+"\n"+
EncodeColor(colorWhite)+"buyCon3: : "+WriteIf(buyCon3,EncodeColor(colorGreen)+"Y",EncodeColor(colorRed)+"N")+"\n\n"+

EncodeColor(colorWhite)+"sellCon1: : "+WriteIf(sellCon1,EncodeColor(colorGreen)+"Y",EncodeColor(colorRed)+"N")+"\n"+
EncodeColor(colorWhite)+"sellCon2: : "+WriteIf(sellCon2,EncodeColor(colorGreen)+"Y",EncodeColor(colorRed)+"N")+"\n";

B1=(BarsSince(Buy )<BarsSince(Sell)) AND !IsNull(BarsSince(Sell));
B2=BarsSince(Buy )>0 AND (IsNull(BarsSince(Sell)));
Color=IIf(B1 OR B2,colorGreen,colorRed);
Plot( C, " Close Price", Color , styleBar | styleThick);


วันอังคารที่ 25 ตุลาคม พ.ศ. 2559

สำคัญที่จิตใจ


จากที่เคยเล่าใน Page เมื่อหลายวันก่อน เกี่ยวกับการการหาสัญญานซื้อหุ้น เมื่อราคาหุ้นส่วนใหญ่ในตลาด ราคาหลุดออกนอกเส้น Bollinger Band ด้านล่าง 

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

ระบบแรก จะซื้อเมื่อเกิดสัญญาน ราคาหุ้นส่วนใหญ่หลุดกรอบ Bollinger Band และใช้ SET Candle Stick มาช่วยในการกำหนดสัญญานซื้อ



ระบบที่สอง จะซื้อเมื่อเกิดสัญญาน ราคาหุ้นส่วนใหญ่หลุดกรอบ Bollinger Band และรอจนกว่าราคาหุ้นส่วนใหญ่จะกลับเข้ามาในกรอบ Bollinger Band ซึ่งจะช้ากว่าระบบแรก 1 วัน



ส่วนการเลือกซื้อหุ้น ผมได้ทดลองเลือกจากหุ้นที่ PE หลุดกรอบ Bollinger Band และวกกลับเข้ามาในกรอบ

จากผลการทดลองนั้นพบว่า ทั้ง 2 ระบบให้ผลตอบแทนเป็นบวก โดยผมได้แสดง Daily Return ในแต่ละวันในกราฟให้ดูเบื้องต้น

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

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

ระบบแรก ผมจำได้ว่า ตอนเช้าตลาดได้ตลาดได้ลบกันไปประมาณ 30 กว่าจุด พอตกบ่ายหลังจากที่ทราบข่าว ราคาก็ได้ดีดกลับ และมาปิดบวกท้ายตลาด

ณ วันนั้น เกิดสัญญานซื้อ  แต่ข่าวอย่างเป็นทางการยังไม่ออก ต้องถามใจตัวเองว่า กล้าซื้อตามสัญญานหรือเปล่า  จะเกิดอะไรขึ้น เมื่อข่าวออกอย่างเป็นทางการ

ระบบที่สอง หลังจากทราบข่าวอย่างเป็นทางการ ตลาดได้ดีเปิดบวกมาประมาณ 50 จุดคุณจะกล้าซื้อตามเมื่อสัญญานเกิด ณ สิ้นวันหรือไม่ ตลาดบวกมาตั้ง 50 จุด

ผมเชื่อว่า ถ้าเราได้ผ่านเหตุการณ์นี้แล้ว และได้มีประสพการณ์มาแล้ว มันไม่เหมือนการดูกราฟจากอดีตย้อนหลัง แต่เมื่อเราอยู่ในสถาณการณ์จริง มันมีอารมย์ ความกลัว และเราก็ต้องหาทางรับมือกับมัน

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

คำถาม และสิ่งที่จะต้องนำไปพัฒณาระบบต่อไปคือ ระบบเราจะเป็นยังไงเมื่อเกิดเหตุการณ์แบบนี้ขึ้นอีก
หรือ ระบบเราจะเป็นยังไง เมื่อเกิดการคล้ายๆกันคือมีการ Panic ขายกระหน่ำ และ ราคา ไม่ดีดกลับแบบนี้

ขอบคุณ และยกเครดิต แนวคิดให้กับ Page PK's Trading Daily 

วันจันทร์ที่ 10 ตุลาคม พ.ศ. 2559

10/10/2016 วันนี้ตลาด -47% คิดเป็น 3.15% มูลค่าซื้อขาย 74142.56 ล้านบาท


10/10/2016 วันนี้ตลาด -47% คิดเป็น 3.15% มูลค่าซื้อขาย 74142.56 ล้านบาท
หุ้นได้ดีดมาเบรก Bolinger Band ล่างถึง 27% เป็นวันนึงที่ตลาดมี Volatility มาก



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

7 แนวคิดที่จะช่วยให้เราเทรดไปตามระบบได้

เคยใหมครับ ขณะที่เทรดไปตามระบบ มักจะมีสิ่งยั่วยวนให้เรา ทำให้เราไม่สามารถคุมจิตใจไม่เทรดตามระบบได้


1 เพื่อน หรือ Line group คนเทรดหุ้นส่วนใหญ่ก็ต้องมี กลุ่ม Line ก็จะมีเพื่อนๆ เอากำไรมาคุยกันเช่น วันนี้กำไร หุ้น XYZ-W1 150% แล้วนะ พวกนี้ก็อาจจะทำให้เรา ไขว้เขว เกิดความโลภ



"พอใจในผลกำไรที่เรามี ระบบสามารถทำกำไรได้ตามแผน แค่นี้ก็หรูแล้ว"


2 เวลาตลาดขาขึ้น ราคามักจะสูง ระบบ Trend Following บางครั้งก็ต้องรอให้หุ้นมี Trend และ ราคาอาจจะปรับตัวมาซักระยะ จนไม่กล้าซื้อตามระบบ

เราต้องเข้าใจในระบบที่เราใช้. และลองศึกษาพฤติกรรมการซื้อขายในอดีต

"เราซื้อ Trend ไม่ได้ซื้อราคา"

3 เคยขาดทุนกับหุ้นตัวนี้มา ช่วงต้นเทรนบางครั้งระบบอาจจะ Cutloss หุ้น A และพอผ่านไปซักระยะ ระบบให้ซื้อใหม่ตามระบบ. เรามักจะ แหยง และไม่กล้าที่จะซื้อตามระบบ

"ระบบมันยังไม่กลัวเลย เราจะกลัวทำไม"


4 ดูจำนวนเงิน ขาดทุน และ ตัวเลขผลกำไรใน Port มากเกินไป

ระบบ Trend Following มักจะ Cutloss ออกไปช่วงแรกๆ และถือหุ้นที่กำไร. ดังนั้นช่วงแรกๆ. Balance Curve กับ Equity Curve มักจะห่างกันมาก ถ้าเราไปโฟกัสมาก อาจกลัวจนขายหุ้นก่อน เพราะอยากเห็นเงินใน Port กลับมาเท่าทุนก่อน


"เราเป็นนักลงทุนระยะกลาง และระยะยาว ผลตอบแทนต้องดูยาวๆ"


5 การอ่านบทความว่าตลาดขึ้นมามากแล้ว หรือ  ภาวะเศรษฐกิจโลกไม่ดี 

บางบทความเค้าอาจจะเขียนใน สภาวะเศรฐกิจภาพรวมในระยะยาว ที่ยังไม่เกิดในปัจจุบัน. แต่เมื่อเราอ่านแล้วจะเกิดความ กลัว และไม่ทำตามระบบ


"ระบบเราทดสอบผ่านมาแล้ว อย่างมากก็แค่ Drawdown"


6 กลับไปโฟกัสในแผนการเทรด. 

กลับไปโฟกัสในแผนการเทรด และตรวจสอบดูการทำงาน ว่าระบบยังทำงานได้เหมือนที่เทสมาหรือไม่ และดูว่าถ้าเราทำตามแผน ผลลัพท์จะเป็นอย่างไร

"เรา Forward Test มาแล้วต้องเชื่อมั่น"


7 รับรู้และปล่อยวาง หุ้นมีขึ้นมีลง มีกำไร ก็ต้องมี drawdown เราไม่มีทางซื้อจุดต่ำสุด และขายที่จุดสูงสุดได้ตลอดเวลา 

"ฝึกสั่งจิต ให้ รับรู้ และ ปล่อยวาง"

ถ้าเรามีเป้าหมายระบบที่ชัดเจน. เราก็จะเทรดไปตามระบบ แบบมีความสุข




ปล. ก่อนรันระบบควรจะมีเครื่องมือ หรือ ค่าสถิติที่เรายอมรับได้ ว่าถ้าระบบมาถึงจุดนี้แล้วเราจะเลิกเทรด
ถ้าระบบมันตายเราก็ต้องยอมรับ และหยุดใช้ระบบไปนะครับ อย่าไปฝืน

ขอบคุณเพื่อนทาง Line ที่อุตส่าห์เป็นหน้าม้า โพสข้อความเอามาประกอบบทความ


 


วันเสาร์ที่ 30 เมษายน พ.ศ. 2559

7 ขั้นตอน กับการเริ่มศึกษา Amibroker System Trade ด้วยตัวเอง


1 โหลด eBook ฟรีมาอ่านกันก่อน
http://www.blueowlpress.com/123-2/introduction-to-amibroker

2 โหลดโปรแกรม Amibroker ตัวทดลองมาติดตั้ง และคู่มือมาอ่านและลองทำตาม
http://www.amibroker.com/download.html
http://www.amibroker.com/bin/UsersGuide.pdf

3 โหลด eFin Smart Data ตัวทดลองใช้ เพื่อจะได้มีข้อมูลสำหรับทดสอบเบื้องต้น
http://helponline.efinancethai.com/index.php?option=com_content&view=category&id=103&Itemid=1118

4 ศึกษาจาก Youtube ลอง Search Amibroker แล้วลองดูมีวีดีโอฟรีๆดีๆ ให้ศึกษามากมาย
https://www.youtube.com/results?search_query=amibroker

5 ศึกษาตัวอย่างการเขียนโปรแกรม และตัวอย่างการคิดระบบจากเวปไซต์ต่างประเทศ แค่ 2 เวปนี้ก็มี Code ให้อ่าน ให้ทดลองกันเยอะเลย
http://www.marketcalls.in/amibroker/one-timeframing-and-amibroker-afl-scanner.html
http://www.wisestocktrader.com/indicatorpasties

6 ควรจะสั่งซื้อหนังสือ Quantitative Trading Systems เป็นหนังสือเล่มแรก ที่ชี้ทางในการพัฒณาระบบให้ผมเป็นอย่างดี ส่วนใครอยากเขียนแบบ Advance พวก Custom Backtest ก็อาจจะสั่ง Quantitative Technical Analysis มาพร้อมกันเลยประหยัดค่าส่ง


สั่งซื้อได้จากทางเวปไซต์ http://www.blueowlpress.com/123-2

7 ศึกษาจากเวปไซต์ของคนไทยด้วยกันนี่แหละ เก่งๆก็มีหลายๆคนเลยครับลองหาๆกันดู
http://mangmaoclub.com/   มีหนังสือด้วยลองหาอ่านกันได้
http://www.cwayinvestment.com/

หากลองแล้วติดปัญหาอะไร ก็สอบถามกันมาได้ครับถ้าผมพอทราบจะช่วยแนะทางให้

วันอังคารที่ 26 เมษายน พ.ศ. 2559

แก้ปัญหา Profit Table ไม่ตรงกัน


จากที่เคยนำ Code แสดง Profit Table ในรูปแบบต่างๆคือ
  1. yearly/monthly profit table
  2. yearly profit bar chart
  3. average monthly profit bar chart 
แต่ปัญหาที่พบคือ ค่า Profit Table ของ Code ตัวอย่างไม่ตรงกับ Profit Table ใน Report Backtest  ตัวเดิม

หลังจากสอบถามไปกับทาง Amibroker Support แล้วได้รับคำตอบว่า คำนวณเดือน และปีใหม่ต่างกัน
ทำให้ผลลัพท์ต่างกัน

หากต้องการปรับให้ตรงกัน ลองเปลี่ยน Code ตามตัวอย่างด้านล่าง

Code จากตัวอย่าง
YearChange = yr != Ref( yr, -1 );
MonChange = mo != Ref( mo, -1 );
 
ให้เปลี่ยนเป็น
YearChange = yr != Ref( yr, 1 );
MonChange = mo != Ref( mo, 1 ); 

โหลด Source Code
https://www.amibroker.com/kb/2007/10/11/low-level-gfx-example-yearlymonthly-profit-chart/











วันพฤหัสบดีที่ 21 เมษายน พ.ศ. 2559

ภาพรวมของตลาด แบ่งตาม Market Cap และประเภทของหุ้น

     ภาพรวมทั้งตลาด  21/04/2016


   
    ภาพรวมของ SET50

 
    ภาพรวมของหุ้นใน SET ยกเว้นหุ้นในกลุ่ม (SET50,MAI)

    ภาพรวมในกลุ่ม MAI



ปล. ข้อมูลกลุ่ม (SET,SET50,MAI) อาจจะไม่ได้ Update ถูกต้องนะครับ เพียงแค่ยกตัวอย่างให้เห็นภาพกว้างๆในการแบ่ง 


วันพุธที่ 30 มีนาคม พ.ศ. 2559

Include file (จัดเก็บให้เป็นระเบียบซะหน่อย)


Include file (จัดเก็บให้เป็นระเบียบซะหน่อย)


แต่ก่อนผมเก็บ Include file ไว้ใน  C:\Program Files\AmiBroker  แล้วก็เรียกใช้โดยคำสั่ง
#include "myfunction.afl";   ก็ใช้งานได้เช่นกัน แต่ไฟล์ Include มันกระไปรวมอยู่กับพวกโปรแกรมต่างๆของ Amibroker


ตอนนี้ผมเปลี่ยนมาใช้วิธีการใหม่ เสียเวลาแก้ Code นิดหน่อย แต่ได้ความเป็นระเบียบในการจัดเก็บไฟล์

1  Click Menu Tool->Preferences จะได้ดังภาพ
2  กำหนด Standard include path:  เป็น C:\Program Files\AmiBroker\Formulas\Include
3  เราก็สามารถเก็บไฟล์พวก Include เช่น  myfunction.afl  ไว้ใน Folder ดังกล่าว
4  การเรียกใช้งานก็สามารถเรียกโดยคำสั่ง #include <myfunction.afl>;   โดยเปลี่ยนจากเครื่องหมาย "-" เป็น <-> แทน




Credit: เพื่อนร่วมก๊วน ที่ช่วยแนะนำให้นะครับ





วันเสาร์ที่ 26 มีนาคม พ.ศ. 2559

ทบทวนความรู้จากการเรียน ThaiQuants #1 (Simulation)


SIMULATION


แนวคิด Simulation คือ การเขียนโปรแกรมให้ Amibroker ทำการ Bakctest ระบบในจำนวนครั้งที่มากๆ
ภายใต้เงื่อนไขการซื้อขายเดียวกัน  แต่เราอาจจะจำลอง เหตุการณ์ที่ทำให้ผลลัพท์แตกต่างกันเช่น

1. Random Skip buy Signal   กรณีที่เกิดสัญญานซื้อ แล้วเราไม่ซื้อหุ้นตัวนี้ โดยให้ระบบทำการสุ่มข้ามสัญญานซื้อนี้ไปซะ

2 Random Slippage Buy/Sell Price  เราให้ระบบทำการ Random Slippage ราคาซื้อขายบางรายการเช่น

   2.1 จากที่เคยซื้อราคา 5 บาทก็ให้เพิ่มเป็น 5.05 
   2.2 จากที่เคยขายที่ราคา  5 บาทก็ปรับลดเหลือ 4.98 บาท

เมื่อได้ผลลัพท์จาการจำลองเหตุการณ์ 3000 ครั้ง เราก็นำผลลัพท์ที่ได้ เช่น CAR, MAX System Drawdown  ไปหาค่าเฉลี่ยใน Excel




ผมว่าแนวคิดการนำ Simulation มาใช้งานเป็นแนวคิดที่น่าสนใจ และอาจจะนำไปพัฒณาต่ออีกเช่นการ Add Noise ของราคา เพื่อทดสอบระบบ


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








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

FUNDAMENTAL TIME SERIES

FUNDAMENTAL TIME SERIES
   
หลังจากทาง SiamQuant (http://www.siamquant.com/) ได้เปิดให้บริการข้อมูล Fundamental แบบเต็มรูปแบบ หลังจากได้ติดตามผลงานทีม SiamQuant แล้วต้องยอมรับว่าเป็นข้อมูลที่สมบูรณ์มากๆ
นอกจากข้อมูลที่ดีแล้ว ยังมีโอกาสเรียนรู้ตัวอย่าง Code Amibroker ด้วย

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


เนื่องจากการเก็บข้อมูล Fundamental ของ Amibroker ไม่รองรับการเก็บแบบ Time Series ซึ่งจะเปรียบเทียบให้ดูตามรูปด้านล่าง


 Amibroker เก็บข้อมูล Fundamental เหมือนกับเป็น Header หรือ เป็น Information ของหุ้นนั้นๆ ดังนั้นจะสามารถรองรับการเก็บข้อมูลได้เพียงล่าสุดเท่านั้นเช่น เก็บ PE ล่าสุด

คำสั่งสำหรับการนำข้อมูลมาแสดงผล  GetFnData( "EPS" ) เพื่ออ่านข้อมูลมาแสดงผล ข้อดีคือเราสามารถนำค่ามาแสดงได้ที่หน้าจอได้สะดวก เช่น วันที่ขึ้นเครื่องหมาย XD

สามารถศึกษาเพิ่มเติมจาก
https://www.amibroker.com/guide/afl/getfndata.html

จากภาพให้สังเกตุจุดที่ 1 และ 2  จะแสดงให้เห็นการเก็บข้อมูลที่ต่างกัน แบบที่ 2 จะเก็บข้อมูล Time Series ซึ่งเราจำเป็นจะต้องตั้งชื่อเช่น SYMBOL+"_FUND" เพื่อนำเอาค่า Open High Low Close มาใช้เก็บข้อมูลพื้นฐานอื่นๆ ซึ่งจะสามารถเก็บข้อมูลต่อวันได้ เพื่อจะนำมา Plot Graph หรือ Backtest


เนื่องจากพื้นที่การจัดเก็บมีแค่ Open High Low Close ผมจึงได้แบ่งตามประเภทของข้อมูลเช่น XD ผมก็เก็บเป็นอีกชื่อนึง VOL ก็เก็บเป็นอีกชื่อนึง


ส่วนการนำเข้าข้อมูล และการเตรียมข้อมูลนั้นลองศึกษาเพิ่มจาก Import Wizard ซึ่งจะเป็นการ Import ข้อมูลเพิ่มเข้าไปเรื่อยๆ โดยไม่ทำให้ข้อมูลเดิมเสียหาย

https://www.amibroker.com/guide/w_impwizard.html

 ส่วนตัวผมเองใช้การจัดเก็บข้อมูลใน SQL Database แล้วทำการดึงมาใช้งาน เพื่อความสะดวกในการจัดการข้อมูล เนื่องจากผมถนัดทางด้านนี้เดิมอยู่แล้ว


มาดูวิธีการนำข้อมูล TIME SERIES มาใช้งานกันบ้าง

PE=Foreign(Name()+"_FUND","OPEN");

ก็เป็นการสั่งให้ Amibroker ดึงข้อมูล PE มาเพื่อใช้ในการแสดงผล หรือ Backtest





การ Explore ข้อมูลออกมาเพื่อแสดงค่า



สำหรับโหลดข้อมูลย้อนหลัง ซื้อบัตรได้ตามร้านซีเอ็ด
http://www.setsmart.com/ism/login.jsp

สำหรับแหล่งข้อมูลพื้นฐาน ผมแนะนำคุณครรชิต เห็น Excel การเก็บข้อมูลของแกแล้วต้องยอมรับว่าแกขยันมากกว่าผมหลายเท่าตัวอยู่ ผมยังแกะข้อมูลที่ได้จากแกมาใช้ไม่หมดเลย นอกจากเก็บเพื่อใช้งานแล้วยังมีน้ำใจให้เราได้นำมาศึกษาต่อยอดต่ออีก
 



http://www.facebook.com/kanchit.paisan

อันนี้ดีครับมีให้เรา Export ได้ด้วย

http://financials.morningstar.com/ratios/r.html?t=ADVANC&region=THA&culture=en-US






วันอาทิตย์ที่ 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 เพื่อเปรียบเทียบให้ด้วย