fbpx

อยากให้ SQ database สามารถเลือก download Fin Data เฉพาะบางตัวได้ครับ

SiamQuant Minimal Home – White Webboard ห้องคำแนะนำ: Suggestions and Feature Requests อยากให้ SQ database สามารถเลือก download Fin Data เฉพาะบางตัวได้ครับ

  • ผู้สร้าง
    กระทู้
  • #14853
    puttipong promkunnatam
    ผู้เยี่ยมชม

    อยากให้ SQ database สามารถเลือก download Fin Data เฉพาะบางตัวได้ครับ จะได้ลดขนาด data ที่ใช้ backtest/optimizeครับ

    เพราะทุกวันนี้ test strategy แต่ละครั้ง ถ้ามีตัวแปรที่เป็น Fin เข้ามา  พอถึงคราวที่ต้อง optimize สัก 3000-4000 รอบนี่  ไปนอนได้เลยครับ รอเช้าค่อยมาทำต่อเลย ( คอมผมก็ไม่ได้ spec สูงมาก  แต่ก็ run 8 threads / amibroker ครับ)   (เพื่อน ๆ ที่เคยเรียน abqc มา น่าจะเข้าใจผมครับ)

    ตัวอย่างเช่น  มีให้ติ๊กเลือกใน SQ app ว่า  a.SQPE/SQPBV/SQEPS…(เฉพาะตัวที่เป็น basic Fin Ratio)  b.SQ…YOY /SQ…Rolling.     c. all data   เป็นต้นอ่ะครับ     หรือถ้ามีให้เลือกเฉพาะตัวเลย เช่น  เอามาเฉพาะ SQPE   ได้   จะดีมาก ๆ เลยครับ  เพราะมันจะได้ optimize ได้เร็วขึ้นอ่ะครับ      เพราะทุกวันนี้  ต้องใช้เวลาในส่วนนี้เยอะมากจริง ๆ ครับ

    หรือถ้ามีวิธีอะไรที่ทำให้ผมทำได้เอง แล้วลดขนาดของ database ได้  ขอคำแนะนำด้วยครับผม

    ขอบคุณมากครับผม

