MQL5 中的 EA 不遵循 If 条件
EA in MQL5 does not follow If condition
我正在尝试在 MQL5 中编写极其简单的 EA,它必须仅遵循一个 if 条件。有一个数组存储最后 5 个收盘价。这个想法是在最后 4 个收盘价(不包括当前蜡烛)处于上升趋势时建立买入头寸。然而,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 仅在满足条件时才开仓。没有错误消息或编译错误。
使用&&
分隔比较运算符并添加另一个条件如下
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 水平、手数等等
除了选择的答案。永远不要使用 NormalizeDouble
来标准化价格和数量,这会导致不可预知的结果。
价格必须始终按刻度大小标准化:
double NormalizePrice(double p)
{
double ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
return(MathRound(p/ts) * ts);
}
我正在尝试在 MQL5 中编写极其简单的 EA,它必须仅遵循一个 if 条件。有一个数组存储最后 5 个收盘价。这个想法是在最后 4 个收盘价(不包括当前蜡烛)处于上升趋势时建立买入头寸。然而,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 仅在满足条件时才开仓。没有错误消息或编译错误。
使用&&
分隔比较运算符并添加另一个条件如下
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 水平、手数等等
除了选择的答案。永远不要使用 NormalizeDouble
来标准化价格和数量,这会导致不可预知的结果。
价格必须始终按刻度大小标准化:
double NormalizePrice(double p)
{
double ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
return(MathRound(p/ts) * ts);
}