fbpx

ช่วยด้วยครับ ! ปัญหากับการเทรดจริง

SiamQuant Minimal Home – White Webboard ห้องโปร : Professional Membership Support ช่วยด้วยครับ ! ปัญหากับการเทรดจริง

  • ผู้สร้าง
    กระทู้
  • #10017
    Chaiwattana
    Participant

    ตอนนี้ผมมีปัญหาเมื่อตอนเทรดจริงครับ มีอยู่ 2 ข้อครับ  ผมควรแก้ไขอย่างไรดีครับ

    1. เมื่อเทรดจริงแล้ว ผมใช้ข้อมูล EOD ของแค่ละวันในตลาดหุ้น โดยตั้งค่าระบบการซื้อขายในวันถัดไป ATO ทีนี้ปัญหามัน

    ติดอยู่ที่วันใดที่ขายและซื้อมันตรงกัน  จะขายและซื้อในวันถัดไปราคา ATO พอเทรดจริงทำไม่ได้ครับ เพราะว่าเมื่อมีหุ้นเต็มพอร์ต

    เงินจะเหลือน้อย และเมื่อตั้งขาย ATO เราจะยังไม่ได้เงิน และทำการตั้งซื้อในราคา ATO ไม่ได้ ผมต้องแก้ไขอย่างไรครับ

    2.เมื่อลอง scan และ backtest ผลการซื้อหุ้นแต่ละตัว ไม่ตรงกันครับ อย่างเช่น scan บอกให้พรุ่งนี้ซื้อ KTB SCB แต่พอถึงวันต่อมา

    ลอง backtest ดูกลับกลายเป็นว่าซื้อ KTB ตัวเดียว ผมควรแก้ไขอย่างไรครับ

    มือใหม่ โปรดชี้แนะด้วยครับ

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

    ข้อ 1 ผมยังอ่านไม่เข้าใจ

    เเต่ข้อ 2 scan กับ backtest ไม่เหมือนกันคับ Backtest มี Position Size ทำงานด้วย  Scan เข้าเงื่อนไข Buy Sell จะออกมาหมดเลยคับ ไม่มี Position Size เกี่ยวข้อง

    #10020
    Chaiwattana
    Participant

    ข้อ 1

    สมมติมีเงิน 1,000,000 นะครับ

    ในพอร์ตมี KTB 20 บาท 20,000 หุ้น รวม 400,000 บาท

    SCB 20 บาท 20,000 หุ้น รวม 400,000 บาท

    BBL 20 บาท 10,000 หุ้น รวม 200,000 บาท

    พอจบวันให้ขาย KTB และซื้อ SCC ครับ

    ดังนั้นวันถัดมาเราขาย KTB ใน ATO

    แต่จะซื้อ SCC ใน ATO ไม่ได้ครับ เพราะยังขาย KTB ไม่ได้

    ประมาณนี้ครับ แก้ไขอย่างไรครับ

     

    #10021
    Amibroker Platform
    Participant

    เเล้วตอนที่ส่งสัญญาณซื้อ ถ้าดูจาก Scan หรือ Explore ยังไงมันก็มีสัญญาณซื้อ เพราะตามที่ข้อ 2 บอก

    ถ้าไม่มีเงินก็ไม่ซื้อคับ รอจนกวา่าจะมีสัญญาณซื้อมาใหม่

    #10026
    Benz
    Participant

    สวัสดีครับ

    จริงๆแล้วตามระบบเราต้องขายแล้วซื้อใหม่เลยถูกต้องไหมครับ เพราะเมื่อขายแล้วก็จะได้เงินจาก KTB ไปซื้อ SCC ในกรณีนี้จะติดเรื่องของ Operation ของการเปิดบัญชี Cash Balance

    ผมมีข้อแนะนำแบบนี้ครับ การแก้ปัญหาตรงนี้เราอาจจะไปใช้บัญชี Cash Account หรือบัญชีเงินสดที่มีวงเงินในการซื้อขายครับ มันจะช่วยตัดปัญหาของการที่เราต้องรอขายตัวหนึ่งแล้วซื้อตัวต่อไป แต่การใช้ก็ต้องระมัดระวังในการคำนวนเงินสดที่เรามีอยู่จริงๆให้ดีนะครับ ไม่งั้นอาจจะมีซื้อเกินเงินที่เรามีอยู่ในพอร์ตที่เรา Backtest ก็ได้ครับ

    #10030
    Chaiwattana
    Participant

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

    #10078
    zephyr
    Participant

    ข้อ 1 ผมก็เป็นครับ มันเป็นข้อจำกัดของ cash balance ถ้าเป็น cash account ก็จะไม่มีปัญหา แต่เหมือนจะมีปัญหาตามมาเรื่องของค่านายหน้าอาจจะแพงขึ้น อันนี้ขอให้ลองเช็คดูครับ ส่วนผมใช้ตั้งขาย ATO แล้วเคาะซื้อด้วยมืออีกทีตอนตลาดเปิด จริงๆแล้วคุณจะพบอีกปัญหานึงของ cash balance ครับ คือตั้งซื้อหมดหน้าตักไม่ได้ เพราะเวลาตั้งซื้อหุ้นแต่ละตัว ระบบจะกันเงินไว้เพิ่มชึ้นอีก 30% เช่น คุณเหลือเงิน 50,000 ตั้งใจจะซื้อหุ้นที่ ATO สมมุติราคาปิดก่อนหน้าคือ 10 บาท คุณจะซื้อสัก 4500 หุ้น จริงๆมันคือราคารวม 45,000 ซึ่งไม่เกินวงเงินคุณ แต่คุณจะตั้งซื้อไม่ได้นะครับ เพราะระบบจะคำนวนว่าคุณต้องมีเงินอย่างน้อย =45000 *1.3 = 58500 บาท

    ทั้งหมดนี้คือข้อจำกัดของ cash balance ครับ

    ส่วนข้อ 2 มีคนตอบไปแล้วนะครับ เป็นเรื่องของจำนวน position ที่มีจำกัดครับ เช่นคุณกำหนด position size ไว้ 10 ตัว แล้วระบบ scan ตัวที่ 11-12-13– มาคุณก็ซื้อไม่ได้อยู่ดี แต่ระบบยังไงมันก็ scan มาให้ทุกๆวันแหละครับ

     

    #10305
    teeradejb
    Participant

    ขอเสริมนิดนึงครับ กรณีเป็นบัญชี Cash Balance ใช้ซื้อขายจริง แล้วยังไม่ขาย ซื้อใหม่ไม่ได้แบบนี้

    Back Test ที่ทำมาอาจไม่ตรงกัน condition ที่ใช้จริง ผลอาจจะผิดไป

    ถ้าต้องการทดสอบ Back test ที่ทำมา กับ condition ที่ใช้อยู่จริง ลองใส่คำสั่งนี้ดูเพิ่มอีกบรรทัดครับ

    SetOption(“SettlementDelay”,1) ;

    ไม่รู้จะถูกต้องรึเปล่า ผมเพิ่งเริ่มต้นเหมือนกัน

     

     

    #10341
    Oyoyo
    Participant

    สวัสดีครับคุณ Chaiwattana

    กรณีใช้บัญชี cash balance แล้วเกิดปัญหาที่ดังกล่าวมีวิธีแก้ไขได้ 2 วิธีครับ

    วิธีที่ 1

    – เปลี่ยนมาใช้ cash account ตามที่คุณ Benz ได้ว่าไว้

    วิธีที่ 2

    – ทำการ backtest ใหม่โดยเปลี่ยน setting ให้ตรงกับความเป็นจริง นั่นคือเพิ่มเงื่อนไขว่าเงินที่ได้จากการขายหุ้นตัวหนึ่งๆไม่สามารถนำมาซื้อหุ้นได้ทันทีต้องรอ 1 วัน

    – กระทำได้โดยการเพิ่ม code 2 บรรทัดนี้เข้าไปครับ (ตามที่คุณ teeradejb ว่าไว้ครับ)

    SetBacktestMode( backtestRegularRaw );

    SetOption("SettlementDelay",1);

    – วิธีการนี้จะทำให้เราสามารถปฏิบัติได้จริงตามที่ได้ backtest ไว้ครับ

    #10344
    Oyoyo
    Participant

    ผมจะทดสอบ code ข้างต้นโดยสร้างสัญญาณปลอมของ Buy และ Sell ขึ้นมาดังรูปนะครับ

    Mockup signal

    นั่นคือหุ้น SC สมมุติให้มีสัญญาณซื้อทุกวันตั้งแต่วันที่ 9/5/2016 – 16/5/2016 และมีสัญญาณขายในวันที่ 10/5/2016 วันเดียว

    เราจะทำการทดสอบโดย

    – ทำการให้ซื้อหุ้น SC ด้วยเงิน 100% ของพอร์ทเมื่อมีสัญญาณซื้อ (positionsize = -100)

    – เข้าซื้อ 1 วันหลังเกิดสัญญาณที่ราคา ATO

    ลองมาดูผล backtest กันครับ

    test1

    ลำดับเหตุการณ์

    – 9/5/2016 มี buy signal -> ซื้อ SC ที่ราคาเปิดของวันที่ 10/5/2016

    – 10/5/2016 มี sell signal -> ขาย SC ที่ราคาเปิดของวันที่ 11/5/2016

    – 10/5/2016 มี buy signal -> ซื้อ SC ที่ราคาเปิดของวันที่ 11/5/2016

    จะเห็นว่า backtester ของ amibroker ทั้งซื้อและขายหุ้นที่ราคาเปิดของวันที่ 11/5/2016 พร้อมกันซึ่งในการปฏิบัติจริงเราไม่สามารถทำได้ถ้าใช้บัญชี cash balance ( ปัญหาเดียวกับที่ คุณ Chaiwattana เจอ )

    ต่อมาเราจะลองเพิ่ม code ด้านล่างเข้าไป

    SetBacktestMode( backtestRegularRaw );

    SetOption("SettlementDelay",1);

    แล้วทำการ backtest อีกครั้งลองมาดูผลกันครับ

    test2

    ลำดับเหตุการณ์

    – 9/5/2016 มี buy signal -> ซื้อ SC ที่ราคาเปิดของวันที่ 10/5/2016

    – 10/5/2016 มี sell signal -> ขาย SC ที่ราคาเปิดของวันที่ 11/5/2016

    – 10/5/2016 มี buy signal -> backtester ไม่ได้ทำการเข้าซื้อให้ในวันที่ 11/5/2016

    – 11/5/2016 มี buy signal -> ซื้อ SC ที่ราคาเปิดของวันที่ 12/5/2016

    เราลองมาดู  detailed log กันครับ ว่าเหตุใด backtester ถึงไม่ทำการเข้าซื้อให้

    log 2

    จาก detailed log จะเห็นว่า backtester ไม่ได้ทำการเข้าซื้อให้ในวันที่ 11/5/2016 เนื่องจากมีเงินไม่เพียงพอ

    ซึ่งบรรทัดต่อมาจะเห็นว่า unsettled cash T+1 = 100,000

    นั่นคือผลจาก code 2 บรรทัดข้างต้น ที่ทำการกันเงินส่วนที่ขายหุ้นในวันดังกล่าวไม่ให้สามารถนำไปซื้อหุ้นได้

    โดยจาก code ด้านบนเราระบุไว้ว่าให้กันเงินส่วนที่ขายไว้ 1 วัน  ดังนั้นในวันถัดมา backtester จึงนำเงินก้อนนั้นไปซื้อหุ้นให้เราได้ตามปกติครับ

     

    เราลองมาระบุวันเป็น 2 วันกันดูครับ

    SetBacktestMode( backtestRegularRaw );

    SetOption("SettlementDelay",2);

    แล้วทำการ backtest อีกครั้งลองมาดูผลกันครับ

    test3

    – จะเห็นว่า backtester ทำการกันเงินที่ได้จากการขายหุ้นไว้ 2 วัน ทำให้เรานำเงินก้อนนั้นไปซื้อหุ้นได้ในวันที่ 13/5/2016 แทนครับ

     

    เราลองมาระบุวันเป็น 3 วันกันดูครับ

    SetBacktestMode( backtestRegularRaw );

    SetOption("SettlementDelay",3);

    แล้วทำการ backtest อีกครั้งลองมาดูผลกันครับ

    test4

    – จะเห็นว่า backtester ทำการกันเงินที่ได้จากการขายหุ้นไว้ 3 วัน ทำให้เรานำเงินก้อนนั้นไปซื้อหุ้นได้ในวันที่ 16/5/2016 แทนครับ (14-15/5/2016 เป็นวันเสาร์-อาทิตย์)

    การเพิ่ม code 2 บรรทัดดังกล่าวเข้าไป น่าจะช่วยแก้ปัญหาที่คุณ Chaiwattana เจอได้ครับ

    หวังว่าจะเป็นประโยชน์ครับ

    ปล. การใช้ SettlementDelay ต้องกระทำใน mode backtestRegularRaw เท่านั้นนะครับ ไม่งั้น signal บางส่วนจะหายไป ทำให้ผล backtest ผิดเพี้ยนครับ 

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

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

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

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

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

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