Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.
No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.
fragmento de código :
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+bool bCheckOrders()
{
// Переберем в цикле ордера, для проверки открытых ордеров данным советникомfor(int i = 0; i <= OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
return(false);
return(true);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if(dMA > Open[1] && dMA < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if(dMA < Open[1] && dMA > Close[1])
return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
// Тикет ордераint iOTi = 0;
iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
// Тикет ордера int iOTi = 0;
iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+//| Функция модификации ордера |//+-----------------------------------------------------------------------------------------------+void vOrderModify(int iOTi)
{
int iOTy = -1; // Тип ордераdouble dOOP = 0; // Цена открытия ордераdouble dOSL = 0; // Стоп Лоссint iMag = 0; // Идентификатор советникаdouble dSL = 0; // Уровень убыткаdouble dTP = 0; // Уровень прибыли// Выберем по тикету открытый ордер, получим некоторые значенияif(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
{
iOTy = OrderType();
dOOP = OrderOpenPrice();
dOSL = OrderStopLoss();
iMag = OrderMagicNumber();
}
// Если ордер открыл данный советник, то входим в условиеif(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
{
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордерif(dOSL == 0)
{
if(iOTy == OP_BUY)
{
dSL = NormalizeDouble(dOOP - StopLoss * Point, Digits);
dTP = NormalizeDouble(dOOP + TakeProfit * Point, Digits);
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
}
if(iOTy == OP_SELL)
{
dSL = NormalizeDouble(dOOP + StopLoss * Point, Digits);
dTP = NormalizeDouble(dOOP - TakeProfit * Point, Digits);
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
}
}
}
}
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
si foo2 devuelve true, busca un error aquí
Se ha eliminado código innecesario.
Se ha eliminado código innecesario.
Siempre falso
Se ha eliminado código innecesario.
Muévelo hacia abajo
Bajar
No sé qué tiene que ver, pero de más de cien true en BEActivate(), onTick() true sólo apareció tres veces :)))
Y de nuevo una pregunta...
¿No quieres deshacerte de las clases?
Y de nuevo una pregunta...
¿No quieres deshacerte de las clases?
Esto puede hacerse sin OnCalculate
La función OnCalculate() sólo se llama en los indicadores personalizadosNecesito los datos que muestra OnCalculate().
¡Tal vez alguien tenga una implementación a través de clases!Necesito los datos que muestra OnCalculate().
¡Tal vez alguien tenga una implementación a través de clases!¿qué significa?
Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.
No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.
fragmento de código :