Nerd Trader #: Je ne sais pas ce que cela a à voir, mais sur plus d'une centaine de true dans BEActivate(), le true onTick() n'est apparu que trois fois :)))
Bonjour, Pouvez-vous m'aider à résoudre un problème. sur un chandelier M15, plusieurs trades s'ouvrent à la suite.
Je ne veux pas que plus d'une transaction s'ouvre. La logique de l'EA est que tant que l'ordre précédent n'est pas fermé, le suivant ne s'ouvre pas, mais il arrive qu'une série de transactions s'ouvre sur un chandelier aussi long. Veuillez me conseiller sur ce qu'il faut ajouter dans le code pour éviter cette situation.
extrait de code :
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+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);
}
}
}
}
si foo2 retourne vrai, cherchez une erreur ici
Suppression du code inutile.
Suppression du code inutile.
Toujours faux
Suppression du code inutile.
Déplacez-le vers le bas
Descendre
Je ne sais pas ce que cela a à voir, mais sur plus d'une centaine de true dans BEActivate(), le true onTick() n'est apparu que trois fois :)))
Et encore une question...
Vous ne voulez pas vous débarrasser des classes ?
Et encore une question...
Vous ne voulez pas vous débarrasser des classes ?
Cela peut être fait sans OnCalculate.
Lafonction OnCalculate() est uniquement appelée dans les indicateurs personnalisés .J'ai besoin des données que OnCalculate() montre.
Peut-être que quelqu'un a une implémentation via des classes !J'ai besoin des données que OnCalculate() montre .
Peut-être que quelqu'un a une implémentation via des classes !qu'est-ce que cela signifie ?
Bonjour, Pouvez-vous m'aider à résoudre un problème. sur un chandelier M15, plusieurs trades s'ouvrent à la suite.
Je ne veux pas que plus d'une transaction s'ouvre. La logique de l'EA est que tant que l'ordre précédent n'est pas fermé, le suivant ne s'ouvre pas, mais il arrive qu'une série de transactions s'ouvre sur un chandelier aussi long. Veuillez me conseiller sur ce qu'il faut ajouter dans le code pour éviter cette situation.
extrait de code :