บทความนี้เราจะมาพูดถึง Altarius RSI Stochastic ซึ่งเป็น EA (Expert Advisor) ที่ยอดเยี่ยมสำหรับ MetaTrader 5 ที่ใช้ดัชนี iStochastic (Stochastic Oscillator) สองตัวและ iRSI (Relative Strength Index) หนึ่งตัวในการวิเคราะห์ตลาด
ผู้คิดค้นแนวคิด — cxa, ผู้เขียนโค้ด MQL5 — barabashkakvn.
EA นี้จะคำนวณขนาดล็อตตามการวิเคราะห์การเทรดที่ปิดไปแล้ว:
//+------------------------------------------------------------------+
//| คำนวณขนาดล็อตที่เหมาะสม |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int losses=0; // จำนวนการเทรดที่ขาดทุนโดยไม่มีการหยุด
//--- เลือกขนาดล็อต
lot=NormalizeDouble(m_account.FreeMargin()*MaximumRisk/1000.0,2);
//--- คำนวณจำนวนคำสั่งที่ขาดทุนโดยไม่มีการหยุด
if(DecreaseFactor>0)
{
//--- ขอประวัติการเทรด
HistorySelect(TimeCurrent()-86400,TimeCurrent()+86400);
//---
uint total=HistoryDealsTotal();
//--- สำหรับการเทรดทั้งหมด
for(uint i=0;i<total;i++)
{
if(!m_deal.SelectByIndex(i))
{
Print("พบข้อผิดพลาดในประวัติ!");
break;
}
if(m_deal.Symbol()!=Symbol() || m_deal.Entry()!=DEAL_ENTRY_OUT)
continue;
//---
if(m_deal.Profit()>0)
break;
if(m_deal.Profit()<0)
losses++;
}
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- คืนค่าขนาดล็อต
if(lot<0.1)
lot=0.1;
return(lot);
}
//| คำนวณขนาดล็อตที่เหมาะสม |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int losses=0; // จำนวนการเทรดที่ขาดทุนโดยไม่มีการหยุด
//--- เลือกขนาดล็อต
lot=NormalizeDouble(m_account.FreeMargin()*MaximumRisk/1000.0,2);
//--- คำนวณจำนวนคำสั่งที่ขาดทุนโดยไม่มีการหยุด
if(DecreaseFactor>0)
{
//--- ขอประวัติการเทรด
HistorySelect(TimeCurrent()-86400,TimeCurrent()+86400);
//---
uint total=HistoryDealsTotal();
//--- สำหรับการเทรดทั้งหมด
for(uint i=0;i<total;i++)
{
if(!m_deal.SelectByIndex(i))
{
Print("พบข้อผิดพลาดในประวัติ!");
break;
}
if(m_deal.Symbol()!=Symbol() || m_deal.Entry()!=DEAL_ENTRY_OUT)
continue;
//---
if(m_deal.Profit()>0)
break;
if(m_deal.Profit()<0)
losses++;
}
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- คืนค่าขนาดล็อต
if(lot<0.1)
lot=0.1;
return(lot);
}
ผลการทดสอบย้อนหลังบน EURUSD และ USDJPY:
ความคิดเห็น 0