เขียน code Amibroker แบ่งซื้อ แบ่งขายเป็นไม้ๆ อย่างไรคับ งงมากๆ ช่วยทีคับ

เขียน code Amibroker แบ่งซื้อ แบ่งขายเป็นไม้ๆ อย่างไรคับ งงมากๆ

คือเท่าที่ลองศึกษาดู เค้าใช้การกำหนด SigscaleIn และ SigscaleOut ไปที่ค่า Buy หรือ Short เช่น
-จะซื้อเป็นไม้ ก้อ .........................................................Buy = SigscaleIn;       แล้วไปกำหนดจำนวน position ที่จะเข้า
-จะขายออกบางส่วนก้อ ................................................ Sell = SigscaleOut;     แล้วไปกำหนดจำนวน position ที่จะออก
-จะปิดสัญญา tfex ที่ open Short ไว้ก้อ............................ Short = SigscaleOut;     แล้วไปกำหนดจำนวน position ที่จะออก

แต่ผมลองเขียน code set50 future ประมาณด้านล่างนี้ครับ แต่ผล backtest ก้อซื้อหมด ออกหมดทั้ง position ทุกรอบ  เลยงงว่าเขียนผิดตรงไหน หรือต้องเขียนอย่างไรให้ถูกต้อง รบกวนแนะนำด้วยครับ  ง่ายกว่าที่เขียนยิ่งดีครับ ^.^

Exit_50%_of_Long = SelectedValue(conditionA_2);      // change Array to Numberic variable
                                                                              // conditionA_2 = Exit50% for Long
                                     
Exit_50%_of_Short = SelectedValue(conditionC_2);      // change Array to Numberic variable                         
                                                                               // conditionC_2 = Exit50% for Short
                                                                     
Buy = conditionA;                       
    
IF (Exit_50%_of_Long == 1)
    {
     Buy = sigScaleOut;
    }

Sell = conditionB;

Short = conditionC;
IF (Exit_50%_of_Short == 1)
    {
     Short = sigScaleOut;
    }

Cover = conditionD;

//-----------------------------------------------
SetOption("UseCustomBacktestProc", True );
     
if( Status("action") == actionPortfolio )
{
    bo = GetBacktesterObject();  
      bo.PreProcess();  
  
    for (bar = 0;bar<BarCount;bar++)
    {  
            
        for (sig = bo.GetFirstSignal(bar); sig; sig = bo.GetNextSignal(bar))
       {
      {
             
                if (Exit_50%_of_All_Long == 1 )       
            {     
                  sig.PosSize = -50*(Buy == sigScaleOut);
                  sig.MarginDeposit = int(Sig.Price*200*0.3);  
                }
                else
                               {
                  
                                        if (Exit_50%_of_All_Long == 1 )       
                                         {     
                                                 sig.PosSize = -50*(Short== sigScaleOut);
                                                 sig.MarginDeposit = int(Sig.Price*200*0.3);
                                             }
                                        else
                                             {
                                                  sig.PosSize = -100;
                                  sig.MarginDeposit = int(Sig.Price*200*0.3);
                             }
                }
           }            
        }
        bo.ProcessTradeSignals(bar);
    }
    bo.PostProcess();
}


รบกวนแนะนำทีครับ ขอบคุณครับ ^.^

แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่