ผมเคยคิดว่า EA น่าจะมี code backtest วิธีคำนวนว่าทุนมีอยู่แค่ 100 เหรียญ ตลอด เพื่อทดสอบว่า อีเอมันเทรดตอนใหนก็เริ่มที่ 100 เหรียญได้ไม่ล้างพอรต์ แน่นอน
เพราะอีเอพวก martingale มันจะกำไรสูงมาก จนบางอันที่โชวว่ารอด จริงๆ แล้วมันรอดเพราะกำไรสะสมมาก่อน มากพอ แต่หากว่า บางคนที่โชคไม่ดีไปเริ่มเทรดตอนกราฟลากยาว ก็จะโดนล้างสะอาดทันที
จริงๆมันมีคำสั่งนี้มานานมากแล้ว ตั้งแต่ MT4 แล้วละแต่อาจจะมีคนเอามาใช้น้อย ผมก็อ่านข้อมูลไม่ถึงตรงนั้น ยิ่ง MQL5 มีทั้ง คำสั่งทดสอบ ฝากและถอน ด้วยทั้งคู่เลย ใช้งานได้ในโหมด backtest อย่างเดียวนะครับ ใช้งาน ใน live ไม่ได้
คำสั่งง่ายมาก แค่ใส่ TesterWithdrawal(จำนวนเงินถอนออก)
สามารถประยุกตเขียนคำนวนกำไรว่าได้เท่าใหร่ แล้วให้มันถอนเงินออกเหลือแค่เงินต้นได้
MQL5 มี TesterDeposit(จำนวนเงินฝากเข้า)
สามารถประยุคตว่า ถ้า balance เป็น 0 คือล้างพอรต และเติมเงินเข้าไปอีกให้เทรดต่อได้ แล้วพอผล backtest ออกมาจะได้รู้ว่า ใช้อีเอแล้วล้างพอรต์ไปกี่รอบ (นับจำนวน deposit) และจะเสียเงินไปเท่าใหร่ แบบนี้ก็ได้
ผมกำลังลองทำอีเอทีมีฟั่งชั่นนี้อยู่ เพื่อเอาไว้ backtest โดยเฉพาะ
ไอเดียนี้อาจช่วยให้พัฒนาอีเอได้ดีขึ้น ลองเอาไปทำดูครับ
ทดสอบ ลองเอาคำสั่งไปใส่ในอีเอดูครับ เผื่อมันจะสั่งฝากเงินเข้าไปเทรดฟรีได้ หรือ ถอนเงินจริงออกมาได้ 5555 (ขอให้โชคดีนะ ระวังโบรกแบนละ)
ลองเอา code นี้ใส่ไปในอีเอ เป็น options เวลา backtest ก็ให้มันทำงาน
ตัวอย่างไอเดีย code
(ไฟล์แนบตัวอย่าง code)
input bool backtestWithdraw = true; // backtest with Withdraw profits
input int allwaydepositfund = 100; // start deposit money
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//if (backtestWithdraw == true) CheckProfitsAndWithdraw();
if (backtestWithdraw) CheckProfitsAndWithdraw();
//if ( IsTesting() || IsOptimization() ) CheckProfitsAndWithdraw();
}
//+------------------------------------------------------------------+
void CheckProfitsAndWithdraw()
{
double balance=AccountInfoDouble(ACCOUNT_BALANCE); // check balance
if (balance>allwaydepositfund) // check balance high than deposit fund
{
double WithdrawProfits = balance-allwaydepositfund; // calculate profits over deposit for Withdrawal
TesterWithdrawal(WithdrawProfits); // Withdrawal profits
}
}