Stop Bleeding Systems

หยุดการขาดทุน… เลือดไหล เลือดสาด  นักลงทุนที่จะอยู่ทำกำไรในตลาดนานๆได้ ไม่เพียงแต่จะต้องรู้จักการคัทลอส (Cut Loss) แต่ยังต้องรู้ว่า เมื่อไหร่ควรจะหยุดซื้อหุ้นเพิ่ม เพื่อไม่ให้ขาดทุนหนักกว่าเดิม โดย ThaiQuants เรียกระบบส่วนนี้ว่า Stop-Bleeding Systems ซึ่งเป็นส่วนหนึ่งของระบบเทรดทั้งหมด (Trading System) ที่จะทำหน้าที่เป็นอีกปราการ ป้องกันการขาดทุนอย่างต่อเนื่อง หลังจากที่มีการคัทลอสบ่อยๆ และมีความเสี่ยง (Risk) ในพอร์ตเพิ่มขึ้น ซึ่งไอเดียนี้ได้นำมาจาก Dr. Alexander Elder 6% Rule แล้วมีการต่อยอดให้เหมาะสมกับ Trading System

Continue reading

Market Breadth Indicators

วิดีโอและเอกสาร Market Breadth (MKB) ซึ่งถือว่าเป็น Leading Indicators สัญญาณที่นำตลาด เนื่องจากมีการคำนวณวิเคราะห์ Market ที่ต่างออกไปจาก Standard Index ทั่วๆไป

Continue reading

Portfolio Risk Control

Portfolio Risk Control เป็นการควบคุมความเสี่ยงทั้งหมดของพอร์ตที่มาจากหุ้นทุกตัวในพอร์ต โดยที่หุ้นแต่ล่ะ position จะมีความเสี่ยงที่ไม่เท่ากัน ขึ้นอยู่กับ ราคาหุ้น จำนวนหุ้น (Position Sizing) ความผันผวน (Volatility) และวิธีการคำนวณความเสี่ยง (Risk Calculation) ณ สภาพตลาดนั้นๆ (Market Analysis)

Continue reading

ThaiQuantsUtilities AmiBroker Plugin

ThaiQuantsUtilities (สั้นๆว่า TQU) เป็น AmiBroker Plugin ที่ถูกสร้างขึ้นมาเพื่อช่วยนักลงทุนด้วยระบบเทรดหุ้นสามารถพัฒนากลยุทธ์การเทรดใน AmiBroker ได้อย่างรวดเร็วและถูกต้อง ทั้งทางด้านการเขียนโค้ดและการทดสอบระบบ Continue reading

AFL Executions and AmiBroker Variables

ในการที่จะทำ Advanced Risk and Money Analyses ใน AmiBroker ได้นั้น นักลงทุนสายควอนท์ต้องเข้าใจคุณสมบัติของประเภทตัวแปร Variable Types ต่างๆใน AmiBroker ให้เป็นอย่างดี รวมถึงเข้าใจผลกระทบจากการที่ AmiBroker ทำการอ่านและประมวลโค้ด เรียกว่า “AFL Executions” ซึ่งมีผลต่อการใช้งานและประเภทของตัวแปรนั้นๆ ทั้งทางด้าน Usage, Practice, Efficiency, และ Persistency

เพื่อเป็นประโยชน์ต่อนักลงทุนสายควอนท์ในเมืองไทย ThaiQuants จึงนำความรู้เบื้องต้นมาแบ่งปันให้เริ่มศึกษากันดู (อย่าลืมดู VDO)

ประเภทการอ่านและประมวลโค้ด AFL Executions

  1. Symbol Executions
  2. CBI Execution (Custom Backtester Interface)

ประเภทตัวแปรใน AmiBroker

 

  • AFL Executions and User-defined Variables 00
  • AFL Executions and User-defined Variables 01
  • AFL Executions and User-defined Variables 02
  •  AFL Executions and User-defined Variables 03
  • AFL Executions and User-defined Variables 04
  • AFL Executions and User-defined Variables

 

VDO เรื่อง AFL Executions and Variables (มี 2 วิดีโอ)

Description

