เขียน 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();
}
รบกวนแนะนำทีครับ ขอบคุณครับ ^.^																															
						 
												
						
					
เขียน 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();
}
รบกวนแนะนำทีครับ ขอบคุณครับ ^.^