fbpx

ถามการเขียนสูตร Chanderlier Trailing stop ครับ

  • ผู้สร้าง
    กระทู้
  • #5577
    Avatarนิรนาม
    ไม่เปิดใช้

    {Chandelier Trailing Stop}
    ATRper:=Input(“ATRper”,1,100,10);
    Constant:=Input(“Constant”,1,5,3);
    ARC:=Constant*ATR(ATRper);
    Trail:=
    If(C>PREV AND Ref(C,-1)>PREV,
    Max(PREV,C-ARC),
    If(C<prev and="" if(c="" min(prev,c+arc),="" ref(c,-1)PREV,C-ARC,C+ARC)));

    อันนี้คือที่พี่มดเคย post ไว้ใน ถามตอบในบทความ Trailing stop ครับ …. คราวนี้ผม (มือใหม่เรื่องโปรแกรมมาก ๆ -_-“) จะเขียนสูตรอันนี้มาลงใน Amibroker ครับ ลองมั่วดู ไปได้แค่นี้อ่ะครับ ….

    ATRper = Param(“ATRper”,1,100,10);
    Constant = Param(“Constant”,1,5,3);
    ARC = Constant*ATR(ATRper);

    Trailing = IIf(C>Ref(C,-1) AND Ref(C,-1)>Ref(C,-2),Max(Ref(C,-1),C-ARC),IIf(C<Ref(C,-1) AND ….???

    ไปต่อไม่ถูกอ่ะคับ ไม่เข้าใจว่า ="" คืออะไรครับ ใครพอรู้บ้าง ช่วยมือใหม่ด้วยนะครับ ขอบคุณนะครับ

กำลังดู 6 ข้อความตอบกลับ - 1 ผ่านทาง 6 (ของทั้งหมด 6)
  • ผู้เขียน
    ข้อความตอบกลับ
  • #5583
    Avatarนิรนาม
    ไม่เปิดใช้

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

    #5582
    Avatarนิรนาม
    ไม่เปิดใช้

    ผมคงตอบตามความเข้าใจและสูตรของผมนะครับ ไม่เหมือนกับที่คุณมดใส่ไว้ในสูตรของบทความแต่ก็ใช้ได้เหมือนกัน ผมใช้กับระบบผมด้วยโดยผมใช้ AmiBroker ครับ (ผมอ่านเขียน MetaStock ได้บ้างแต่ไม่ขนาดช่ำชองมองทะลุนัก) สูตร Chandelier Stop จะแบ่งออกเป็น 3 กรณีนะครับคือ
    1. ถ้าหุ้นกำลังขึ้น หรือ C > Prev AND Ref(C, -1) > Prev ให้ตั้งค่า Stop ของวันนี้เป็นค่า Max (Prev, C-ARC) เพื่อป้องกันไม่ให้จุด Stop ลดลงในกรณีที่ราคาปิดต่ำลงแต่ยังไม่ต่ำจนตกเส้น Stop (ในที่นี้ Prev จะหมายถึงค่า Stop ของวันก่อนหน้าครับ)
    2. ถ้าหุ้นกำลังตก หรือ C < Prev AND Ref(C, -1) < Prev ให้ตั้งค่า Stop ของวันนี้เป็นค่า C-ARC เพื่อลดค่า Stop ลง ที่ทำแบบนี้เพราะในจังหวะหุ้นตกแบบนี้ เราต้องขายหุ้นไปแล้วนั่นเองดังนั้นค่า Stop จะลดลงเพื่อรอสัญญาณซื้อ(สัญญาณซื้อเป็นคนละเรื่องกันเลยไม่ขอพูดถึง)
    3. กรณีหุ้นกลับตัวแสดงจุดขาย C < Prev AND Ref(C, -1) > Prev จุดนี้จะยังให้ Stop เป็น Prev ก่อน เพื่อให้การหาค่าด้วยฟังก์ชั่น Cross ทำงานได้

    จะเห็นว่าแค่ 3 กรณีดังกล่าวนั้น ยังไม่ครบทุกเงื่อนไขของความเป็นไปได้เชิงตรรกศาสตร์ กรณีที่เหลือเช่น C > Prev AND Ref(C, -1) < Prev หรือกรณีการเท่ากันก็ไม่ได้มีกำหนดไว้ (เพราะ Stop ใช้สำหรับการขายอย่างเดียว ไม่ได้กำหนดการซื้อ) ดังนั้นจะเป็นค่าอะไรก็ไม่น่ามีปัญหา สูตรต่อไปนี้ผมก็เลยแปลงมาใช้เองลองพล็อตกราฟดูก็ใช้ได้ครับ

    #5581
    Avatarนิรนาม
    ไม่เปิดใช้

    ยาวเกิน ต้องมาต่อตรงนี้

    ใน AmiBroker เจอปัญหาว่า Prev จะใช้ได้กับ Array ที่ระบบใส่ค่าให้ เช่น O H C L ครับ ผมพยายามหาว่าจะใช้กับ Array ที่เราสร้างเองได้ยังไงก็ยังไม่เจอ ดังนั้นผมเลยเลี่ยงการใช้ Prev (ใช้แล้ว error) มาเป็นการทำงานด้วย Scalar ทีละตัวแทนครับ ซึ่งทำให้เกิดผลกระทบว่าใช้คำสั่ง Max ไม่ได้เพราะคำสั่งนี้ทำงานกับ Array ไม่ใช่ข้อมูลเดี่ยว ๆ ทีละตัวแบบ Scalar เลยต้องแก้แบบกำปั้นทุบดินคือใช้ If เอาเอง สูตรก็คือ (ถ้าก็อปไประวังพวกรหัสของ HTML จะติดไปด้วยนะครับ ให้เทียบกับที่มองเห็นในกระทู้ก่อน)

    Trailing = C-ARC;
    for(i = 1;i < BarCount;i++)
    {
    if (C[i-1] > Trailing[i - 1])
    {
    if (Trailing[i] < Trailing[i - 1])
    Trailing[i] = Trailing[i - 1];
    }
    }

    ลองแปลงให้เป็น MetaStock จะได้ประมาณนี้ครับ (ไม่แน่ใจว่าถูกไหม เพราะไม่ได้ลองครับ)
    TT = C-ARC;
    Trailing:=If(C > Ref(TT, -1), Max(Ref(TT, -1), TT), TT);

    #5580
    Avatarนิรนาม
    ไม่เปิดใช้

    อ่าว กรรม เพิ่งเจอจุดผิดในสูตร MetaStock ของผม มันไม่ให้ EDIT ซะแล้ว เลยขอโพสใหม่เป็น

    TT = C-ARC;
    Trailing:=If(Ref(C, -1) > Ref(TT, -1), Max(Ref(TT, -1), TT), TT);

    #5579
    Avatarนิรนาม
    ไม่เปิดใช้

    ขอบคุุณมากครับ คุณ Pongkemon เด๋วต้องลองเอาไปทดลองดูหน่อยแล้วครับ ^__^

    #5578
    Avatarนิรนาม
    ไม่เปิดใช้

    ใน Ami ใช้คำสั่ง Prev กับการทำ Stop ไม่ได้ครับ มันไม่เอื้ออำนวยอย่างที่คุณ Pongkemon ว่าไว้ ยังไงต้องขอบคุณคุณ Pongkemon มากนะครับที่ช่วยแวะมาตอบให้ครับผม 😀

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