X305-1 AFL Executions and Variables สวัสดีครับนักศึกษาครับ ในวิดีโอชุดนี้นะครับเราจะมาเข้าคอนเซ็ปทางเทคนิเคิลของ AmiBroker โดยเฉพาะนะครับ ซึ่งสำคัญมากนักศึกษา โอเคมั๊ยครับ อันนี้เป็นเฉพาะเจาะจงกับ AmiBroker นะครับเรียกว่า AFL Executions กับ Variables โอเคมั๊ยครับ ว่า Amibroker เนี่ยทำการ Execute เนี่ยหรือการอ่านโค้ดนะครับที่เราพิมพ์ไปน่ะ อ่านโค้ดและทำการรัน Backtest หรือ Optimize ยังไงอันนั้นคือ AFL Executions ซึ่งมีผลกระทบกับ Variables ตัวแปรประเภทต่างๆที่เราใช้ นักศึกษาครับ อันเนี้ยสำคัญเพราะว่า ..นี่นะครับ Without the knowledge of AFL Executions && Variables นะครับ and CBI (Custom Backtester Interface) พี่ BO (Backtester Object) นะครับ, It is impossible to perform Advance Risk & Money Analyses. “ ปราศจากความรู้ของ AFL Executions แล้วนะครับ การที่Amibroker นี่อ่านโค้ด/รันโค้ดยังไงเนี่ยกับประเภทของตัวแปรเนี่ยผนวกกับ CBI นี่ เป็นไปไม่ได้เลยที่เราจะทำ Advanced Risk & Money Analyses ก็คือวิเคราะห์ความเสี่ยงและการบริหารเงินทุนเนี่ยนะครับในAmibrokerได้ ” เห็นมั๊ยครับ Money Management เนี่ยระดับ Advance เนี่ยยังไงนักศึกษาต้องเข้าใจสองตัวนี้ Executions && Variables โอเคมั๊ยครับ โดยที่..กลับมาทวนนะครับ ว่านี่เราจะทำนี่ทั้งหมดทั้งหลายทั้งปวงเนี่ยนะครับ เราจะต้องทำ Comprehensive Advanced Strategy ถูกมั๊ยครับ นี่..แล้วตอนนี้คือเราโฟกัสที่ AmiBroker นี่ เพราะฉะนั้นเราต้องมีองค์ประกอบหลักๆนี่ 4 อย่างโอเคมั๊ยครับ ซึ่งโอเคอันนี้แหละ MKB (Market Breadth) เราอาจจะยกเว้นไปก่อน เก็บไว้ก่อน เดี๋ยวค่อยมาทำต่อ แต่ที่แน่นอนเลยเนี่ยในส่วนของ Advanced Risk & Money เนี่ย นักศึกษาต้องมี CBI ด้วยและก็ Executions & Variables ผนวกกับอะไรครับ ทางด้านเทคนิเคิลนี่ Amibroker ทำการอ่านโค้ดรันโค้ดยังไง สุดท้ายเนี่ย 4 ตัวนี้รวมกันนะครับ เราถึงมาทำ Comprehensive Advanced Strategy ให้นักศึกษาได้ โอเคมั๊ยครับ โดยที่ต้องกลับมาย้ำนะครับว่า นี่..อยากให้นักศึกษาเนี่ยmake sure ว่าทำการ study 16 cases นะครับ เอ้อ..ก่อนหน้านี้นะครับ พยายามทำให้ได้ take the opportunity นะครับที่จะ improve ตัวเอง พัฒนาตัวเองในการศึกษาเรียนรู้ study and mastering โอเคมั๊ยครับ ซึ่งในวิดีโอชุดเนี้ยก็จะเป็นกึ่งเฉลยคร่าวๆ อธิบายว่าอ๋อ..มันเกิดอะไรขึ้น ตอนที่รันทำไม รัน VarGet VarSet นี่..บางทีค่ามาค่าไม่มา บางที StaticVarGet กับ VarSet นี่ใช้ยังไง และอะไรที่มันเหมาะสมนะครับ อันนี้เรา go in ยับเลย.ไปอย่างลึกเลยนักศึกษา เฉพาะเจาะจงกับ Amibroker เลยนะครับ อ่ะ..ก่อนอื่นมาเริ่มที่ AFL Executions ก่อน อันนี้เป็นความรู้เบื้องต้นเลยที่เราจะต้องรู้นะครับ เพราะว่าเราใช้ Amibroker เป็นหลักเลยใช่มั๊ยครับ ว่าถามก่อนไอจำนวน Executions เนี่ยตอนที่Amibroker มันอ่านโค้ดเนี่ย อ่านแล้วรันโค้ดหรือเก็บข้อมูล มันทำอยู่กี่ครั้ง โอเคมั๊ยครับ นี่ AFL Executions อ่านและรันโค้ดหรือเก็บข้อมูลตัวแปรต่างๆ AmiBroker มันทำอยู่กี่ครั้ง ซึ่งเราก็ต้อง based on นี่ครับ Phase 1 ก่อน จำได้มั๊ยครับ Phase 1 มีโค้ดอยู่ 6 sections ที่เราเขียนโค้ดไว้ผนวกกับ Phase 2 นี่ CBI โอเคมั๊ยครับ อ่า..นักศึกษามองแค่นี้ ก็บอกว่าเอ๊ะ..อย่างนี้ก็รัน 2 ครั้งสิ ซึ่งความจริง AmiBroker ไม่ได้ทำแค่นั้นนักศึกษา เอา2 ตัวนี้ก่อน รวมกันก่อนเรียกว่าเป็น AFL CODE นะครับ ทั้งก้อนนี้ AFL CODE แล้วเราก็ทำการนี่ AFL Executions รันโค้ดนี่..รัดโค้ด จะ Backtest Optimize Exploration หรือ Scan อะไรก็แล้วแต่ออกมา โดยที่ Phase 1 เนี่ย นี่อันนี้เรียกว่ารันโค้ดชุดนี้ใช่ไหมครับ อ่า..คือใช่แต่ความจริงเนี่ยมันไม่ได้รันโค้ดชุดนี้ชุดเดียว เพราะมันรันโค้ดชุดเนี้ยกับdatabaseของอะไร “จำนวนหุ้น” เพราะฉะนั้นมีหุ้นตัวที่สอง อันนี้ตัวแรก..ตัวที่สองนี่..ตัวที่สาม..นี่รันไปเรื่อยๆ สรุปว่าที่ Phase 1 เนี่ย Amibroker ทำการรัน Executions เนี่ยเท่ากับ Symbol Executions นี่ส่วนนี้นะครับนี่ หุ้นตัวที่หนึ่ง..สอง..สาม..จนหมดเลยเนี่ยนะเท่ากับ N Symbols จำนวนของหุ้นทั้งหมดที่อยู่ใน Watchlist ของเรา อันนี้assumeว่าเราใช้ filter นะครับ ใน Watchlist เราสมมติว่ามีอยู่ 600 ตัว อันนี้ก็ต้องรัน 600 ครั้งนี่ โค้ดชุดเดียวกันอ่ะก็จริง แต่รันแต่ละครั้งเนี่ย หุ้นแต่ละตัวเนี่ยรันกับ Database นี่..ของหุ้นนั้นๆนี่ ก็เลยรอบแรกPhase 1 นี่จะมีจำนวน Executions เท่ากับจำนวนหุ้นในWatchlistเรา แล้วก็มีค่านี่ส่วนค่าต่างๆนานานะครับ Signals Score Size Positions นี่เข้ามาใน Phase 2 โดยที่ Phase 2 AmiBroker จะรันแค่ครั้งเดียว นักศึกษา CBI Execution นะครับ (รันครั้งเดียวเลยไม่ได้เติม s) ส่วนนี้เรียกว่า CBI Execution ..อันนี้เราเรียกว่า Symbol Executions (เติม s นะครับ) เราเลยได้ข้อสรุปว่า ทั้งหมดเนี่ยก็คือ N symbols +1 +1 นี่คือ CBI โอเคมั๊ยครับ นี่มาทวนอีกทีนะครับว่า Phase 1 เนี่ย Symbol Executions นี่ก็คือ Code ใน 6 sections ของเราแหละ จะมีการ Execute each symbol ทำการรันโค้ดนี่นะครับ Amibrokerนี่ หุ้นแต่ละตัวนี่ separately and individually เป็นตัวๆไป เท่ากับจำนวนนี่ AFL Executions เท่ากับ the Number of Symbols ใน Watchlist เรา คีย์เวิร์ดนี่สำคัญนะครับ นี่เป็นเหตุผลว่าทำไมในstudyเนี่ยผมถึงสร้างWatchlistใหม่ขึ้นมาแล้วมีหุ้นแค่ 10 ตัว อ่า..แสดงว่าstudyจะรันกี่ครั้งครับ รัน10 ครั้งนี่ 10 Symbol Executions อันนี้จบ N Symbols นะครับ ต่อไปก็มาดูนี่..CBI Execution นี่ ก็เป็นโค้ดที่อยู่ใน CBI นี่ จำนวนก็คือแค่ครั้งเดียว ทั้งก้อนนี่รันครั้งเดียว ทุกอย่างลงมาหมดแล้ว รันครั้งเดียว แต่ไปผ่านloop อะไรครับ หลักๆนี่คือไปผ่าน bar loop นักศึกษา bar loop นี่เป็นวน loop แต่ละวัน ถูกมั๊ยฮะ แต่ละวันเท่ากับจำนวนวันที่เราต้องการทำbacktestแต่ Execute แค่ครั้งเดียว นี่ก็เป็น N Symbols +1 มาทวนนะครับ Execute each symbol separately + ตัว CBI สรุปก็คือว่าอะไรครับ จำนวนนี่ The Number of AFL Executions for 1 backtest เราทำการbacktest 1 ครั้งเนี่ย จะมี AFL executions ทั้งหมด N Symbols + 1 CBI คราวนี้เนี่ยนักศึกษาจะถามว่า Why do we need to learn about AFL Executions ? โอเคมั๊ยครับ ประเด็นเพราะว่า Because AFL Executions determine how to choose a Variable Type การทำ Executions โค้ดของAmibrokerเนี่ยนะครับมันเป็นตัวกำหนดนักศึกษา เป็นตัวกำหนดให้เราเนี่ยเลือกประเภทของตัวแปรนี่ Amibrokerมันมีตัวแปรอยู่หลายประเภทนะครับ เอ่อ..เนี่ย ให้เหมาะสมโดยที่ตัวแปรแต่ละประเภทเนี่ยอาจจะมีความเหมาะสมในการใช้ต่างกัน Different Usage โอเคมั๊ยครับ Different Efficiency นี่ มีประสิทธิภาพในการใช้ต่างกัน โอเคมั๊ยครับ และก็นี่ Practice นี่ในเชิงปฎิบัติ ตัวไหนเหมาะสมไม่เหมาะสมยังไงเดี๋ยวผมมาชี้แจงให้หมดเลยนะครับนักศึกษาว่าอะไรเป็นอะไร แต่ตอนนี้ประเด็นที่สำคัญที่สุดเลยนักศึกษา คนที่ทำ Advanced Risk & Money Analyses ใน AmiBroker ไม่ได้เนี่ยเพราะว่าบางทีเค้าไม่เข้าใจอันนี้นักศึกษา Different Persistency โอเคมั๊ยครับ Persistency คือความต่อเนื่อง หรือความอยู่ต่อใน Memory ในความทรงจำของ AmiBroker หรือคอมพิวเตอร์เรา โอเคมั๊ยครับ Persistence ก็คืออยู่ต่อ อย่างเช่นอยู่จากอะไร ตัวแปรที่เขียนใน Phase 1 นี่อยู่ต่อไปใช้ใน Phase 2 ได้รึป่าวโอเคมั๊ยครับ บางทีนักศึกษาเขียนตัวแปรใน Phase 1 ใช่ไหมครับ พออยู่ใน Phase 2 นี่พยายามจะนำมาใช้กลับนำไปใช้ไม่ได้อย่างเนี้ยเพราะว่าอะไร โอเคมั๊ยครับ อ่า..เนี่ยก็คือเป็นเรื่องของ Persistency เพราะฉะนั้นเรามาดูนี่ โฟกัสเรื่อง Variable Persistency ความอยู่ต่อความต่อเนื่องนี่ในmemoryนะครับของตัวแปรแต่ละประเภทก่อน แล้วเดี๋ยวผมมายกตัวอย่างให้ดูก่อนนะครับว่าเรามองความต่อเนื่องเป็นยังไง ตัวแปรที่เราเขียนไว้อ่ะสามารถเขียน Phase 1 ไปใช้ใน Phase 2 ได้มั๊ย เขียน Phase 2 กลับมาใช้ใน Phase 1 ได้มั๊ย โอเคมั๊ยครับ ซึ่งอันเนี้ยนักศึกษาถ้าจำได้เนี่ยเรื่อง Advanced Risk of Ruin เนี่ย เรามีการเขียนชื่อตัวแปรอยู่ใน CBI นักศึกษา แล้วนำกลับมาใช้อ่ะใน Phase 1จำได้มั๊ยครับเพื่ออะไร บางครั้งเนี่ยเพื่อนำมาplotกราฟนี่ บางครั้งเพื่ออะไร เพื่อนำผลมาออกที่ตัว result table นำไปวิเคราะห์ต่ออย่างเงี้ย อย่าง Initial Equity Ruin อย่างเงี้ย 10, 20, 30% ใช่ไหมครับ Ruin Level เนี่ยเราวิเคราะห์ในCBI แต่อยากเอาผลออกมาเนี่ยใส่ในอะไรครับ ใส่ในตารางเพื่อมาวิเคราะห์excels หรือค่าบางค่านี่ นักศึกษาทำได้หลายๆ MKB แล้วนะครับ ที่เราวิเคราะห์ใน CBI ใช่มั๊ยครับนักศึกษา นักศึกษา save ค่าไว้ในAddToComposite เอ้อ..เพื่อกลับมาplot อันนี้นะครับ ในMKBใช่มั๊ยครับ เอ้อ..เราเก็บค่าต่างๆนานาเนี่ยใน CBI แล้วกลับไป plot ใน Phase 1 ส่วน Risk of Ruin นี่ เราเก็บค่า Risk of Ruin นี่ เอ่อ Initial Equity Risk of Ruin ถูกมั๊ยครับในCBI แล้วเอาออกมาอะไร ออกมาแสดงผลทีหลังอย่างงี้ ต่างๆนานานะครับ อ่ะมาดูกันนี่ อันแรกเลยเนี่ย ตอนปกติเราเขียนโค้ดเขียนตัวแปรอยู่ในนี้ใช่มั๊ยครับ ตัวแปรเราเนี่ยโดยปกติพื้นฐาน ตัวแปรทั่วไปนะครับnormalนี่ เวลานักศึกษาตั้งชื่อตัวแปรทั่วๆไปเนี่ยนะครับ และAmibroker จะทำให้เป็น Normal Variable เนี่ย มันจะPersistent คงอยู่เนี่ยเฉพาะใน Phase นั้นๆ เท่านี้ยังไม่พอนักศึกษา นอกจากมันอยู่ในPhaseนั้นๆแล้วเนี่ย ใน Phase..นี่ Phase 1 ใช่มั๊ยครับ มันเฉพาะเจาะจงกับหุ้นตัวนั้นๆด้วย หุ้นตัวนั้นๆอย่างอะไรนักศึกษา Open High Low ใช่มั๊ยครับนักศึกษา เห็นมั๊ยครับ ถ้าตอนนี้นักศึกษาอยู่ PTT เนี่ย มันก็ใช้เฉพาะอะไร Open High Low โอเคมั๊ยครับ พอหุ้นตัวที่สองมา สามมา ถามจริงมันใช้ Open High Low ของ PTT ป่าว ? ..ไม่ได้ใช้แล้ว พวกเนี้ยเป็น Normal Variable มันจะอยู่ในPhaseของมันนี่ Executions ประเภทนี้ของมันเท่านั้นแล้วไม่ไปอยู่กับอะไรครับ ไม่ไปอยู่กับsymbolsอื่นๆเป็น symbol specific เจาะจงกับsymbolนั้นๆ และมันก็ไม่ส่งต่อไปยัง Phase 2 ด้วย อันนี้นะครับ นอกจากอยู่ Phase 1 Phaseเดียวเท่านั้นเนี่ยนะครับ มันไม่ส่งผ่านไปยังsymbolsถัดๆไปด้วย นี่..ไม่ส่งผ่าน อันนี้เป็นอะไรครับ เรียกว่า In 1 AFL Execution, Persistencyนะครับของตัวแปรทั่วไปเนี่ย Normal จะอยู่ได้แค่ในนี้เท่านั้น อันที่สองคือเวลานักศึกษาเขียน นี่.ถ้านักศึกษาเขียนตัวแปรนี่ ตั้งVariableนี้อยู่ในCBIใช่ไหมครับ ตัวแปรนั้นๆเนี่ยNormal Variable ในCBIเนี่ยมันก็จะอยู่แต่เฉพาะในCBIเท่านั้น โอเคมั๊ยครับนักศึกษา ไม่ส่งต่อกลับไปในตัวPhase 1 ได้ อันนี้พูดถึง Normal Variable นะครับ ที่นักศึกษาเรียนมาเนี่ยนักศึกษาจะเห็นว่านักศึกษาสามารถส่งต่อมานี่ได้หรือจากนี่ไปนี่ได้เนี่ย เพราะนักศึกษาใช้อยู่สองอย่างก็คือ AddToComposite กับ StaticVarSet & VarGet โอเคมั๊ยครับทำให้ส่งต่อผ่านได้ แต่โดยปกติเนี่ย Normal Variable ทั่วไป ตัวแปรทั่วไปเนี่ยส่งต่อไม่ได้ส่งผ่านไม่ได้ ..นี่อันนี้ก็เป็น In 1 AFL Execution เหมือนกัน นี่.คราวนี้มาดูคู่นี้ คู่นี้เป็นกรณีซึ่งตัวแปรสามารถ “อยู่ในนี้ก็ส่งมานี่ได้ อยู่นี่ส่งมานี่ได้” มิหนำซ้ำยังอะไรครับ อยู่ในหุ้นsymbolตัวนี้ใช่ไหมครับ ยังส่งต่อให้symbolsตัวอื่นๆได้ อยุ่ที่นักศึกษาจะเขียนตัวแปรยังไง นี่..อันนี้เนี่ยเราเรียกว่า Across AFL Executions นี่นะครับความต่อเนื่องของตัวแปรนะครับ Persistency เนี่ยสามารถข้าม Across คือข้าม Executions นี่..ตอนนี้Amibrokerอ่านโค้ดนี่ครับแล้วเก็บค่าตัวแปรข้อมูลเนี่ย สามารถข้าม Across Executions ได้ และก็ Across Phase ด้วยระหว่างPhase 1 กับ Phase 2 นี่ไปกลับได้ นักศึกษาถามเอ๊ะ..ทำไมมีจาก CBI กลับมา ? ที่Phase 1 จำได้มั๊ยครับ เราเขียนโค้ดนี่Phase 1เสร็จปุ๊บมารันPhase 2 เก็บค่าตัวแปรนี่กลับมาplot โอเคมั๊ยครับ ตอนกลับมาplotนี่ ความจริงคืออะไรครับ “กลับไปยังโค้ดที่Phase 1 นักศึกษา” เอ่อ..ตอนplotกราฟที่ใช้ AddToComposite เอาสร้าง data เก็บไว้นะครับเพื่ออะไร เพื่อให้มัน Persistent ให้อยู่ต่อเนื่อง คราวนี้ก็กลับมาสรุปนะครับว่า Variable Persistency เนี่ย เราต้องเข้าใจก่อนว่าAmibroker ทำการexecuteนี่ต่อ 1 Backtest เนี่ย มี N Symbols + 1 CBI โดยที่ Variables ที่ persisting ONLY In 1 Execution. ประเภทตัวแปรที่อยู่เฉพาะใน Execution เดียวเท่านั้นเนี่ย มีอะไรบ้างนี่ และก็ตัวแปรอีกแบบนึงคือแบบที่ Across Executions นี่ และก็จาก Phase1 ไป Phase 2 มีอะไรบ้าง อ่า..พอเดาได้มั๊ยครับจากที่พูดไปทั้งหมดเมื่อกี้นี้กับเรียนมา อันแรกคือ Normal Variable ตัวอย่างเช่น O,H,L,C นี่เห็นมั๊ย อันนี้เป็นอะไรครับ symbol specific กับหุ้นนั้นๆนี้ แม้กระทั่ง Indicators ก็ตาม ต่อไป VarSet กับ VarGet นี่โอเคมั๊ยครับ นี่..อันนี้นี่เขียนในไหนนี่ ieRuin นี่เขียนในCBIนักศึกษา โอเคมั๊ยครับ อ่า..แต่เราใช้ตัว StaticVarSet กับ VarGet นี่เอาออกมาได้ แต่ถ้าเราไม่ใช้นี่ “ถ้าใช้แค่ VarSet กับ VarGet เฉยๆ ไม่มี Static มันก็จะอยู่ใน CBI อย่างเดียวเท่านั้น” คราวนี้ตัว Across ล่ะนี่ อันนี้เรียนจนเหนื่อยเลยนักศึกษา MKB ใช่มั๊ยครับ เรียนเรื่อง AddToComposite เรียบร้อย MKB และความจริงก็มีเรื่องของplotด้วยนี่ Risk of Ruin ก็มีplot นี่ โดยการใช้ AddToCompositeออกมาเห็นมั๊ย คราวนี้ก็จะเริ่มรู้แล้วอ๋อ..ถ้ามีPlotนี่อาจจะมีpreferใช้ AddToComposite รึป่าว แต่เอาหลักนะครับโฟกัสเรื่องนี้ก่อน Persistency ความอยู่ต่อเนื่องของVariableนะครับ Across Executions and from Phase 1 to Phase 2 และเผลอๆกลับมาPhase 1 ใหม่ด้วย และก็อีกตัวนึงเนี่ยซึ่งมีส่วนสำคัญมากนะครับ สองตัวนี้มีความสำคัญกับ Advance Risk & Money Management มาก ก็คือ StaticVarSet / StaticVarGet นะครับ บางทีเราสั้นๆว่า StaticVar นักศึกษา อย่างเช่นอะไร Initial risk & on-going risk โอเคมั๊ยครับ เดี๋ยวเรื่องนี้มีสอนนะครับ ไม่ต้องเป็นห่วง ให้นักศึกษารู้จักก่อนว่าประเภทของ Variable Persistencyเนี่ยมีอยู่สองแบบ “ 1 Execution กับ Across Executions ” โอเคมั๊ยครับ อันนี้คือเป็น basic มาตรฐานต้องใช้ โอเคมั๊ยครับ คราวนี้เนี่ยพักหลังนี่มีตัวใหม่เข้ามานักศึกษา เพิ่งอัพเดทAmibrokerนะครับ ก็เรียกว่า Amibroker Session Persistency นี่ความอยู่ต่อเนื่องใช่ไหมครับแต่เป็น Session, Session คืออะไร “ นี่..ทำงานกินนอนนะครับ..เปิดAmibrokerขึ้นมา..ทำการเขียนโค้ดขึ้นมาซึ่งโค้ดที่เขียนเนี่ยกับตัวแปรเนี่ยเป็นกรณี Across Executions และก็จบไปนี่นักศึกษา “ นี่คือ 1session นะครับ นักศึกษาก็ไปกิน..ไปหลับ..ไปทำงาน..ไปนอนๆ นะครับ ปิดคอมก็ได้ ปิดคอมทิ้งเลย เปิดคอมมาใหม่นี่ เปิด Amibroker ใหม่ ตัวแปรเนี้ยที่เขียนอยู่อย่างเงี้ยก็ยังอยู่ในนี้อยู่ โอเคมั๊ยครับ ยังAcross Executions อยู่ ในsessionนั้นๆนี่..ตราบใดที่คอมยังเปิดและ Amibroker ยังเปิดอยู่ นี่นะครับ แล้วก็ตัวสไลด์นี่ทำให้ดูสวยเฉยๆ Across นี่คราวนี้เนี่ยมันมีความสามารถที่จะส่งต่อเนื่องข้ามระหว่าง session ได้ อย่างเช่นกรณีอะไรครับ AddToComposite โอเคมั๊ย เพราะว่า AddToComposite เนี่ยถูกsaveไว้ในอะไรนะครับ ? database นักศึกษาต้องเข้าใจนะครับ นี่..Across Amibroker Sessions นี่ เพราะว่าอะไร AddToComposite เนี่ยsaveใน databaseเนี่ยเป็น artificial ticker เหมือนเป็นหุ้นหลอกๆ artificialนี่แบบว่าถูกสร้างขึ้นมา ถามจริงๆมีหุ้นชื่อ atcNHNL มั๊ย ไม่มี นักศึกษา ไม่มีหุ้นชื่อ atcNHNL ถูกมั๊ยครับ แต่ AddToComposite เนี่ยมันสร้างชื่อหุ้นหลอกๆขึ้นมาแล้วsaveใน database พอsaveใน database หมายความว่าอะไร หมายความว่ามัน Persistent อยู่ต่อเนื่องนี่ ปิดคอมเนี่ย..เปิดคอม..ปิดคอม..เปิดคอม อยู่หมดเนี่ย ทำให้นักศึกษาสามารถใช้ AddToComposite นี่ของ MKB ได้เรื่อยๆ อัพเดทและก็ทำได้เรื่อยๆ คราวนี้ตัวใหม่..ความรู้ใหม่ คือเรื่องของ StaticVar นะครับ สามารถsaveได้ แต่สีแดงนี่คือต้องสั่งนะครับ ถ้าไม่สั่งเนี่ยมันจะอยู่แค่sessionเดียว โอเคมั๊ยครับ อยู่แค่sessionเดียวถ้าไม่สั่ง แต่ถ้าสั่ง..มันจะถูกsaveในไฟล์ นักศึกษา ชื่อ PersistVars.bin อันเนี้ยเป็นตัวใหม่ นักศึกษา ผมก็ไม่ได้ใช้ ปกติผมไม่ได้ใช้นะครับ ปกติผมจะ reset StaticVar ตลอด โอเค..นักศึกษาจะรู้นะครับว่าทำไมเราถึงควร reset StaticVar ตลอดเวลา อ่ะ..มาสรุปดีกว่าว่าหลักๆก็คือมี Three Type of Persistency อันแรกก็คือ 1 AFL Execution: Persistent อยู่ในนี่ Phase นั้นๆ symbol นั้นๆ specific อันที่สองคือ Across Executions : นี่สามารถข้ามระหว่างหุ้นได้ symbols ได้ ข้ามระหว่าง Phase ได้ อันที่สามคือ Across Amibroker Sessions : ปิดแล้วเปิดใหม่ไม่เป็นไร ปิดแล้วเปิดใหม่ไม่เป็นไร โอเคมั๊ยครับ วิดีโอชุดนี้ดีมากนะครับ ไม่มีใครเอามาสอนเลยนะครับ ยังไงผมอยากให้นักศึกษาไปทวนก่อน ให้เข้าใจพื้นฐาน เข้าใจไอเดีย เข้าใจคอนเซ็ป ก่อนนะครับ ยังไม่ต้องรีบไปนะ แล้วเดี๋ยวพอนักศึกษาเข้าใจคอนเซ็ป เข้าใจอันนี้..เอาแค่นี้ก่อนดีกว่า เข้าใจคีย์เวิร์ดนี่ เวลาผมพูดคำว่า Executions เนี่ย นักศึกษาต้องเข้าใจว่าผมพูดถึงการที่Amibrokerอ่านโค้ด โอเคมั๊ยครับ แล้วรันโค้ดชุดเนี้ยเพื่อเก็บค่าตัวแปรต่างๆนานาไปใช้ต่อไป ..อ่านโค้ดชุดนี้ เก็บค่าตัวแปรต่างๆนานาไปใช้ต่อไปตอนที่เรารัน backtest กับ optimization หรือ scan exploration ก็ตาม โอเคมั๊ยครับ นี่คือเวลาผมพูดคำว่า Executions นะครับ Persistency นี่ ความอยู่ต่อเนื่องของค่าตัวแปร นี่..เขียนไว้ในนี้ เสร็จปุ๊บ พอคำนวณเสร็จใช่มั๊ยครับสามารถอะไร ค่าสามารถนำมาใช้ในนี้ได้ นักศึกษาจะเห็นแล้วนี่ใน Study ใช่มั๊ยครับเรามีอะไร SV นี่ Static Value จะเป็นเรื่องของ risk per share หรือ risk per position อะไรก็แล้วแต่ อันนั้นน่ะเราใช้เป็น Across AFL Executions อันเนี้ยถึงสำคัญมากครับ ถ้าไม่รู้ไอเดียคอนเซ็ปนี้จะทำ Advanced Risk & Money ไม่ได้ โอเคนะครับ เดี๋ยววิดีโอชุดหน้าเรามาเจาะลึกเรื่องประเภทของตัวแปรดีกว่า ขอบคุณครับนักศึกษาครับ

