我正在尝试使用MQL5编写一个EA交易,该交易基于某些EMA值启动购买限制。这是我在OnTick()函数中编写的代码。
MqlRates priceData[]; //create a price array
//sort the array from the current candle downwards
ArraySetAsSeries(priceData, true);
//copy candle prices for 5 candles into array
CopyRates(_Symbol, _Period, 0,5, priceData);
//EMA Based Trading
int ema8 = iMA(_Symbol, _Period, 8, 0, MODE_EMA, PRICE_CLOSE);
int ema21 = iMA(_Symbol, _Period, 21, 0, MODE_EMA, PRICE_CLOSE);
//Arrays to store EMAs
double ema8Array[], ema21Array[];
//Sorting EMAs fot the current candle downwards
ArraySetAsSeries(ema8Array, true);
ArraySetAsSeries(ema21Array, true);
//Defined EMA8, one line, current candle, 5 candles, store result
CopyBuffer(ema8,0,0,5,ema8Array);
//Defined EMA21, one line, current candle, 5 candles, store result
CopyBuffer(ema21,0,0,5,ema21Array);
if(ema8Array[0] > ema21Array[0])
{
if(
(ema8Array[0] >= priceData[1].close)
&&
(priceData[1].close < ema21Array[0]))
{
Print("Chance To Buy");
double closePrices[5];
closePrices[0]=priceData[1].close;
closePrices[1]=priceData[2].close;
closePrices[2]=priceData[3].close;
closePrices[3]=priceData[4].close;
if((OrdersTotal() == 0) && (PositionsTotal() == 0))
{
int maxValue=ArrayMaximum(closePrices,0,WHOLE_ARRAY);
double buyStop=closePrices[maxValue]+0.00003;
double stopLoss=priceData[1].close-0.00004;
double takeProfit=buyStop+(buyStop-stopLoss);
trade.BuyLimit(0.01,buyStop,_Symbol,0,0,ORDER_TIME_GTC,0,"Limit Added");
}
}
}
当我在H1时间轴上使用EURUSD对其进行策略测试时,大多数时候会出现以下错误:
2018.12.25 14:27:47.117 2017.01.02 09:00:09 failed buy limit 0.01 EURUSD at 1.05342 [Invalid price]
2018.12.25 14:27:47.117 2017.01.02 09:00:09 CTrade::OrderSend: buy limit 0.01 EURUSD at 1.05342 [invalid price]
您能告诉我我可能做错了什么吗?