ผมใช้ฟังชั่นนี้ครับ
พอใช้ใน live demo มันก็ปิดได้ปกตินะครับ
ทดสอบทำอีเอให้ buy แล้วมันก็ปิดในเวลา เช่น 1 นาที
แบ้สเปิด order ใหม่ พอถึงเวลาก็ปิด ทำงานได้ไม่มีปัญหาครับ
แต่ว่าพอใช้ backtest มันทำงานไม่ตรงครับ มีปัญหากับ backtest มันไม่ปิดครับ ถือ order ยาวเลย
ลองใส่เรียกฟังชั่นหลายๆอัน เพื่อให้้มันเรียกซ้ำอีก ก็ยังไม่ปิดครับ งง เลย
สคริปเช็คว่า order เวลาเปิด รวมกับเวลาที่ตั้งไว้ แล้วเวลาปัจจุบันเกินแล้วหรือยัง ถ้าเกินแล้วก็ปิดได้เลย
มีปัญหาใน backtest ครับ ช่วยใช้ใน demo ดูเหมือนไม่มีปัญหาครับ
POSMAXAGE ตั้งค่าเป็น 1 วินาทีนะครับ 60 คือ 1 นาที
extern int POSMAXAGE=300; //max age of position - closes older positions
CheckForClosePositions();
//+------------------------------------------------------------------------------------+
//| Closes position based on indicator state |
//+------------------------------------------------------------------------------------+
void CheckForClosePositions()
{
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
if(m_position.Time()+POSMAXAGE<TimeCurrent())
m_trade.PositionClose(m_position.Ticket());
//---
return;
}