Description

X305-2 User-defined Variable Types in AmiBroker สวัสดีครับ ในวิดีโอชุดนี้นะครับเราจะมาเริ่มแนะนำนี่นักศึกษา User-defined Variable Types ก็คือเป็นประเภทของตัวแปรนะครับซึ่งนักศึกษาสามารถ define หรือสร้างหรือตั้งขึ้นมาเองได้ใน AmiBroker นักศึกษา โดยที่หลักๆนี่ผมเอาภาพสรุปมาก่อนเลยนะครับ นักศึกษาจะได้รู้ไว้ นี่..สรุปนี่มีอยู่ 4 แบบ นักศึกษา อ่ะ Normal Var ตัวแปรปกติเวลานักศึกษาเขียนโค้ดนะครับ และก็มี VarSet/Get นี่ อันนี้พิเศษ, StaticVarSet/Get และก็ AddToComposite เอาหลักๆเลยนะครับมีอยู่ 4 ประเภทที่เป็น user defined นักศึกษาตั้งชื่อเองได้โดยที่สองตัวแรกเนี่ยจะ Persist in 1 Execution เท่านั้นหมายความว่าอะไร ถ้านักศึกษาเขียนชื่อตัวแปรอยู่ในPhase 1 มันจะรันเฉพาะในPhase 1 และ Symbol Specific หุ้นเจาะจงตัวนั้นๆเท่านั้นนี่ เห็นมั๊ยครับวนอยู่นี้ ไม่ส่งต่อไปที่ตัวอื่นและไม่ส่งต่อไปที่Phaseอื่น..เหมือนกันนักศึกษาจะเขียนชื่อตัวแปรนี่อยู่ใน CBI (Custom Backtester Interface) ก็ได้ มันก็จะรันเฉพาะอยู่ใน Phase 2 CBI ไม่ส่งกลับไปที่ Phase 1 โอเคมั๊ยครับ โดยที่ Normal Var กับ VarSet/Get นี่ต่างกันยังไง ต่างกันตรงที่ว่า ตัว Normal Var เนี่ยปกตินักศึกษาพิมพ์ชื่อตัวแปรปกติเลย โอเคมั๊ยครับอันนี้เรียกว่าเป็น No Dynamic Naming ใช้โค้ดในการตั้งชื่อตัวแปรไม่ได้ อันนี้นักศึกษาเรียนใน Risk of Ruin แล้วจำได้มั๊ยครับ เอ่อ..เรื่อง ieRuin Level ที่เราใช้โค้ด improve ใช้โค้ดเนี่ยในการเขียนและตั้งชื่อตัวแปรเพื่อimprove readability ความสามารถในการอ่านโค้ดให้ง่ายขึ้นให้เร็วขึ้น เราใช้ VarSet/Get นี่ ieRuin นี่ 10, 20, 30 จำได้มั๊ยครับใช้ฟังก์ชัน optimize นี่รันได้นี่ เราใช้ For-loop สร้าง Dynamic Naming ขึ้นมาโอเคมั๊ยครับ โดยที่ efficiency ของตัวแปรเนี่ย Normal Var นี่เป็น default ของ AmiBrokerนี่เร็วสุด fastest โอเคมั๊ยครับ Faster นี่คือกลางระดับสอง อันนี้ก็ยังเร็วกว่าอีกสองตัวที่เหลือ โอเคมั๊ยครับ อีกสองตัวนี่มี StaticVar นะครับกับ ATC สองตัวนี้เนี่ย Persist through Executions นี่สามารถข้าม Phase ได้และข้าม Symbol ได้ นี่ดูนะครับกรณีนี้นะครับ นี่ข้าม Phase1 กับPhase 2 นี่ ตัวแปรที่ตั้งไว้,ค่าที่เก็บไว้สามารถส่งผ่านได้/ไปกลับได้ โอเคมั๊ยครับ มิหน้ำซ้ำนะครับยังส่งข้ามระหว่างsymbolได้ด้วย โอเคมั๊ยครับ นี่ Persist through Execution ซึ่งโชคดีก็คือว่าอะไรครับ ทั้งสองตัวเนี้ยสามารถให้มัน Across นอกจาก Across AFL Executions แล้วนะครับ ยังสามารถทำให้ Across AmiBroker Sessions ได้ด้วย ปิดAmibrokerเปิดขึ้นมาใหม่ ค่าที่คำนวณไว้ยังเก็บอยู่ได้ หล่อมั๊ยครับๆ อ่า..ก็แล้วแต่กรณีว่าจะเก็บไว้ในไหนนะครับจะเป็นdatabaseนี่หรือเป็นไฟล์ก็ตาม โอเคมั๊ยครับ Dynamic Naming ทั้งคู่นักศึกษา โอเคมั๊ยครับ ซึ่งอันนี้นี่ StaticVar นี่ Risk of Ruin นักศึกษาได้ทำ Dynamic Naming แล้ว แต่ AddToComposite ยังนะครับ เดี๋ยว AddToComposite เนี่ยเราใช้ Dynamic Naming ตอนที่เราพยายามวิเคราะห์ Optimized Multiple Strategy อย่างเช่น เรามีstrategy2ตัวใช่มั๊ยครับ ตัวนึงนี่รัน Simulation 1,000 รอบได้ Equity curves มาพันตัว strategy2 รันsimulation 1,000 รอบได้ Equity curves มาพันตัว แล้วเรา random จาก strategy1 กับ random จาก strategy2 นะครับ ไอพัน Equity curves อ่ะมารวมกันแล้วOptimizeดูว่าเราจะ weightเราจะ balance Portfolio กับ 2 strategies นี้ยังไง อันนั้นจะต้องใช้ Dynamic Naming สำหรับ AddToComposite อ่ะ..ผมว่า ผมไปเกินตัวแล้ว….มาดูเรื่อง Efficiency ดีกว่า StaticVar เนี่ยก็คือ Fair ก็คือความเร็วนะครับถือว่าโอเคเนี่ย และก็ดีกว่า AddToComposite อันนี้เปรียบเทียบกรณี Persist through Executions นะครับ เอาเปรียบเทียบสองตัวนี้ StaticVar เนี่ยเร็วกว่า AddToComposite ร้อยเท่า นักศึกษา อันนี้ according to AmiBroker นะครับจาก AmiBroker website เค้าบอกมานี่ StaticVar นี่เร็วกว่า AddToComposite ร้อยเท่า เพราะอันนี้ AddToComposite เก็บอยู่ในdatabase อันนี้ StaticVar ตอนแรกเก็บอยู่ในmemoryก่อนแล้วค่อยไปเก็บ save ในไฟล์ นักศึกษา อ่า..จะได้ทราบไว้ จะได้เลือกได้ถูก แต่ยังไงก็ตามเดี๋ยวมีสรุปตอนท้ายนะครับว่าตัวแปรแต่ละประเภทเหมาะกับอะไรบ้าง เฉพาะเจาะจงเลยในเรื่องของ Risk & Money Management ตัวแปรประเภทไหนเหมาะกับตัวแปรตัวไหนสำหรับ Risk & Money Management นะครับ แต่ก่อนอื่นนี่เรามาดูนี่ก่อน Normal นี่ปกติละ Persist in 1 Execution only เนี่ยนะครับ No Dynamic นี่ไม่ต้องสนใจ มานี่..โฟกัสที่ VarSet/Get ก่อน โดยที่โดยทั่วไปเนี่ย คนทั่วไปใช้ VarSet/Get เนี่ยนะครับและก็ Dynamic Naming เนี่ย นี่..VarSet/Get only 1 Execution แล้วก็คำถามทำไม we want variables Across Execution ? ก่อนอื่นมาโฟกัสที่นี่ก่อนที่ VarSet/Get ก่อน ว่า ปกติเนี่ยคนเค้าใช้ VarSet/Get เนี่ยนะครับในการทำ Custom Indicators นักศึกษานี่ กรณีนี้คืออะไรครับ นี่คือวน loop นี่ I = 1 ถึง 10 นะครับ และเค้านี่บอกให้ค่า close มาต่อด้วย 1 อ่ะเรียกแบบนี้ดีกว่า ชื่อ C ละกัน นำมาจากค่า close นี่ เป็น c1, c2, c3, c4 ตัวเนี้ยทำให้นักศึกษาสามารถนำค่าพวกเนี้ยมาเรียกใช้ทีหลัง แต่ในไหนครับ ในวัน Execution นะครับสำหรับตัวนั้นๆเท่านั้นนี่ เพื่อทำ Custom Indicators อ่า..อันนี้ก็เป็น option นะครับ เพราะฉะนั้นนี่ Accessibility ของ VarSet/Get เนี่ยก็จะอยู่เฉพาะในsymbolเท่านั้นนี่ อันนี้ผมทำanimationให้เห็นภาพนะครับ นี่ Symbol 1st นะครับนี่คือPhase 1 เท่านั้นนี่คือ Symbol Executions นักศึกษาก็สร้าง VarSet มาตัวนึงเป็นตัวแรก เสร็จปุ๊บAmibrokerข้ามไปรันโค้ดนี่ Phase 1 อีกครั้งนึงนี่กับ Symbol 2nd โดยที่แต่ Symbol 2nd เนี่ย ตอนที่รันตอนนี้เนี่ยAmibrokerรันโค้ดเนี่ย ค่าVarSet ของตัวแรกไม่สามารถส่งต่อมาได้ โอเคมั๊ยครับ รันเสร็จปุ๊บนักศึกษาเขียนตัวแปรอันใหม่ของ Symbol 2nd นี่ และพอAmibroker รันตัวถัดๆไปนี่ก็ไม่สามารถส่งผ่านต่อแปรออกมาได้ โอเคมั๊ยครับ แล้วใช้เพื่ออะไรอ่ะ อย่างที่บอกปกติก็คือ หนึ่งในเหตุผลที่ใช้ก็คือ กรณีของทำ Custom Indicators …..อ่า อันนี้เป็น Phase 2 นะครับนี่ อันนี้โชว์ว่าส่งต่อมาไม่ได้ นอกจากส่งต่อในSymbol Executions ไม่ได้แล้วส่งต่อไปยัง CBI ไม่ได้ โอเคมั๊ยครับ ก็ย้ำนะครับว่า VarSet/Get only persists in 1 AFL Execution ซึ่งอาจจะเป็นอยู่ใน Symbol Execution ก็ได้ หรือCBI Execution ก็ได้ แต่ต้องแค่อยู่ในตัวใดตัวนึงเท่านั้น โอเคมั๊ยครับ 1 AFL Execution Across ไม่ได้นักศึกษา คราวนี้มาดูดีกว่า เอาแล้วอย่างงี้ใช้ทำอะไร ไม่หล่อเลยนักศึกษา Practical Usage นะครับ นี่มีตัวแปรนี่ส่งต่อข้ามกันไม่ได้ นักศึกษา แต่เราสามารถใช้เป็นอะไรครับ Symbol specific เจาะจงกับหุ้นตัวนั้นๆแล้วทำเป็นนี่ vIndicator (variable indicator) นี่คือ Custom Variable ของหุ้นตัวนี้ๆ – มีชื่อหุ้นนี่และก็มี – iBar พอมาหุ้นตัวที่สองนี่ก็ชื่อหุ้นนี่และก็ iBar โอเคมั๊ยครับ ชื่อหุ้นและก็มี iBar ขึ้นมา นี่..โดยที่ให้ตัวแปรที่ตั้งเนี่ยอยู่เฉพาะในExecution ของมันเท่านั้น โอเคมั๊ยครับ เดี๋ยววิดีโอหน้าๆจะมาเฉลยนะครับว่า ความจริงเนี่ยไอ้ AAV ชื่อหุ้นเนี่ยไม่ต้องมีก็ได้ ABICO ไม่ต้องมีก็ได้ เอ้อ..นักศึกษานึกออกไหมว่าทำไมไม่จำเป็นต้องมี อ่ะ..เดี๋ยววิดีโอหลังๆมาเฉลยนะครับ คราวนี้เนี่ยมาตอบประเด็นดีกว่า ตอนที่เราเห็นนี่ว่ามันไม่ข้าม Across Execution นี่ Why do we want a variable persisting Across Executions, and from Phase 1 to Phase 2 ? หรือจาก Phase 1 ไป Phase 2 แม้กระทั่งกลับมา Phase 1 ใหม่ ทำไมเราต้องการล่ะ โอเคมั๊ยครับ เมื่อเราต้องการความสามารถในการ persisting Across Executions เนี่ยนะครับ เมื่อเราทำการคำนวณหรือมีการอ้างอิงนี่นะครับ มีความจำเป็นที่ต้องอ้างอิงเนี่ย นี่.. Variables เนี่ยเห็นมั๊ยว่าส่งผ่านต่อนี่ Required in All Symbol Executions อย่างเช่นกรณี Market Analysis นี่ นำมาผนวกกับ buy/sell ของหุ้นนั้นๆนี่ อาจจะเอาตัวนี้มากผนวกได้ (AddToComposite) นักศึกษา เพื่อพิจารณาตลาดนี่เอื้ออำนวยมั๊ย และหุ้นตัวนั้นๆมี relative strengthเทียบกับตลาดอะไรยังไงนี่ เพราะเราก็อยากมีอะไรครับ Market Analysis ซึ่งAcrossตัวแปรนี่ อันนี้กรณี AddToComposite นะครับ Across Execution ในPhase 1 และกรณีที่สองล่ะ นี่ Across จาก Phase 1 ไป Phase 2 นี่อย่างเช่น คำนวณ initial risk หรือ current risk ก็ตามเนี่ยนะครับของหุ้นแต่ละตัวนี่ แล้วโยนกลับมาใน CBI ให้คำนวณหา Position Sizing, Risk base หรืออะไรก็ตาม เดี๋ยวมีสอนนะครับ เอ้อ..เพราะฉะนั้นเนี่ยหลักๆก็นี่ สองตัวนี้คือความจำเป็นว่าทำไมเราถึงนี่ Why do we want a variable persisting Across Executions ? โอเคมั๊ยครับ อ่ะดีนะครับ ก็ลองกลับไปทวน ตอนนี้นักศึกษาเริ่มได้ไอเดียล่ะ เห็นแนวทางแล้วว่าทำไม ชื่อตัวแปรนี่ถูกผลกระทบโดยตรงจาก Executions “ การที่ Amibroker Execute โค้ด อ่านและตีความโค้ดเก็บค่าตัวแปรให้เรา ” โอเคมั๊ยครับ ต่อไปนี่ เรามาดูพี่หล่อของเราดีกว่า พระเอก StaticVarSet/Get for Across Executions เดี๋ยวเจอกันวิดีโอหน้านะครับ อ่า…นักศึกษาปริ้นท์ออกมานะครับอันนี้ และอีกอันที่สรุปก็คือนี่ ขอบคุณครับ

