ผิดตรงไหนครับ

Home Forums Q&A ถามตอบ ผิดตรงไหนครับ

This topic contains 6 replies, has 3 voices, and was last updated by  cheaw 5 months ago.

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #5664

    cheaw
    Member

    ผมลองเขียนสูตรยังงี้ครับ
    อยากให้เกิดสัญญาณซื้อตอนที่ MA 10 ตัด MA 50 แต่ condition เพิ่มคือ ต้องมี adx 14 วัน มากกว่า 25 ครับ และ PDI มากกว่า 25 ครับ
    ทำไมมัน Backtest ไม่ได้น่ะครับ ไม่ทราบว่าการเอา Condition มาใส่เพิ่ม ต้องใช้คำสั่งอะไรหรอครับ

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

    SECTION_BEGIN(“Cross MA”);
    a=MA(C,10);
    b=MA(C,50);
    Plot(a,”MA10″,colorRed,styleLine);
    Plot(b,”MA50″,colorBlack,styleLine);
    C=ADX(14)>25;
    d=PDI(14)>25;

    Buy=Cross(a,b) AND ADX(14)>25 AND PDI(14)>25;
    Sell=Cross(b,a);
    _SECTION_END();

    #5666

    Pongkemon
    Member

    Backtest ไม่ได้? มันฟ้องว่าอะไรเหรอครับผมไม่ได้ลองเองแต่อ่านแค่นี้ก็นึกภาพไม่ออก

    ที่ผมเห็นแปลกบ้างก็
    1. ผมไม่เคยใช้คำสั่ง SECTION เลย ก็เลยไม่แน่ใจว่ามีผลไหม
    2. เงื่อนไขการซื้อ กับ เงื่อนไขการขาย ไม่เป็น Complement กันสนิทครับ เพราะกรณีของการซื้อคุณคิด ADX กับ PDI แต่ตอนขายไม่คิด ดังนั้นในกรณีที่ MA ตัดกันแล้ว แต่ ADX ไม่ถึง ทำให้ไม่เกิดสัญญาณซื้อ แต่พอมันตัดกันกลับมาเราดันได้สัญญาณขายโดยไม่มีสัญญาณซื้อมาก่อน ผมก็ไม่เคยลองเลยไม่รู้ว่ามีผลหรือไม่ แต่ให้ดีลองใช้ ExRem(Buy, Sell); ExRem(Sell,Buy); เพิ่มไปในบรรทัดหลัง Sell=… ดูครับ

    อ้อ MA ใน AmiBroker มันเป็น SMA นะครับ ไม่ใช่ EMA ถ้าต้องการ EMA ก็ใช้ฟังก์ชั่น EMA(C,10) แทนนะครับ ปกติผมมักจะเห็นคนนิยม EMA มากกว่าถ้าเป็นช่วงเวลาไม่ยาวนานนัก (สั้นกว่า 200 หรือ 1 ปีนับเฉพาะวันทำการ)

    #5668

    atipat
    Member

    ตัวแปร C ห้ามใช้ครับ มันเอาไว้สำหรับ Close ต้องเปลี่ยนเป็นชื่ออื่นครับ

    #5670

    cheaw
    Member

    จริงด้วยครับ C ห้ามใช้ครับ ขอบคุณมากครับ ได้หล่ะครับ : )

    #5671

    cheaw
    Member

    ขอถามนิดหนึงครับคุณ Pongkemon
    exrem มันคือคำสั่งยังไงหรอครับ ผมอ่านแล้วไม่ค่อยเข้าใจครับ รบกวนช่วยอธิบายหน่อยได้ไหมครับ :)

    ExRem
    - remove excessive signals

    Trading system toolbox
    (AFL 1.5)

    SYNTAX exrem( ARRAY1, ARRAY2 )
    RETURNS ARRAY
    FUNCTION removes excessive signals:
    returns 1 on the first occurence of “true” signal in Array1
    then returns 0 until Array2 is true even if there are “true” signals in Array1

    EXAMPLE

    buy = ExRem( buy, sell );
    sell = ExRem( sell, buy );

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

    • This reply was modified 5 months ago by  cheaw.
    #5673

    Pongkemon
    Member

    ExRem ใช้สำหรับลบสัญญาณส่วนเกินครับ เราจะใช้คำสั่งนี้กับคู่ของสัญญาณที่จะมีความหมายต่อเมื่อเกิดขึ้นสลับกัน เช่น สัญญาณซื้อกับสัญญาณขาย การเกิดสัญญาณขายขึ้นติดกัน 2 ครั้ง เราจะถือว่าครั้งที่สองเป็นสัญญาณเกินเพราะเรายังไม่ได้ซื้อเลยจะให้ขายได้ยังไง

    ทีนี้สัญญาณเกินพวกนี้จะเกิดขึ้นได้ก็ต่อเมื่อเงื่อนไขการสร้างสัญญาณซื้อกับสัญญาณขายไม่ได้เป็นเงื่อนไขที่สลับกันพอดี

    ตัวอย่างเงื่อนไขที่สลับกันพอดีเช่น ซื้อขายเมื่อ MACD ตัด Signal เพราะเมื่อตัดขึ้น ก็จะต้องมีตัดลงก่อนถึงจะมีตัดขึ้นครั้งถัดไปได้ แต่ระบบที่คุณสร้างสัญญาณขายอาจจะเกิดขึ้นสองครั้งติดกันได้เพราะแม้สัญญาณ MA ตัดกันแล้วแต่ถ้า ADX กับ PDI ไม่ถึงก็ไม่เกิดสัญญาณซื้อ แต่เส้นที่ตัดไปแล้วก็สามารถตัดเพื่อสร้างสัญญาณขายได้ ก็เลยใช้ ExRem มาลบสัญญาณที่เกินออกเพื่อป้องกันการสับสนของระบบครับ

    #5674

    cheaw
    Member

    ขอบคุณมากครับ K.Pongkemon

Viewing 7 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic.