เพื่อลดความผิดพลาดในผลลัพธ์จากข้อมูลหุ้นที่ไม่ได้มีการปรับราคาหุ้นเนื่องจากหุ้นแตกพาร์ เราอาจใช้โค้ด AmiBroker AFL ในการบังคับขายหุ้นก่อนแตกพาร์ หรือป้องกันการเข้าซื้อ ถ้ามีการตรวจสอบว่าหุ้นนั้นๆกำลังจะแตกพาร์ในอีกหนึ่งถึงสองวันข้างหน้า ใน Backtesting การจำลองระบบซื้อขายหุ้น
Alleviate Split Stock Problem with Code
แก้ไขหุ้นแตกพาร์ด้วย AFL Code ใน AmiBroker เพื่อลดความผิดพลาดในผลลัพธ์จากข้อมูลหุ้นที่ไม่ได้มีการปรับราคาหุ้นเนื่องจาก Split Stock ดังตัวอย่างตามรูปต่อไปนี้ โดยที่ค่าตัวแปรตาม ALF Code ของ AmiBroker คือ
1 2 3 4 5 |
SetTradeDelays(1, 1, 0, 0); C1 = Ref(C, 1);//checking tomorrow Close C2 = Ref(C, 2);//checking the day after tomorrow Close O1 = Ref(O, 1);//checking tomorrow Open O2 = Ref(O, 2);//checking the day after tomorrow Open |
วีดีโอสอน AmiBroker ตอนการแก้ไขหุ้นแตกพาร์ด้วย AFL Code
Note: sellConAvoidSplit โค้ดในวีดีโอพิมพ์ผิดใน And ตัวสุดท้ายของเงื่อนไข โปรดดูโค้ดที่ถูกต้องข้าง
แก้ไขหุ้นแตกพาร์ด้วย AFL Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//Alleviate Stock-Split Problem with AFL Code by ThaiQuants.com //Please study ThaiQuants.com/vlog/template SetOption("InitialEquity", 1000000); SetOption("MaxOpenPositions", 100); SetTradeDelays(1, 1, 0, 0); BuyPrice = SellPrice = Open; Buy = Cross(MACD(), Signal()) AND C > 2; Sell = Cross(Signal(), MACD()); PositionSize = -1; PositionScore = C*V; ApplyStop(stopTypeLoss, stopModePercent, 30); if(0){//For testing Buy |= (Name() == "MAKRO" AND DateNum() == 1131008); Buy |= (Name() == "CNS" AND DateNum() == 1130508); Buy |= (Name() == "VGI" AND DateNum() == 1130925); Buy |= (Name() == "MODERN" AND DateNum() == 1110511); Buy |= (Name() == "NMG" AND DateNum() == 1110623); Buy |= (Name() == "AHC" AND DateNum() == 1120517); Buy |= (Name() == "UAC" AND DateNum() == 1121012); Buy |= (Name() == "CPALL" AND DateNum() == 1120423); Buy |= (Name() == "BTS" AND DateNum() == 1120808); Buy |= (Name() == "SC" AND DateNum() == 1130426); Buy |= (Name() == "GL" AND DateNum() == 1130513); Buy |= (Name() == "SABINA" AND DateNum() == 1120730); } if(0){//For avoiding stock split {//SPLIT daysBeforeSplit = 5; C0 = Ref(C, daysBeforeSplit); C1 = Ref(C, daysBeforeSplit + 1); O0 = Ref(O, daysBeforeSplit); O1 = Ref(O, daysBeforeSplit + 1); detectSplit = 0.35; buyConAvoidSplit = !(C0/O0 < 1-detectSplit) AND !(C0/O0 > 1+detectSplit) AND !(O1/C0 < 1-detectSplit) AND !(O1/C0 > 1+detectSplit); sellConAvoidSplit = (C0/O0 < 1-detectSplit) OR (C0/O0 > 1+detectSplit) OR (O1/C0 < 1-detectSplit) OR (O1/C0 > 1+detectSplit); } Buy &= buyConAvoidSplit; Sell |= sellConAvoidSplit; } |
เพิ่มเติมเกี่ยวกับราคาหุ้น
เพิ่มเติมเกี่ยวกับการใช้งาน AmiBroker