Description

X305-3 StaticVar for Across Executions สวัสดีครับ ในวิดีโอชุดนี้นะครับจะพูดถึง StaticVarSet/Get นะครับ อ่ะ..ความจริงเนี่ย Amibroker เรียกสั้นๆว่า StaticVar นะครับซึ่งเป็นสำหรับ Across Executions อันนี้เป็น พี่หล่อ นะครับ หล่อพอๆกับ AddToComposite นักศึกษา เมื่อก่อนเนี่ยนะครับ เดี๋ยวผมขอเกริ่นหน่อยตอนที่ผมทำตัว Money Management เนี่ยเขียนโค้ดใน AmiBroker ผมจะใช้แต่ AddToComposite ตอนนั้นเนี่ย StaticVar ยังไม่พัฒนามาถึงทุกวันนี้ นักศึกษา โอเคมั๊ยครับ ซึ่งปัจจุบันเนี้ยนี่คือปี 2018 StaticVar เนี่ยพัฒนามาไกลมาก โอเคมั๊ยครับ แล้วมีข้อได้เปรียบหลายๆอย่างนะครับเทียบกับ AddToComposite เดี๋ยวเราจะมาเปรียบเทียบกัน แต่ก่อนอื่นเรามารู้จัก StaticVar ก่อน นี่นะครับ อันนี้มาจากเพจของAmibrokerเลยนะครับ ซึ่งนี่..ตัวแรกก่อนนี่คือว่าตอนที่ AmiBroker ทำการexecutes โค้ดเนี่ยนะครับมันจะ allocated memories นะครับเพื่อเก็บค่า StaticVar คือ “คงไว้” คงอยู่ใน memories ไว้ โอเคมั๊ยครับ คำนี้สำคัญนักศึกษาโอเคมั๊ยครับ เพราะว่าคำว่า “คงไว้” เนี่ย มันจะอยู่..อันนี้ by default นะครับ โดยทั่วไปมันจะอยู่จนกว่านักศึกษาจะปิดโปรแกรม Amibroker อันเนี้ยเป็นประเด็นนะครับที่ตอนที่นักศึกษาทำ Static อ่ะแล้วพยายามassignค่า โอเคมั๊ยครับ assign ค่าvalueอะไรก็ตามเนี่ยนะครับ แล้วที่เราเซทว่าจะassignค่าเมื่อ stocknum = 20 หรือ stocknum = 1000 นักศึกษา อ่ะ..ถ้านักศึกษาจำไม่ได้ก็กลับไปทวน studies นะครับ ..นี่..เรามีหุ้นแค่ 10 ตัว แต่เราจะไปassignค่าตอนstocknum เป็น 20 กับตอนเป็น 1000 เนี่ย ถามจริงว่ามันมีมั๊ย มันไม่มีนักศึกษา แสดงว่าอะไร แสดงว่าไม่มีการassignค่าจริง แล้วทำไมนักศึกษายังสามารถรัน execution รัน backtest ได้ล่ะ ก็เพราะว่า Amibroker เนี่ยมันเอาค่าเดิมนะครับตอนที่ยังรันได้ ตอนที่ stocknum เนี่ยเซทเป็น 0 เนี่ยเก็บไว้ในmemories แล้วเอาค่าเดิมนั้นมาใช้ โดยที่เราเนี่ย ถ้าเราประมาทหรือเราไม่เอะใจเนี่ยเราจะไม่รู้เลยนะครับว่าค่าที่มันใช้มันผิด เพราะว่าตอนนั้นน่ะเราไปเปลี่ยนแล้วนี่ว่า stocknum เป็น 20 กับเป็น 1000 มันไม่มีจริง นักศึกษา มันกลับไปใช้ค่าเมื่อ backtest สองหรือสามครั้งก่อนหน้านี่ตอนที่ stocknum มันเป็น 0 อยู่ โอเคมั๊ยครับ เอ้อ..วิธีเช็คก็ลองรันดู ปิดแล้วเปิดโปรแกรมดูก็ได้ คราวนี้พอนักศึกษารันใหม่ โดยที่ stocknum นักศึกษาเป็น 1000 เงี้ย มันก็จะเห็นแล้วว่า ค่าออกมาเป็น emptyคือไม่มีค่า เพราะฉะนั้นจึงสำคัญมากนะครับเวลาที่นักศึกษาใช้ StaticVar เนี่ยนะครับ ตอนที่ก่อนจะรันbacktestเนี่ยในช่วงต้นๆของโค้ดของ Phase 1 นักศึกษาควรจะทำการนี่ StaticVarRemove() เรียกฟังก์ชั่นเนี้ยในการลบค่าตัวแปรต่างๆนานาของ StaticVar ที่นักศึกษามีนะครับ remove ทิ้งออกให้หมด reset ทิ้งออกให้หมด โอเคมั๊ยครับ แล้วเวลาเกิดerrorเนี่ยเราจะได้รู้ โอเคมั๊ยครับ ไม่ใช่รันไปเรื่อยๆโดยไม่รู้ว่าตอนนี้ค่ามันassignผิดassignถูก นักศึกษา นี่..เพราะว่ามัน Across Symbol Executions and CBI Execution แล้วก็ Across Amibroker Sessions มันจะ Across Amibroker Sessions ก็ต่อเมื่อนักศึกษามาเซท persistent นี่จาก False เนี่ยให้เป็นTrue ปิด Amibroker ไป เปิด Amibroker ขึ้นมาใหม่ ถ้าตัวนี้เป็น True ค่าที่คำนวณไว้จะยังคงอยู่ โอเคมั๊ยครับ อันนี้เป็นตัวเริ่มใช้ต้องเป็น version 5.80 นะครับ นี่มี new parameter ชื่อ persist นี่โดยจะเก็บไว้ในไฟล์ชื่อ PersistVars.bin เป็นไฟล์นะครับ เมื่อนักศึกษาเซทargumentตัวที่สาม “ อันนี้ชื่อ, อันนี้ค่า, persistentตัวที่สาม เนี่ยนะครับเป็นTrueเท่านั้น อันเนี้ยผมไม่เคยใช้นักศึกษาโอเคมั๊ยครับ ปกติผมอยากresetใหม่ทุกครั้งที่ผมรันbacktestตลอด ผมใช้ StaticVarRemove() ในการรีเซทค่าทิ้งและไม่เคยเก็บค่า persistent ไว้ ไม่เคยเซทตัวนี้เป็นTrue, compressionMode อันนี้ปี2018ครับ ตัวนี้ยังไม่นิ่งนี่ แนะนำว่าอย่าเพิ่งใช้นักศึกษา อย่าเพิ่งซิ่ง “ โอเคมั๊ยครับ อันนี้ก็มีต่อนะครับนี่ ที่แจ้งไว้นะครับว่าตัว StaticVar เนี่ยเร็วกว่า AddToComposite 100 เท่า เพราะฉะนั้นนี่อะไรที่ต้องคำนวณ intensively คำนวณซ้ำๆหนักๆหรืออย่างเช่นคำนวณกับหุ้นทุกตัวเนี่ย initialRisk นี่ หุ้นแต่ละตัวมี initialRisk มีความเสี่ยงไม่เท่ากัน ใช่มั๊ยครับ ต้องคำนวณทุกตัวเนี่ย ถ้าเป็นเมื่อก่อนนี่ผมจะใช้ AddToComposite นี่ในการคำนวณหา Risk, initialRisk กับ currentRisk ของหุ้นแต่ละตัวนักศึกษา ซึ่งมันช้ามากเพราะต้องรัน 100 หุ้นใช่มั๊ยครับ คราวนี้..ณ ปี 2018 version 6.20 นี่ เราควรใช้ StaticVar นะครับในการคำนวณความเสี่ยง initialRisk และ currentRisk เนี่ยต่างกันนะนักศึกษาของหุ้นแต่ละตัวเนี่ย ไม่ควรใช้ AddToComposite แล้ว AddToComposite นี่ควรใช้กับอะไรที่คำนวณแค่ครั้งเดียวแล้วรันตลอด Executions ทั้งหมดอย่างเช่น กรณีของmarket อย่างเงี้ย นักศึกษาอาจจะมาใช้ AddToCompositeได้ โอเคมั๊ยครับ คราวนี้ก็มีเป็นเคสๆไปเดี๋ยวมาชี้แจงนะครับ เอาแค่นี้ก่อนว่า StaticVar เนี่ยเร็วกว่า AddToComposite นี่..และอันนี้นะครับนี่อันนี้คือเตือนเฉยๆว่า StaticVar เนี่ยไม่เหมาะสมกับการใช้กับพวก tick data หรืออะไรก็ตามเนี่ย ซึ่งปกติเราก็ไม่ได้ใช้อยู่แล้วนะครับ เรา ThaiQuants นี่สอนนักศึกษาใช้ End of Day data อันนี้ก็ไม่มีปัญหา แต่ยังไงเตือนไว้แล้วกันว่าใครจะลงรายละเอียดถึงtickแล้วมาใช้ StaticVar เนี่ยนะครับ อ่า..ก็ระวังว่าอาจจะไม่เวิร์คนะครับ และก็นี่..ก็คือแค่ชี้แจงเฉยๆว่าตัว StaticVar เนี่ยช้ากว่า normal AFL variables คือชื่อตัวแปรปกติเวลานักศึกษาโค้ดเข้าไปอ่ะ ที่ไม่ได้เขียน StaticVar หรือเป็น VarSet/Get อ่ะนะครับ อันนั้นเป็น Normal Variable นี่..ตัวNormalนี่จะเร็วสุดอย่างที่บอกเป็น fastest อันนี้ StaticVar ผมบอกว่าเป็น fair โอเคมั๊ยครับ และถ้า VarSet/Get เฉยๆ ก็คือเป็น fast คราวนี้มาดูดีกว่า Accessibility ของ StaticVarSet/Get นะครับ นี่..Symbol ตัวแรกนี่คำนวณออกมา StaticVarSet ของหุ้นตัวแรก..หุ้นตัวที่สอง…หุ้นตัวที่สาม ซึ่งเพราะว่าเป็น StaticVar เนี่ยมันจึงมีความสามารถในการส่งผ่านข้ามต่อได้ โอเคมั๊ยครับ ซึ่งก็แล้วแต่กรณีว่านักศึกษาจะนำไปใช้ทำอะไรนะครับ แต่ปกติเราไม่ได้ใช้นักศึกษา เราไม่ได้ส่งข้ามต่อ โอเคมั๊ยครับ นี่.. ซึ่ง StaticVar เนี่ย Setของหุ้นตัวที่หนึ่งนี่ยิงตรงมาหาCBIได้ มาใช้ในCBIได้นะครับ ซึ่งอันนี้เป็น Accessibility เป็นความสามารถทางด้านเทคนิค โอเคมั๊ยครับ ทำให้เราเนี่ยมาตอบโจทย์ตรงนี้ได้ ว่าเราสามารถให้ตัว StaticVar นี่ครับ รันข้ามนี่ Symbol Executions Phase1 จบมาส่งต่อมายัง Phase 2 CBI Execution ได้ หรือแม้กระทั่งกลับไป อันนี้เป็นความสามารถทางด้านเทคนิค โอเคมั๊ยครับ ของตัวแปรนะครับ แต่คราวนี้เนี่ย อันนี้ทางด้านเทคนิค ทางด้านโคดดิ้งก็อย่างนึงแล้ว ทางด้าน Practice หรือ Practical Usage เนี่ยก็เป็นอีกกรณีนึง อ่ะ..มาดูเคสเหมือนเดิมนะครับว่าเรามี หุ้นแต่ละตัวเนี่ย และก็มี StaticVar มา ถามว่าส่งผ่านได้มั๊ย ? ส่งผ่านได้ เพียงแต่ว่าปกติมันไม่ Practical นักศึกษา, Possible but not practical โอเคมั๊ยครับ แล้วกรณีPractical คืออะไร อ่ะอย่างเช่นนะครับ นี่..คำนวณนี่ Market Trend นี่ กับ Market Volatility โอเคมั๊ยครับ เราคำนวณตอนไหน ? ตอนที่อยู่ stocknum = 0 คำนวณแค่ตอน Symbol 1st เท่านั้นแหละ แล้วนำมาใช้ Across ผ่าน Symbol 1st มานี่ ผ่าน Symbol 2nd นี่เผื่อจะต้องใช้ ผ่าน Symbol 3rd มาแล้วก็มาจบที่ CBI เห็นมั๊ยครับว่าอันนี้ทำการคำนวณแค่ครั้งเดียวนี่ อันนี้อยู่ในstudiesนะครับนักศึกษา กลับไปทวนได้ นี่อย่างงี้ก็คือPractical อีกกรณีนึง ซึ่งPractical ก็คืออะไร กรณีซึ่งคำนวณ initialRisk, currentRisk ของหุ้นตัวนั้นๆ นี่..ของตัวที่สอง ของตัวที่สาม โอเคมั๊ยครับ ถามว่าส่งต่อมั๊ย ? ไม่ได้ส่งต่อ..ไม่ได้ส่งต่อไปหุ้นตัวที่สองถูกมั๊ยครับ อันนี้ความเสี่ยงหุ้นใครหุ้นมัน ไม่ต้องส่งต่อนักศึกษา ไร้สาระ แต่จะต้องอะไรครับ ส่งไปยังCBIนี่ ให้ CBIทำการคำนวณ โอเคมั๊ยครับ อันนี้เวิร์คๆ อ่า..คราวนี้เนี่ย เดี๋ยวผมลืมเลยกลับมาบอกก่อน เรื่อง initialRisk กับ currentRisk เนี่ยแต่ละตัวของใครของมันใช่มั๊ยครับ เนี่ยเห็นมั๊ย ตัวเนี้ยเพราะว่าคำนวณเยอะมากนักศึกษาเพราะฉะนั้นเราควรจะใช้ StaticVar เพราะมันเร็วกว่า AddToComposite นี่..คำนวณของใครของมันนะครับ ซึ่งต่างจากกรณีนี้ นี่..Market นี่ปกติจะหุ้นสิบตัวร้อยตัวเราก็สามารถคำนวณแค่ครั้งเดียวถูกมั๊ยครับแล้วส่งผ่านมาถึง CBI กรณีนี้เนี่ยนักศึกษาใช้ StaticVar ได้ อันนี้ผมแนะนำนะครับ ถ้านักศึกษาทำ Market Analysis เป็น Market Filter (MKF) หรือ Market Classification (MKC) นักศึกษาควรใช้ StaticVar ย้ำนะครับ ถ้านักศึกษาทำ Market Analysis เป็น MKF หรือ MKC นักศึกษาควรใช้ StaticVar ส่งผ่านมาเรื่อยๆ แต่ถ้านักศึกษาใช้ Market Analysis เป็น Market Breadth (MKB) ตัว MKB เลยนะครับก่อนที่จะไปใช้ใน Filter หรือ Classification เนี่ย ไอตัว MKB เลย นักศึกษาควรใช้เป็นตัว AddToComposite อ่า..ไปทวนดีๆนะครับ แล้วเดี๋ยวคำอธิบายเดี๋ยวมาทีหลังนะครับว่าทำไม นี่อันนี้ก็ข้ามไป ส่งต่อมาตอลด ทำให้เราจบนี่ Completed Accessibility ของ Variable Types นี่..VarSet/Get อยู่ใน Symbol นั้นๆนี่ specific หรืออยู่ในPhase นี่..อันนี้ส่งต่อมาที่ Phase 1 ได้นะครับ หรืออยู่ในPhaseนั้นๆ นี่ VarSet/Get เท่านั้น อันนี้คือรูป Completed Accessibility นะครับ ” VarSet/Get นี่ Phase ใด Phase นึงเท่านั้น Phase 1 ก็ Phase 1 Phase 2 ก็ Phase 2 ส่งข้ามไม่ได้ “ แต่ถ้าเป็น Static ส่งข้ามและไปกลับได้ อ่า..โอเคมั๊ยครับ อันนี้ก็จบ พี่หล่อ เรียกว่า พี่หล่อ StaticVar นะครับ เรียบร้อยแล้วลองไปทวนดูดีๆครับ แล้วเดี๋ยวเรามาเจอกันต่อนี่ กลับมาพูดถึง AddToComposite ในเชิงเปรียบเทียบนิดหน่อย โอเคมั๊ยครับนักศึกษา เดี๋ยวมาว่ากันต่อครับ ขอบคุณครับ