กำลังดู 7 ข้อความตอบกลับ - 1 ผ่านทาง 7 (ของทั้งหมด 7)
  • ผู้เขียน
    ข้อความตอบกลับ
  • #15570
    satapornk
    Participant

    สวัสดีครับคุณ puttipong ก่อนอื่นขออภัยที่ตอบช้านะครับ ไม่ทราบว่าคุณ puttipong ใช้วิธีการเรียกใช้ตัวแปรแบบไหนเหรอครับ

    ใช้วิธี include file เข้ามา หรือว่า ลง SiamQuantAmibrokerPlugin  ครับ ถ้าลง SiamQuantAmibrokerPlugin  แล้วจะสามารถเรียกใช้

    ข้อมูลต่างๆ ได้โดยตรงเลยนะครับเช่น ถ้าต้องการดูค่า PE ก็จะใช้สามารถเรียกใช้ SQPE() ได้เลย โดยไม่ต้องใช้การใช้คำสั่ง Include เลยครับ

    #15619
    puttipong promkunnatam
    ผู้เยี่ยมชม

    รูปแรกนี้ ใช้เวลา Run เวลาประมาณ 2 ชั่วโมง  อันนี้ผมเอา SQEPS() ออก

     

    ใช้ Plugin ครับ  ….. รูปคือ Optimization 4,200 step …… ที่ใช้เวลา run 2 ชั่วโมงกว่า คือ strategy ที่ condition ใช้แค่ OHLCV ธรรมดาครับ    แต่พอเอา SQEPS ใส่เข้ามาใน condition ด้วย แค่ตัวเดียว  จะใช้เวลา run เกือบ 9 ชั่วโมงครับ  มันก็เลยทำให้ผมเข้าใจว่า สาเหตุที่ใช้เวลา Run นานมาก น่าจะเป็น Fin Data ที่เพิ่มเข้ามาครับ     ผมก็เลยคิดเอาว่า ถ้า database เล็กลง  มันก็น่าจะ Run เร็วขึ้นครับ  ถ้าทีมงานมีคำแนะนำที่ทำให้ run เร็วขึ้น ขอคำแนะนำด้วยครับผม

    #15620

    ถ้าเรียกใช้ SQEPS() มันจะเรียกแค่ข้อมูล EPS จาก Data Column Open ของ SQ6 โดยตรงโดยไม่เกี่ยวกับตัวอื่นเลยนะครับ ดังนั้นแค่เรียกใช้ SQEPS() ตัวเดียวไม่น่าจะทำให้ช้าขึ้นหลายเท่าขนาดนั้น ยังไงเดี๋ยวถ้าพอนึกอะไรออกเพิ่มเติมจะมาแจ้งไว้ให้นะครับ

    ปล. Optimize 4200 ร้อยรอบนี่ ท่าทางระบบจะตัวแปรเยอะไม่ก็ซับซ้อนน่าดู หวังว่าจะเผื่อเรื่องของ Data Mining & Over-Fitting ไว้ส่วนหนึ่งแล้วนะครับ สู้ๆครับผม 😀

    #15627
    takymd
    Participant

    ต้องขอโทษด้วยครับ  ผมให้ข้อมูลไม่ละเอียดครับผม   ผมใช้  SQEPS_yoy() +OHLCV จะใช้เวลาเกือบ 9 ชั่วโมงครับ ,แต่พอใช้ SQEPS() +OHLCV  จะใช้เวลา ประมาณ 5 ชั่วโมงครับ   ,แต่ถ้าใช้แค่ OHLCV จะใช้เวลาประมาณ 2 ชั่วโมงครับ

     

    เงื่อนไข buy/sell  มี 8 เงื่อนไขครับ (รวม SQEPS_yoy()  ครับ)   เป็นแบบพื้นฐานธรรมดาๆ ครับไม่ได้ซับซ้อนครับ (ซับซ้อน  ยากๆผมก็เขียนโค้ทไม่เป็นหรอกครับ *_*~)   ที่ optimize 4000 กว่า step นี่ เป็น optimize slippage/ missing trade กับ run Walk forword ครับผม มันเลยออกมาตั้ง 4000 กว่า step ครับ

     

    ขอบคุณคุณมดมากๆคับผมที่ให้คำแนะนำ  มาตอบเองเลย ^_^

    #15628

    การเรียกใช้ SQEPS() จะเร็วกว่า SQEPS_YoY() โดยธรรมชาติครับ เพราะมันไม่ได้คำนวณอะไรเพิ่ม เป็นการไปดึงเอาข้อมูล EPS จาก Data Field มาเลย SQEPS_YoY() จริงๆแล้วมันเป็น Function ที่จะต้องไปคำนวณกับหุ้นแต่ละตัวย้อนหลังก่อนครับเลยใช้เวลาเหมือนการคำนวณ Indicator ตัวนึงเลย ยิ่งบาง Function ใส่เข้าไปนี่อาจช้าหนักเพราะคำนวณหลายชั้น

    ทีนี้ขออนุญาติพูดถึงเรื่องการ Optimization นิดนึง คือเท่าที่เดาน่าจะเป็นการรัน Optimization ทุกๆ Param พร้อมกันในคราวเดียวเลย ซึ่งไม่แปลกที่มันจะเสียเวลาเยอะมากเพราะจำนวน Runs จะเป็นผลคูณของช่วง Parameter แต่ละตัว อย่างไรก็ตาม อยากช่วยคิดวิธีแก้ไขโดย “ประมาณการณ์” ให้ทดสอบไดเร็วขึ้น เผื่อว่าจะมีประโยชน์บ้างนะครับ

    1. คือการแยกกระบวนการเป็นส่วนๆ จะทำให้ให้จำนวนการ Run เป็นผลบวกรวมของแต่ละขั้นตอนแทน ซึ่งเราอาจแบ่งชุดการ Optimization เป็นการแยกระหว่างเงื่อนไขของระบบ (Buy, Sell … Etc.) กับเงื่อนไขของการทดสอบ (Slippage, Position Sizing, Portfolio Size, Missing Trade) ออกจากกัน เพราะจริงๆแล้วส่วนแรกจุดประสงค์คือดูความเสถียรของเงื่อนไขสัญญาณระบบ และส่วนที่สองจุดประสงค์คือดูความอ่อนไหวต่อสภาพแวดล้อมในการซื้อขาย ซึ่งด้วยวิธีการนี้จะทำให้ช่วยลดจำนวนรอบในการลงได้เยอะพอสมควร

    2. เรื่องการ Random Slippage นั้น วิธีการที่ง่ายกว่าและอาจเข้มงวดกว่าในการทดสอบความทนทานต่อ Slippage ก็คือให้กำหนดเป็นค่า Max ของขอบเขตที่เราคาดหวังไว้ไปเลยก็ได้ครับ ถือเป็น Worst Case Scenario ไปในตัว โดยประมาณการณ์จาก Portfolio Size ของเรา เช่นกำหนด Trade ละ 2% รวมไปกลับ 4% อย่างนี้ก็ถือว่าค่อนข้างเยอะมากๆสำหรับหลายๆระบบแล้วครับ

    หวังว่าจะช่วยอะไรได้บ้างนะครับ 😀

    #15631
    takymd
    Participant

    ขอบคุณมากครับ

    #15632

    เพิ่มเติมนิดนึงครับ เมื่อวานยังไม่ได้แปะพอดีหลับก่อน 55 อันนี้ทดลองให้ Amibroker สร้าง Random Number จาก random() Function ออกมา 1000 ครั้ง จะสังเกตคร่าวๆได้ว่ามันเป็น Uniform Distribution หรือพูดง่ายๆว่าโอกาสในการเกิดแต่ละตัวเลขระหว่าง 0-1 นั้นเท่าๆกัน ดังนั้น สมมติในกรณีที่เราจะทดสอบ Random Slippage โดยกำหนดค่า Max Size ของ Slippage ไว้สัก 10% ค่าเฉลี่ยของ Slippage ที่เกิดขึ้นโดยรวมจะเป็นค่า Mean ซึ่งจะอยุ่ราวๆ 5% นั่นเองครับ นี่คือสาเหตว่าทำไมผมถึงอยากลองแนะนำให้ทดสอบเทียบกันดูระหว่างทำ Random Slippage กับ Worst Case Slippage ง่ายๆไปเลย เพราะยังไงค่าเฉลี่ยโดยรวมจะไม่มากกว่า Max Size อยู่แล้ว ซึ่งอาจจะช่วยให้ประหยัดเวลาได้เยอะเลยครับ

กำลังดู 7 ข้อความตอบกลับ - 1 ผ่านทาง 7 (ของทั้งหมด 7)
  • คุณต้องเข้าสู่ระบบเพื่อตอบกลับกระทู้นี้

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

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • เปิดใช้งานตลอด

บันทึกการตั้งค่า