fbpx

มีสมาชิกท่านใด Backtest rotational concept โดยใช้ Amibroker บ้างครับ

SiamQuant Minimal Home – White Webboard ห้องโปร : Professional Membership Support มีสมาชิกท่านใด Backtest rotational concept โดยใช้ Amibroker บ้างครับ

  • ผู้สร้าง
    กระทู้
  • #9621
    SiamQuant Team
    Keymaster

    พอดีลองทำ backtest ตามที่ได้ศึกษาจากในบอร์ดมาเรื่อยๆอะครับ ตั้งแต่จุดเข้า จุดออก MM มาติดตรงการ Rotation อะครับ ไม่รู้ว่าจะเขียน code ให้ test ได้ยังไงอะครับ คือตอนที่เราเลือกหุ้นเราสามารถใช้ positionscore ในการเลือกหุ้นที่ rank สูงๆแต่ พอลองเอา positionscore มาทำเป็น sell filterเพื่อคัดหุ้นใน port ออก มันไม่ได้ผลตามที่คิดอะคับ

    ส่วนอีกเรื่องคือเรื่องการคัดตัวที่ performance ต่ำกว่าเป้าหมายขั้นต่ำออกจากพอร์ตอะคับอย่างเช่น ภายใน 3 เดือนถ้ากำไรน้อยกว่า 10%ให้คัดออกจากพอร์ต ลองใช้

    Barssince(Buy) = 60 AND (C-Ref(C,-60))/Ref(C,-60)  < 0.1

    มันไม่ work อะครับ พอมี Idea มั้ยครับ

    ขอบคุณครับ

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

    sell filter  ยังไม่เคยลองครับ

     

    ส่วนการคัดตัวที่ performance ต่ำกว่าเป้าหมายขั้นต่ำออกจากพอร์ต

    ลองทำเป็น sell signal แทนได้มั้ยครับ

     

    lastBuyPrice = ValueWhen(Buy,BuyPrice,1);

    cond1 = Barssince(Buy)>60 ;

    cond2 = C < (1.1*lastBuyPrice);

    Sell = cond1 AND cond2 ;

    #9627
    SiamQuant Team
    Keymaster

    ขอบคุณครับคุณ Piyoros

    ลองเอาcodeไปใช้มันไม่มี error แต่มันไม่ได้กรองหุ้นออกตามที่เราต้องการอะครับ เลยลองเอา sell signal ตัวอื่นๆออกหมดเหลือแต่ตัวนี้ก็ไม่ได้อะครับ พอมี idea มั้ยครับ

    #9626
    Piyoros-Tpakdee
    Participant

    ไม่ได้กรองหุ้นออก ตามที่ต้องการ  แล้ว ผลที่ได้มันเป็นยังไงครับ

     

    มันขายหุ้นที่ ถือมานานกว่า 60 แท่ง แล้ว  ราคาปิด < (1.1*ราคาซื้อ)   รึเปล่าครับ

     

    หรือว่ามันไม่สั่งขายเลย   แต่ผมเดาว่า  60 แท่งน่าจะยาวไป จน หุ้นที่เราเลือก มันโดน stop ไปก่อน รึเปล่าครับ

    #9625
    SiamQuant Team
    Keymaster

    ผมลอง code ข้างล่างนี้อะคับ

    SetTradeDelays(1,1,1,1);
    PosQty = 10;
    SetOption(“MaxOpenPositions”, PosQty );
    PosSize = 100/PosQty;
    SetPositionSize(PosSize, spsPercentOfEquity) ;

    Buy = Cross(C,MA(C,100));

    lastBuyPrice = ValueWhen(Buy,BuyPrice,1);
    cond1 = BarsSince(Buy)>ุ60 ;
    cond2 = C < (1.1*lastBuyPrice);
    Sell = cond1 AND cond2 ;
    Buy=ExRem(Buy,Sell);
    Sell=ExRem(Sell,Buy);

    ลองให้เหลือ sell signal ตัวนี้ตัวเดียวแล้ว backtest ดู ก็ยังมีหุ้นที่ถือนานกว่า 60 แท่งใน port ที่กำไรติดลบ แล้วก็มีหุ้นที่ถูกขายก่อน 60 วันอะคับ ลองเปลี่ยนตัวเลข 60 ดูก็ยิ่งงงๆ ไม่รู้ว่ามันใช้ condition ไหนในการส่ง sell signal อะคับ

    #9624
    Piyoros-Tpakdee
    Participant

    cond1 = BarsSince(Buy)>60 ;     ตัวนี้จะเริ่มนับตั้งแต่แท่งที่ 61

    cond2 = C < (1.1*lastBuyPrice);   ถ้า ราคาปิด ต่ำกว่า ที่กำหนด  จะขาย

     

    ดังนั้น จึงมีโอกาส ที่จะถือยาวกว่า 60 แท่ง ถ้าหุ้นตัวนั้นราคายังสูงกว่า 1.1*lastBuyPrice
    จนกว่าราคาจะต่ำกว่า  1.1*lastBuyPrice   ถึงจะขาย  ครับ

     

    แต่หุ้นที่ถูกขายก่อน 60 แท่ง  ที่ผมเทสต์ ไม่เจอนะครับ   อย่างน้อยต้องถือ 60 แท่งตามเงื่อนไขเป๊ะ เลยครับ

    ไม่รู้ว่า ทราบแล้วรึเปล่านะครับ แต่ถ้าเรามีเงื่อนไข sell  ตัวอื่นที่ใช้อยู่ก่อนหน้านี้ ก็ เอามารวมกันก็ได้ครับ  เช่น มี Sell 1  Sell2    ก็เขียนสูตรว่า

    Sell = Sell1 OR Sell2 ;

    #9623
    Piyoros-Tpakdee
    Participant

    ถ้าอยากรู้ว่า มันขายแท่งไหน ลองใส่ indicator นับแท่งไว้ด้วยก็ได้ครับ
    จะได้ตามดูง่ายๆ ว่ามันขายแท่งที่เรากำหนดรึเปล่า

    // Bar Since Buy

    Buy = Cross(C,MA(C,100));

    bs = BarsSince(Buy);
    Plot(bs,”bars since buy”,colorRed,styleLine);

    #9622
    SiamQuant Team
    Keymaster

    พอดีเพิ่งเริ่มเขียน code อะคับเลยยังไม่ค่อยคล่อง ขอบคุณคุณ Piyoros มากครับ ช่วยได้เยอะเลยครับ^^

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