Links ศึกษาเพิ่มเติม

Risk 0f Ruin

VarSet/Get

AddToComposite

StaticVarSet/Get

 

Risk of Ruin

Risk of Ruin คืออะไร?

ความน่าจะเป็น (Probability) ที่จะเกิดการขาดทุนอย่างรับไม่ได้ (Unbearable Loss) “ความน่าจะเป็นที่พอร์ตหุ้นจะพังพินาศ”

Risk of Ruin “ความน่าจะเป็นที่พอร์ตหุ้นจะพังพินาศ” หามาได้ยังไง?

  • ใช้สูตรสมการทางคณิตศาสตร์ Mathematical Formula
  • ใช้การจำลองการลงทุน Monte Carlo Simulation in AmiBroker

Continue reading

Common Code Errors in AmiBroker

Code Errors ที่มักเจอกันบ่อยๆใน AmiBroker โดยเฉพาะสำหรับผู้เริ่มต้นและมือใหม่ ซึ่งบทความนี้จะมาทำการชี้แจง Errors ต่างๆ ร่วมถึงวิธีสังเกตุและการแก้ไข Continue reading

Walk Forward Analysis

Walk Forward Analysis คือ การวิเคราะห์ระบบแบบก้าวเดินไปข้างหน้า โดยใช้ Optimization หาค่า optimized parameters จาก In-Sample Period ไปใช้ใน Backtesting ใน Out-Of-Sample Period ถัดๆไป เพื่อทดสอบระบบว่าเมื่อนำมาใช้งานจริงๆ (Out-Of-Sample Period) แล้วจะได้ผลลัพท์ที่ดีหรือใกล้เคียงจาก In-Sample Period แค่ไหน แล้วยังเป็นการทดสอบเรื่อง Curve Fitting ด้วย

Continue reading

Monkey Tests in AmiBroker

Monkey Tests เป็นการทดสอบและเปรียบเทียบว่า Strategy ที่เราเขียนขึ้นมา หรือ เงื่อนไขในการซื้อขายของเรา ดีกว่า “ลิง” หรือ การสุ่มมั่วๆรึเปล่า เช่น ซื้ัอแบบมั่วๆแบบลิง หรือ ขายแบบมั่วๆแบบลิง

Continue reading

Trend Following May the Trend be with You

“May the Trend be with You” เป็นวีดีโอซีรี่ย Trend Following ทั้งข้อคิดและการเขียนโค้ดในโปรแกรม AmiBroker ซึ่งเปิดให้นักลงทุนได้ดูเป็นของขวัญ Merry Christmas and Happy New Year 2016 ครับ

Continue reading