我正在尝试在MQL5中编写极其简单的EA,如果条件满足,它仅需遵循一个。有一个存储最近5个收盘价的数组。这个想法是当最后四个收盘价(当前蜡烛除外)处于上升趋势时,打开买入仓位。但是,EA甚至不计较该条件就开始一个接一个地打开买入头寸。我要发布完整的代码。
我试图创建一个新方法Uptrend(),它的条件完全相同-仍然无法正常工作。
#include <Trade\Trade.mqh>
CTrade trade;
void OnTick()
{
double tpoint = Point();
double ClosePriceArray[];
ArraySetAsSeries(ClosePriceArray, true);
CopyClose(Symbol(), PERIOD_CURRENT, 0, 5, ClosePriceArray);
double Ask = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits);
if ((ClosePriceArray[4] < ClosePriceArray[3] < ClosePriceArray[2]< ClosePriceArray[1]) && PositionsTotal() < 1) {
trade.Buy(0.10, NULL, Ask, (Ask-50*tpoint), (Ask+150*tpoint), NULL);
}
}
我希望EA仅在满足条件时才打开买入头寸。没有错误消息或编译错误。
答案 0 :(得分:1)
使用&&
分隔比较运算符,并添加以下另一个条件
if ((ClosePriceArray[4] < ClosePriceArray[3] && ClosePriceArray[3] < ClosePriceArray[2] && ClosePriceArray[2]< ClosePriceArray[1]) && PositionsTotal() < 1)
{
trade.Buy(0.10, NULL, Ask, (Ask-50*tpoint), (Ask+150*tpoint), NULL);
}
此外,您无需标准化Bid
和Ask
价格,它们在默认情况下已标准化,但是您需要标准化其他价格值,例如tp和sl水平,手数等。
答案 1 :(得分:0)
除了选择的答案。永远不要使用NormalizeDouble
来规范价格和数量,这会导致不可预测的结果。
价格必须始终通过刻度大小标准化:
double NormalizePrice(double p)
{
double ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
return(MathRound(p/ts) * ts);
}