fbpx

มีวิธีเขียนให้มัน rotate หุ้น ทุกวันที่ ที่กำหนดอย่างไรครับ

SiamQuant Minimal Home – White Webboard ห้องโปร : Professional Membership Support มีวิธีเขียนให้มัน rotate หุ้น ทุกวันที่ ที่กำหนดอย่างไรครับ

ติดป้ายกำกับ: 

  • ผู้สร้าง
    กระทู้
  • #10253
    v3
    Participant

    ผมลองเอาตัวอย่าง SQ 52 week hi ให้ซื้อทุกวันจันทร์ โดยใช้

    PositionScore = IIf(DayOfWeek()==1, Score, scoreNoRotate );

    แต่พอ backtest แล้ว ไม่มีอะไรออกมาเลยครับ

    แล้วถ้าจะเขียนให้มัน rorate ทุกวันที่ 1 หรือ 16 ของเดือน มีวิธีเขียนยังไงครับ

    ขอบคุณคร้าบบบบบ

     

     

     

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

    มี Code เต็มๆมั้ยคับ

    เห็นจาก Code ตอนนี้บอกเเค่ว่า ถ้าวันจันทร์เป็นจริงเท่านั้นคับ

    #10255
    Amibroker Platform
    Participant

    a = Day();

    b1 = a < Ref(a,-1);

    b2 = a – 15 > 0 AND  Ref(a,-1) – 16 < 0 ;

    b = b1 OR b2 ;

    //PositionScore = IIf( b , Score ,scoreNoRotate);

     

    Filter = 1;

     

    AddColumn(a, “Day”,1.0);

    AddColumn(b,”first or mid”, 1.0);

     

    ลองประมาณนี้ดูคับ

    rorate ทุกวันที่ 1 หรือ 16 ของเดือน  ถ้าวันที่ 1 หรือ 16 ตรงกับวันหยุด ก็จะเลื่อนไปวันถัดไปให้คับ

    #10256
    v3
    Participant

    ได้แล้วครับ ถ้าจะกำหนดวันที่ซื้อเลย ต้องเอาพวก setteadedelay เป็น 0 ก่อน

     

    SetTradeDelays( 0, 0, 0, 0);

     

    #10257
    v3
    Participant

    ผมเอา SQ – 52 Weeks High มาลองเล่น โดยให้ rorate บ่อยๆ ทุกวันจันทร์ และเลือก 10 ตัว ที่มี score >0.95

    SetOption( “InitialEquity”, 1000000 );

    SetOption( “CommissionAmount”, 0.4 );

    BuyPrice = H;

    SellPrice = L;

     

    และให้ซื้อหุ้นที่มีมูลค่า ซื้อขายแต่ละวันเกิน 5 ล้าน

    ผลลัพท์ มันเว่อวังอลังการ เกินจะเชื่อเลยครับ ไม่รู้มีอะไรผิด

    equity

    #10266
    v3
    Participant

    ตอนนี้เจอสาเหตุนึงที่ทำให้ผล มันดูดีเกินจริงแล้วครับ

    ถือว่าเป็นการแชร์ข้อผิดพลาดของผมแล้วกันครับ ผมเอา SQ – 52 Weeks High มาดัดแปลงดังนี้

    SetTradeDelays( 0, 0, 0, 0 );  // ตอนแรก ใช้ 1,1,1,1 แต่ไม่มีอะไรออกมาเลย พอเปลี่ยนเป็น 0 หมด ถึงจะมีการเทรด

    BuyPrice      = H;

    SellPrice       = L;

    MaxPos = 10;  // input

    PctSize  = 100 / MaxPos;

    SetPositionSize( PctSize, spsPercentOfEquity );

    mon = DayOfWeek()==1; // rotate every monday

    HPrd                      = 250;

    H52WLevel = Ref( HHV( H, HPrd ), -1 );

    H52WScore = C / H52WLevel;

    // filter only high volume stock

    tradevol = C*V;

    //

    Score = IIf( tradevol>2000000 AND DataRestriction>0 AND H52WScore>0.95, H52WScore, 0 ); PositionScore = IIf(mon, Score, scoreNoRotate );

    คือให้มัน rotate ทุกวันจันทร์ แต่วิธีนี้ ไม่สามารถเกิดได้จริง เพราะ เราจะคำนวณ score ได้ ก็ต่อเมื่อจบวันจันทร์ แล้ว จึงไม่สามารถ rotate  ได้จริงวันจันทร์ครับ มันจึงเป็นการแอบดูอนาคต ทำให้ผล ดีเกินจริง

    และผมพึ่งเจอวันนี้เองว่า amibroker  สามารถเช็คว่า code เรา มี future leak ไหม ตรง formula editer เลยครับ บนเมนู มีรูป สี่เหลี่ยมข้าวหลามตัด 3 อัน  ข้างๆ มีปุ่ม drop down 

    จะมีหัวข้อ Check มันจะบอกเลยว่า code เรามีการใช้ค่าอนาคตไหม

     

    #10281
    Amibroker Platform
    Participant

    ที่คุณ v3 บอกว่าตรวจ future leak คือเเบบในภาพเปล่าคับ

     

     

    #10283
    v3
    Participant

    ใช่ครับ คือผมพึ่งรู้ แห่ะๆ

    ขอบคุณครับผม

    #10286
    Amibroker Platform
    Participant

    ถ้าตามภาพ ผมจะบอกว่ามันเเค่เตือนเฉยๆคับ ว่าฟังชั่นที่เราใช้เข้าข่ายต้องระวัง future leak เท่านั้นคับ ไม่ได้ยืนยันว่า future leak จริงๆ

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

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

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

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

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

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