fbpx

ระบบเทรดที่ออกด้วย trailing stop

  • ผู้สร้าง
    กระทู้
  • #23041
    Avatarmikan171
    Participant

    ขอปรึกษาหน่อยครับ

    กรณีที่เราสร้างระบบเทรดที่เข้าด้วย Buy Signal และออกด้วย trailing stop โดยใช้

    ApplyStop(stopTypeTrailing, stopModePoint, chand_atr*ATR( period ), 1, True, 0, 40 );

     

    พบปัญหาว่าระบบจะเข้าซื้อหุ้นแต่ละตัวแค่ครั้งเดียว

    (น่าจะเพราะว่าไม่มี Sell signal เลย ทำให้ Exrem Buy Sell แล้ว  หุ้นแต่ละตัวไม่เกิด Buy ครั้งต่อๆไป)

     

    มีวิธีแก้ไขหรือเปล่าครับ

    ถ้าผมจะทำ trailing stop เป็นสัญญาน sell ปกติ (โดยไม่ใช้ ApplyStop())

    ควรเขียนโค้ดยังไงดีครับ?

     

    ขอบคุณครับ

    -สมนึก

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

    สวัสดีครับ สำหรับปัญหาดังกล่าวซึ่งระบบจะเข้าซื้อหุ้นเพียงทีละตัวเดียวนั้น ส่วนมากแล้วจะมีสาเหตุจาก
    1. ไม่ได้กำหนดขนาด Position Size ทำให้ ซื้อเวลาระบบซื้อจะซื้อทีเดียว 100% เต็มในตัวแรกที่เจอสัญญาณ หรือ
    2. ในกรณีที่กำหนด initial equity ไว้น้อยเกินไป ทำให้เมื่อมีการซื้อหุ้นตัวแรกแล้ว ทำให้เหลือเงินไม่พอซื้อตัวอื่นๆ โดยเฉพาะอย่างยิ่งกับหุ้นที่ราคาสูงๆครับ

    โดยสาเหตุเหล่านั้นเกิดจากการสันนิษฐานจากข้อมูลที่พี่สมนึกให้มาในเบื้องต้นนะครับ เนื่องจากทีมงานไม่ได้เห็นชุดโค้ดทั้งหมด จึงไม่สามารถฟันธงได้ 100% ครับ อย่างไรก็ตาม ถ้าหากไม่ใช่สาเหตุดังกล่่าวข้างต้น ผมรบกวนขอรายละเอียดเพิ่มเติมหน่อยครับ จะได้ให้คำแนะนำได้ตรงจุดครับ ^^

    #23044
    Avatarmikan171
    Participant

    โค้ดประมาณนี้ก็ได้ครับ ผมตัดเฉพาะส่วนที่จำเป็นแล้ว

    ลอง backtest กับ OSP ช่วง 1/1/2019 – 1/1/2020 ก็ได้ครับ ราคาเป็นขาขึ้น ถ้าตามเงื่อนไขจะเข้าได้หลายรอบ แต่น่าจะเพราะไม่ได้ออกด้วย sell signal จึงไม่มี Buy ครั้งต่อๆไป

    SetOption( “InitialEquity”, 1000000 );
    SetOption( “MaxOpenPositions”, 20 );
    SetPositionSize(5, spsPercentOfEquity);

    Buy = Cross(C, Ref(HHV(C, 150), -1)); // price cross up highest high price;
    Sell = 0; // no use signal, exit by stop loss or trailing stop only

    // STOP
    ApplyStop( stopTypeLoss, stopModePercent, 10, 1 );
    ApplyStop(stopTypeTrailing, stopModePoint, 3*ATR(20), 1, True, 0, 40 );

    { // Section H: Order type and Slippage
    Slip = 1;
    BuyPrice = SQBuySlippagePercent(O, Slip, True); // add slippage by 1% of high-low range
    SellPrice = SQSellSlippagePercent(O, Slip, True); // add slippage by 1% of high-low range

    Buy = ExRem(Buy, Sell);
    Sell = ExRem(Sell, Buy);

    SetTradeDelays(1, 1, 0, 0); // delay buy & sell by 1 bar
    }

    StylePrice = ParamStyle( “Adjusted Price”, styleCandle, maskAll );
    upTrend = BarsSince(Buy) < BarsSince(Sell);
    downTrend = BarsSince(Buy) > BarsSince(Sell);
    Plot( C, “”, IIf( upTrend, SQColorSeaGreen(), SQColorPastelRed() ), StylePrice );
    shape = Buy * shapeUpArrow + Sell * shapeDownArrow;
    PlotShapes( shape, IIf( Buy, SQColorSeaGreen(), SQColorOrange() ), 0, IIf( Buy, Low, High ) );

    #25936
    SiamQuant TeamSiamQuant Team
    Participant

    สวัสดีครับ ไม่ทราบว่าได้ลองเอา ExRem() ออกหรือยังครับ เนื่องจากโค้ดไม่มีส่วนของ Sell หรือ Sell = 0;

    เพราะโดยปกติจะมีสัญญาณ Buy และ Sell มา แต่การที่ไม่มี Sell เลยแล้วเราไป Exrem สัญญาณทิ้งจะทำให้หุ้นแต่ละตัวมีสัญญาณซื้อแค่ครั้งแรกครั้งเดียวครับ ส่วนครั้งอื่นๆ Amibroker จะถือเป็นสัญญาณส่วนเกินและไม่นับนั่นเองครับ ^^

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