หลักการของ EA ตัวนี้คือ
- การใช้เส้น MA ที่จำนวน Period ต่างกันกล่าวคือ
- หาก MA5 > MA10 > MA15 > MA20 ให้ทำการเปิด Order Buy
- แต่หาก MA5 < MA10 < MA15 < MA20 ให้ทำการเปิด Order Sell
- เมื่อ EA เริ่มทำงานจะรอจนกว่าจะเข้าเงื่อนไข จึงจะเปิด Order
- EA จะทำการซื้อขายครั้งละ 1 Order เท่านั้น
- EA จะปิด Order ก็ต่อเมื่อเงื่อนไขของเส้น MA กลับไปอีกด้านหนึ่งพร้อมทั้งเปิด Order ในด้านตรงข้ามทันที ทำแบบนี้สลับไปสลับมาจนกว่าเราจะหยุดการทำงานของ EA
extern double Lot=0.1;
int start()
{ //Point 1
double MA5 = iMA(NULL,0,5,0,MODE_SMMA,PRICE_CLOSE,0);
double MA10 = iMA(NULL,0,10,0,MODE_SMMA,PRICE_CLOSE,0);
double MA15 = iMA(NULL,0,15,0,MODE_SMMA,PRICE_CLOSE,0);
double MA20 = iMA(NULL,0,20,0,MODE_SMMA,PRICE_CLOSE,0);
//Point 2
if(OrdersTotal()==0)
{
if( ( MA5 > MA10 ) && (MA10 > MA15) && (MA15 > MA20 ) )
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"EX1",0,0,Green);
}
if( ( MA5 < MA10 ) && (MA10 < MA15) && (MA15 < MA20 ) )
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"EX1",0,0,Red);
}
}
//Point 3
if(OrdersTotal()==1)
{
if( ( MA5 > MA10 ) && (MA10 > MA15) && (MA15 > MA20 ) )
{ OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}
if( ( MA5 < MA10 ) && (MA10 < MA15) && (MA15 < MA20 ) )
{ OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
}
}
return(0);
}
จะเห็นว่าผล Back test ช่วงวันที่ 1/1/2017-30/4/2017 คู่เงิน EU : H1
ตอบลบWin rate ต่ำมาก ขาดทุนเยอะ
ยังไม่สามารถนำไปใช้ได้จะต้องปรับปรุงใหม่
extern double Lot=0.1; // ประกาศให้ Lot เป็นตัวแปรภายนอกที่ผู้ใช้งานสามารถป้อนค่าที่ต้องการได้
ตอบลบ