3-5 เขียนสูตร AFL Buy and Sell Code

การเขียนสูตร AFL Buy และ Sell โดย ทั่วไปแล้วโปรแกรม AmiBroker เป็นโปรแกรมที่ค่อนข้างฉลาดมาก โดยหลักการเขียนในการส่งคำสั่งให้ ซื้อ (Buy) หรือ ขาย (Sell) ค่อนข้างจะง่ายต่อการเขียน โดยเมื่อ เงือนไข (Condition) เป็นจริง (True) โปรแกรมจะทำการ ซื้อ หรือ ขาย

จุดประสงค์: เขียนสูตร AFL Buy and Sell Code

  1. เข้าใจการสร้างเงือนไข ซื้อ หรือ ขายหุ้น ของโปรแกรม AmiBroker
  2. เข้าใจความหมายของ Code ในการซื้อ หรือ ขาย เบื้องต้น
  3. เข้าใจความหมายของ SetTradeDelay
  4. เข้าใจถึงหลักการทำงานของโปรแกรม 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

คำบรรยายวีดีโอ

ใน VDO ชุดนี้เราจะมาพูดกันต่อในส่วนของ formula ของ blacktest นะครับในส่วนของ buy และ sell code เปิด Amibroker ขึ้นมานะครับก็เปิด formula ขึ้นมาอันนี้เราเรียกว่า formula editor ไม่เป็นไรเดี๋ยวขยายหน่อยคราวนี่เนี่ยในส่วนของ buy และ sell เราต้องบอกว่าเราจะซื้อเมื่อไรเรานี้เราบอกว่า buy นะครับ เท่ากับเท่าไร เราต้องใส่ code เพิ่มที่หลัง นี่ผม comment out ไปก่อนเหมือนกันนะครับ เสร็จปุ๊บเราก็บอกว่า จะ sell จะขายเมื่อ condition เป็นยังไงแต่คราวนี้ก่อนที่จะถึงสองส่วนนี้เราควรจะบอก Amibroker ก่อนว่าเมื่อมีสัญญานเข้ามา ไม่ว่าจะซื้อ หรือจะขายเนี่ยพอสัญญานเข้า สมมุติสัญญานเข้าวันนี้นะครับเราจะทำการซื้อขาย วันนี้ได้หรือเปล่าหรือจะทำการซื้อขายพรุ่งนี้ อ่ะเข้าใจมั้ยครับ สัญญานเข้าวันนี้จะซื้อขายวันนี้เลยเมื่อสัญญานเข้าหรือทำการซื้อขายพรุ่งนี้ซึ่งในความเป็นจริงเราไม่ได้เฝ้าหน้าจอหุ้นตลอดเวลาถูกมั้ยครับเพราะฉะนั้นถ้าหุ้นเข้าวันนี้ถ้าสัญญานเข้าวันนี้ใช่มั้ยครับ อ่ะสัญญานซื้อเข้าวันนี้เราจะไปซื้อพรุ่งนี้ ฟังอีกทีนะครับถ้าสัญญานซื้อเข้าวันนี้เราจะไปซื้อจริงๆพรุ่งนี้เช้าอันนี้คือเป็นไปได้สำหรับคนทั่วไปคนที่ไม่ได้เฝ้าจอคอมตลอดเวลาเพราะฉะนั้นก็ต้องบอก Amibroker SetTrade นี่นะครับ Delays คราวนี้ก็จะมีตัวแปลอยู่เห็นมั้ยครับว่า delays เท่าไรสัญญานเข้าวันนี้ซื้อจริงพรุ่งนี้ก็คือ delays 1 วันถูกมั้ยครับสัญญานขายเข้าวันนี้ ขายจริงเมื่อไร ขายจริงพรุ่งนี้เช้าส่วน short กับ cover นี่บ้านเราทำยากนะครับ ไม่ต้องสนใจ เรียบร้อยแล้วได้ยินที่ผมพูดเมื่อกี้มั้ยครับถ้าสัญญานเข้าวันนี้ นี่คือ buy ใช่มั้ยครับ ซื้อนะครับจะไปซื้อพรุ่งนี้ตอนเปิดเพราะฉะนั้นก็ต้องบอก Amibroker ด้วยว่าราคาซื้อของเรา BuyPrice เรากับ Open แล้วเค้าจะรู้เองว่าเป็น Open ของพรุ่งนี้ เหมือนกัน SellPrice เท่ากับ Open เค้าจะรู้ว่าถ้าสัญญานขายเข้ามาปุ๊บเราจะขายพรุ่งนี้ตอนเปิดนี่นะครับ แล้วก็เหมือนเดิมนะครับย้ำเป็นครั้งสุดท้ายนะครับ เปิด Browser ขึ้นมา พิมพ์ไปSetTrade Delays คืออะไร SetTrade Delays อ่ะก็ขึ้นมา AFL Function Reference SetTrade Delays กดเข้าไปดูเห็นมั้ยครับก็จะบอกว่ามี buydelay, selldelay แล้วก็จะว่าอะไรยังไงก็ลองอ่านดู แล้วก็มีตัวอย่างเหมือนกันนะครับ ไปที่ google ใหม่ BuyPrice คืออะไร เค้าก็จะมีมาเนี่ยลองหาดูอันนี้หาไม่เจอนะครับก็ลองไป search ดูแล้วก็ลองอ่าน 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 งั้นในส่วนนี้นี่เดี๋ยวพอแค่นี้ก่อนดีกว่า