Buon pomeriggio, potete aiutarmi a risolvere un problema: su una candela M15 si aprono diversi trade in fila.
Non voglio che si apra più di un trade. La logica dietro l'EA è che finché l'ordine precedente non viene chiuso, il successivo non si apre, ma a volte una serie di operazioni si apre su una candela così lunga. Si prega di consigliare cosa aggiungere nel codice per evitare questa situazione?
frammento di codice :
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+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);
}
}
}
}
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
se pippo2 ritorna vero, cerca un errore qui
Rimosso il codice non necessario.
Rimosso il codice non necessario.
Sempre falso
Rimosso il codice non necessario.
Spostalo in basso
Spostarsi verso il basso
Non so cosa c'entri questo, ma su più di cento true in BEActivate(), onTick() true è apparso solo tre volte :))
E di nuovo una domanda...
Non vuoi sbarazzarti delle classi?
E di nuovo una domanda...
Non vuoi sbarazzarti delle classi?
Questo può essere fatto senza OnCalculate
Lafunzione OnCalculate() è chiamata solo negli indicatori personalizzatiHo bisogno dei dati che OnCalculate() mostra.
Forse qualcuno ha un'implementazione tramite classi!Ho bisogno dei dati che OnCalculate() mostra .
Forse qualcuno ha un'implementazione tramite classi!cosa significa?
Buon pomeriggio, potete aiutarmi a risolvere un problema: su una candela M15 si aprono diversi trade in fila.
Non voglio che si apra più di un trade. La logica dietro l'EA è che finché l'ordine precedente non viene chiuso, il successivo non si apre, ma a volte una serie di operazioni si apre su una candela così lunga. Si prega di consigliare cosa aggiungere nel codice per evitare questa situazione?
frammento di codice :