Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze werden mehrere Trades hintereinander eröffnet.
Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?
Codeschnipsel :
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+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);
}
}
}
}
wenn foo2 true zurückgibt, suchen Sie hier nach einem Fehler
Unnötiger Code wurde entfernt.
Unnötiger Code wurde entfernt.
Immer falsch
Unnötiger Code wurde entfernt.
Nach unten bewegen
Nach unten gehen
Ich weiß nicht, was das damit zu tun hat, aber von mehr als hundert true in BEActivate(), onTick() true erschien nur drei Mal :)))
Und wieder eine Frage...
Willst du die Klassen nicht abschaffen?
Und wieder eine Frage...
Willst du die Klassen nicht abschaffen?
Dies kann auch ohne OnCalculate geschehen
Die Funktion OnCalculate() wird nur in benutzerdefinierten Indikatoren aufgerufenIch brauche die Daten, die OnCalculate() anzeigt.
Vielleicht hat jemand eine Implementierung über Klassen!Ich brauche die Daten, die OnCalculate() anzeigt .
Vielleicht hat jemand eine Implementierung über Klassen!Was bedeutet das?
Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze werden mehrere Trades hintereinander eröffnet.
Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?
Codeschnipsel :