กองทุน SPDR GOLD SHARES
ถือทองก่อนหน้า
ถือทองล่าสุด
0.00
*หน่วยตัน / ราคาอ้างอิงล่าสุดจากสมาคมค้าทองคำ
สถิติกองทุน SPDR
ราคาทองคำแท่ง 96.5%
ราคาอ้างอิงล่าสุดจากสมาคมค้าทองคำ
ครั้งที่
ราคาก่อนหน้า
ราคาล่าสุด
0
(หน่วย บาท*) / อัปเดตล่าสุดเมื่อวันที่ 13 ก.ค. 2566 เวลา 13:04 น.
สถิติราคาทองคำ ไทย

ไอเดีย ใช้คำสั่งถอนเงิน TesterWithdrawal ใน backtest เพื่อทดสอบอีเอ

  • 0 replies
  • 647 views

ผมเคยคิดว่า EA น่าจะมี code backtest วิธีคำนวนว่าทุนมีอยู่แค่ 100 เหรียญ ตลอด เพื่อทดสอบว่า อีเอมันเทรดตอนใหนก็เริ่มที่ 100 เหรียญได้ไม่ล้างพอรต์ แน่นอน
เพราะอีเอพวก martingale มันจะกำไรสูงมาก จนบางอันที่โชวว่ารอด จริงๆ แล้วมันรอดเพราะกำไรสะสมมาก่อน มากพอ แต่หากว่า บางคนที่โชคไม่ดีไปเริ่มเทรดตอนกราฟลากยาว ก็จะโดนล้างสะอาดทันที

จริงๆมันมีคำสั่งนี้มานานมากแล้ว ตั้งแต่ MT4 แล้วละแต่อาจจะมีคนเอามาใช้น้อย  ผมก็อ่านข้อมูลไม่ถึงตรงนั้น   ยิ่ง MQL5 มีทั้ง คำสั่งทดสอบ ฝากและถอน ด้วยทั้งคู่เลย  ใช้งานได้ในโหมด backtest อย่างเดียวนะครับ ใช้งาน ใน live ไม่ได้

คำสั่งง่ายมาก แค่ใส่   TesterWithdrawal(จำนวนเงินถอนออก)
สามารถประยุกตเขียนคำนวนกำไรว่าได้เท่าใหร่ แล้วให้มันถอนเงินออกเหลือแค่เงินต้นได้

MQL5 มี  TesterDeposit(จำนวนเงินฝากเข้า)
สามารถประยุคตว่า ถ้า balance เป็น 0 คือล้างพอรต และเติมเงินเข้าไปอีกให้เทรดต่อได้ แล้วพอผล backtest ออกมาจะได้รู้ว่า ใช้อีเอแล้วล้างพอรต์ไปกี่รอบ (นับจำนวน deposit) และจะเสียเงินไปเท่าใหร่ แบบนี้ก็ได้

ผมกำลังลองทำอีเอทีมีฟั่งชั่นนี้อยู่ เพื่อเอาไว้ backtest โดยเฉพาะ

ไอเดียนี้อาจช่วยให้พัฒนาอีเอได้ดีขึ้น ลองเอาไปทำดูครับ


ทดสอบ ลองเอาคำสั่งไปใส่ในอีเอดูครับ เผื่อมันจะสั่งฝากเงินเข้าไปเทรดฟรีได้  หรือ ถอนเงินจริงออกมาได้ 5555  (ขอให้โชคดีนะ ระวังโบรกแบนละ)


ลองเอา code นี้ใส่ไปในอีเอ เป็น options เวลา backtest ก็ให้มันทำงาน

ตัวอย่างไอเดีย code

(ไฟล์แนบตัวอย่าง code)

โค๊ด [Select]


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
         }
         
         
}