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