การเขียนสูตร AFL Buy และ Sell โดย ทั่วไปแล้วโปรแกรม AmiBroker เป็นโปรแกรมที่ค่อนข้างฉลาดมาก โดยหลักการเขียนในการส่งคำสั่งให้ ซื้อ (Buy) หรือ ขาย (Sell) ค่อนข้างจะง่ายต่อการเขียน โดยเมื่อ เงือนไข (Condition) เป็นจริง (True) โปรแกรมจะทำการ ซื้อ หรือ ขาย
จุดประสงค์: เขียนสูตร AFL Buy and Sell Code
- เข้าใจการสร้างเงือนไข ซื้อ หรือ ขายหุ้น ของโปรแกรม AmiBroker
- เข้าใจความหมายของ Code ในการซื้อ หรือ ขาย เบื้องต้น
- เข้าใจความหมายของ SetTradeDelay
- เข้าใจถึงหลักการทำงานของโปรแกรม AmiBroker
เนื้อหา: เขียนสูตร AFL Buy and Sell Code
หลังจากที่เราได้ทำการเขียนในส่วนของ SetOption Code แล้ว ต่อไปนี้เราจะเรียนรู้กับการสร้างและการส่งคำสั่ง ซื้อ และ ขาย ของโปรแกรม AmiBroker โดยโครงสร้างของคำสั่ง ซื้อ และ ขาย โดยปกติ แล้วจะมีลักษณะ ดังนี้
Buy = เงือนไขที่ เป็นจริง (True Condition หรือ 1 ) ถ้าเงือนไข เป็นจริง จะทำการซื้อ
Sell = เงือนไขที่ เป็นจริง (True Condition หรือ 1 ) ถ้าเงือนไข เป็นจริง จะทำการขาย
กรณีถ้าเงือนไข ไม่เป็นจริงโปรแกรม AmiBroker จะไม่ทำการ ซื้อ หรือ ขาย
ปกติการเข้า ทำการซื้อขายจะมีเงือนไข ดังนี้ ถ้ามีสัญญาณซื้อวันนี้ เราจะทำการซื้อ ที่ราคาเปิด (Open) ของวันพรุ่งนี้ โดยโปรแกรมมีคำสั่งที่ใช้ คือ SetTradeDelay โดยการตั้งค่าจะเป็น SetTradeDelay (1,1,0,0);
โครงสร้างของ Buy หรือ Sell จะมีลักษณะโครงสร้างที่ไม่ซับซ้อนมาก โดยบทนี้จะทำการยกตัวอย่าง การตัดกันของ เส้นค่าเฉลี่ย ของ 40 วัน และ 200 วัน ในการ เข้า ซื้อและขาย โดย ถ้าเส้น 40 วัน ทำการตัด (Cross Over) สูงกว่ากับเส้น 200 วัน โปรแกรมจะทำการ ซื้อ (BUY) และ ถ้าเส้น 40 วัน ทำการตัดต่ำกว่า เส้น 200 วัน โปรแกรมจะทำการ ขาย (SELL) โดยเงือนไข ดังกล่าวสามารถเขียนโปรแกรมได้ดังนี้
Buy = Cross(MA (C,40) , MA (C, 200));
Sell = Cross(MA(C, 200), MA(C, 40));
หมายเหตุ C หมายถึง ราคาปิด (Close) โดยจะมีสัญญาลักษณ์อื่นๆ ด้วย เช่น O = ราคาเปิด (Open), H = ราคาสูงสุด (High), L = ราคาต่ำสุด (Low) หรือ V = ปริมาณการซื้อขาย (Volume)
แต่โดยปกติแล้วทาง ThaiQuants.com แนะนำว่า ควรสร้างเงือนไข ย่อยๆ ก่อนมารวมกับเงือนไข Buy หรือ Sell ตัวอย่างเช่น
BuyCon1 = Cross(MA (C,40) , MA (C, 200));
BuyCon2 = MACD () > 0;
Buy = BuyCon1 AND BuyCon2;
การทำแบบนี้จะง่ายต่อการเขียนโปรแกรม และเพื่อลดความผิดพลาดในการเขียนได้อีกด้วย
วีดีโอ: เขียนสูตร AFL Buy and Sell Code
คำบรรยายวีดีโอ
มาเริ่มที่สัญญานซื้อก่อนคราวนี้เราต้องเข้าใจก่อนว่าไอ้หลังเครื่องหมายเท่ากับเนี่ย Buy นี่คือเป็นตัวแปลของ Amibrokerซึ่งถ้าข้างหลังเนี่ยเขียนอะไรไปก็ตามแล้วได้ผลออกมาเป็นจริง ใช่มั้ยครับ อันนี้ก็จะทำการซื้อเหมือนกันถ้าสัญญานขายอะไรออกมาเป็นจริงก็จะทำการขายนะครับแต่ถ้าเป็นเท็จตรงนี้ก็จะไม่ขาย อันนี้เป็นเท็จ อันนี้ก็จะไม่ซื้อ มาดูง่ายๆก่อนจะแนะนำ function แรกเลยนะครับ ที่ใช้กันบ่อยก็คือ cross เห็นมั้ยครับมี Array 1 กับ 2 คืออะไร เราจะบอกว่าเมื่อ Moving Average ของ C, C คืออะไรครับ C เป็นตัวย่อมาจากคำว่า close นะครับ มาเดี๋ยวผมเขียนให้ดู C = Close นะครับ แล้วก็มี พอเดาออกมั้ยครับ O = Open เปิด H = High คือราคาสูงสุดของวันนั้น L = Low ก็คือราคาต่ำสุดของวันนั้น แล้วก็มี V = Volume ของวันนั้น
เราบอกว่า Moving Average ของ close, Close กี่วันล่ะ close 40 วัน ปิดไปเห็นมั้ยครับบอกว่าถ้า moving average ของ close 40 วันเนี่ยพุ่งตัดครึ่งของ moving average อ่ะ 200 วันแล้วกัน comma ให้ทำการซื้อเพราะฉะนั้นตัง cross เนี่ย function นี้return ค่ากลับมาเป็นจริงเป็นจริงเมื่อไร เป็นจริงเมื่อ Moving Average ของราคาปิด 40 วันเนี่ยตัดขึ้นเส้น Moving Average 200 วัน เห็นมั้ยครับ ลืมใส่ว่าต้องของ close นี่นะครับ 4 เท้ายังรู้พลาดนักปราชญ์ยังรู้พลั้งนะครับ เรียบร้อยแล้ว คราวนี้ก็มาที่ sell เหมือนกัน sell เราก็บอกไม่มีอะไรเอาตัวนี้สลับกัน ถ้าเส้น Moving Average นี่นะครับของ close 200 เนี่ยตัดขึ้นมาหรืออยู่เหนือ Moving Average ของ close ที่ 40 แล้วก็ปิดวงเล็บไปทีนึงให้ทำการขายตอนนี้เราก็จะมีทั้งสัญญานซื้อและสัญญานขายแล้วนะครับ เกือบเสร็จแล้วเดี๋ยวอันนี้น่าจะจำได้เลย อ่ะ Close, open, high, low, volume คราวนี้เนี่ยอย่างที่บอกนะครับ return เป็น true ใช่มั้ยครับเราก็ลอง run backtest ดูเลยก็ได้ เดี๋ยวก่อนจะ run backtest เดี๋ยวเผื่อ Amibroker ของท่านในส่วนของ formulaไม่มีปุ่มพวกนี้ไม่ต้องตกใจนะครับ นี่นะครับ add or remove นี่นะครับ formula เนี่ย ในส่วนนี้เป็นส่วนของ customs นะครับ customize ไปที่ command tools เนี่ยพวกนี้ผมเป็นคนลากมาวางเองนี่นะครับเดี๋ยวลองเอาออกก่อนเอาออกให้หมดเห็นมั้ยครับออกหมดแล้วเนี่ยตัว default ถ้าท่านเพิ่งลง Amibroker จะไม่มีปุ่มพวกนี้อยู่คราวนี้จะสร้างปุ่มพวกนี้ทำไงเดี๋ยวจะโชว์ให้ดูอีกทีนะครับ click ขวาตรงนี้นะครับ customize มาที่ command นะครับ ไปที่ tools เห็นมั้ยครับ tools ก็จะมีปุ่มพวกนี้อยู่ให้เลือกรู้ได้ไงว่ามีปุ่มพวกนี้อยู่ให้เลือกเห็นมั้ยตรงนี้มี tools อยู่ มี backtest อยู่ตรงนี้เห็นมั้ยครับ clickขวาตรงนี้ customize นี่นะครับ command แล้วไปที่ tools มันจะเหมือนอันนี้เป๊ะเลย Edit, View, Tools, Windows, help นะครับแล้วเราก็มาที่ backtest ลากมาวางแล้วก็มี Optimization ลากมาวางอีกตัวนึงก็ Exploration ลากมาวางแค่นี้ท่านก็จะเหมือนผมแล้วนะครับต่อไปก็คือแค่กด backtest ตัวนี้เท่านั้นเองนี่นะครับ backtest เห็นมั้ยครับข้างหลังก็จะมีค่าออกมานี่คือ run backtest เสร็จแล้วนะครับคราวนี้ในส่วนของ condition ตรงนี้เรียกว่า 1 condition เพื่อเป็นการไม้อ่อนดัดง่าย ไม้แก่ดัดยาก ผมจะแนะนำว่าว่าให้เขียนแบบนี้นะครับ buy con1 คือ condition แรกให้เท่ากับก้อนนี้ นี่นะครับแล้วเราก็บอกว่า แล้วใส่ condition ที่ 2 buyCon2 เมื่อไร แนะนำ function เพิ่มอีกตัวนะครับ MACD ของหุ้นตัวนั้นๆนะครับต้องมากกว่า 0 ถ้า MACD มากกว่า 0 แสดงว่าเป็นจริงถูกมั้ยครับแล้วเมื่อไรที่เรา cross close 40 cross close 200 ก็เป็นจริง เราจะซื้อก็ต่อเมื่อ buyCon1 เป็นจริง และ buyCon2 เป็นจริง เขียนอย่างนี้นะครับ เพราะอันนี้คือ condition นะครับ return เป็น true เป็น fault พอมัน return เป็น true นะครับก็เป็น true เหมือนกันอันนี้ก็เป็น true เหมือนกัน MACD มากกว่า 0 จริงมั้ย ถ้าจริงอันนี้เป็น true อันนี้เป็น true ปุ๊บอันนี้ก็เป็น true เหมือนกันเมื่ออันนี้เป็น true and อันนี้เป็น true แสดงว่า อันนี้เป็น true ถูกมั้ยครับ เราก็จะทำการซื้อท่านที่ใหม่สำหรับเรื่องนี้อาจจะงงหน่อยลองไปทวนที่ผมพูดเมื่อกี้อันนี้คือ condition, condition นึง อันนี้ condition นึงว่าจะซื้อเนี่ยนะครับ MACD มากกว่า 0เราก็ลอง run backtest ใหม่เดี๋ยวแป๊บนึงนะครับเดี๋ยวกดค่าเก่าขึ้นมาดูก่อน นี่คือ report กด report มาดูนี่ครับ จากปี 2011 ถึง สิ้นปี 2014 ถ้าเรา trade ด้วย strategy เมื่อกี้นะครับเราจะได้เป็นติดลบนี่นะครับติดลบ 4% Annual return ติดลบ 1 % 4 ปีก็ 4 % พอดี tradeแค่ 9 ครั้งเห็นมั้ยครับ 9 ครั้ง แย่มากเพราะว่าเรายังไม่ set ค่าอีกหลายๆอย่างไม่เป็นไรคราวนี้เอา formula ขึ้นมาใหม่ตอนนี้ลอง run ใหม่ดู backtest ใหม่ดูได้ตารางมาใหม่แล้วก็คล้ายๆเดิมนะครับ ติดลบ 4 % เหมือนเดิมอันนี้ผมเฉลยเลยก็ได้ว่าเพราะเรายังไม่ set range ราคาของหุ้นที่จะซื้อที่เหมาะสมเรายังไม่ set เรื่อง position เดี๋ยวจะว่ากันในตอนต่อไปนะครับ OK กลับมาที่ code งั้นในส่วนนี้นี่เดี๋ยวพอแค่นี้ก่อนดีกว่า