SimpleTrade - MetaTrader 5EA
- 发布者:
- Vladimir Karputov
- 显示:
- 1345
- 等级:
- 已发布:
- 2017.04.21 12:19
- 已更新:
- 2018.02.15 17:23
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
本EA交易比较第零柱和第三柱的开盘价。
思路的作者是Oleksandr, MQL5 代码的作者是barabashkakvn。
建立买入仓位的条件:
if(iOpen(0)>iOpen(3))
- 如果第零柱的开盘价高于第三个柱的开盘价。
建立卖出仓位的条件:
if(iOpen(0)<=iOpen(3))
- 如果第零柱的开盘价低于或者等于第三柱的开盘价。
仓位以止损关闭或者在下一个柱开始的时候关闭:
因为 EA 交易在新柱出现的时候工作, 它有几个保护步骤 — 这样可以避免在建仓时错过整个柱。
比如,如果我们无法更新当前价格,我们就要重置计时器 (static 静态变量):
//--- 因为我们在一个新柱上,如果刷新当前
//--- 价格失败,重置计时器
if(!RefreshRates())
{
curTime=iTime(1);
return;
}
//--- 价格失败,重置计时器
if(!RefreshRates())
{
curTime=iTime(1);
return;
}
另外我们还要检查交易操作的结果:
- Buy 或者 Sell 方法必须返回 true
- 并且 ResultDeal 方法应该返回一个非零值
如果出错,我们重置计时器:
if(iOpen(0)<=iOpen(3))
{
//--- 因为我们在新柱上工作,如果刷新当前
//--- 价格失败,重置计时器
if(!RefreshRates())
{
curTime=iTime(1);
return;
}
//--- 因为我们在新柱上工作,如果交易操作失败
//--- 重置计时器
if(m_trade.Sell(Lots,NULL,m_symbol.Bid(),m_symbol.Ask()+StopLoss*m_adjusted_point))
if(m_trade.ResultDeal()!=0)
return;
curTime=iTime(1);
return;
}
{
//--- 因为我们在新柱上工作,如果刷新当前
//--- 价格失败,重置计时器
if(!RefreshRates())
{
curTime=iTime(1);
return;
}
//--- 因为我们在新柱上工作,如果交易操作失败
//--- 重置计时器
if(m_trade.Sell(Lots,NULL,m_symbol.Bid(),m_symbol.Ask()+StopLoss*m_adjusted_point))
if(m_trade.ResultDeal()!=0)
return;
curTime=iTime(1);
return;
}
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/17274