- 发布者:
- Vladimir Karputov
- 显示:
- 1477
- 等级:
- 已发布:
- 2017.04.21 11:51
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
本EA交易使用了两个 iStochastic (随机震荡) 指标和一个 iRSI (RSI, 相对强弱指数).
思路的作者 — cxa, MQL5 代码的作者 — barabashkakvn.
根据对已平仓交易的分析计算手数大小:
//+------------------------------------------------------------------+
//| 计算最佳的手数大小 |
//+------------------------------------------------------------------+
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 上的回测结果:
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/17236