В советник встроена функция, которая изменяет ордер на сервере брокера.
Но иногда значение stop level превышает величину самого трейлинг стопа.
Для этого нужно добавить функцию отслеживание стоп-лосса самим экспертнымм советником.
Вот функция трейлинг стопа:
TrailingStop=70;
STOP_LEVEL=50
Spread=20;
Подскажите, пожалуйста, как переписать первую функцию для использования внутреннего трейлинг-стопа (трейлинга самим экспертом)?
Заранее огромное спасибо!
Но иногда значение stop level превышает величину самого трейлинг стопа.
Для этого нужно добавить функцию отслеживание стоп-лосса самим экспертнымм советником.
Вот функция трейлинг стопа:
Если внутренний трейлинг позиции производить следующим кодом:void CheckForExit()
{
double StopLoss;
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES) ;
if (OrderType() == OP_BUY)
{
StopLoss = Bid - Point * TrailingStop;
if (OrderStopLoss() < StopLoss &&
OrderOpenPrice() < Bid + TrailingStop * Point)
ModifySL(StopLoss, OrderTicket()); //другая функция
}
else // OP_SELL
{
StopLoss = Ask + Point * TrailingStop;
if (OrderStopLoss() > StopLoss &&
OrderOpenPrice() > Ask - TrailingStop * Point)
ModifySL(StopLoss, OrderTicket());
}
}
}
то результаты на тестере стратегий различаются. При этом в обоих случаях:double LongStop=0.0;
double ShortStop=0.0;
void CheckForExit()
{
double StopLoss;
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES) ;
if (OrderType() == OP_BUY)
{
if (Bid<=Long_stop)
bool Order_close=OrderClose(OrderTicket(),OrderLots(),Bid,1000,CLR_NONE);
else
{
StopLoss=Bid-Point*TrailingStop;
if (OrderStopLoss()<StopLoss &&
OrderOpenPrice()<Bid+TrailingStop*Point)
LongStop=StopLoss;
}
else //OP_SELL
{
if (ShortStop>0 &&
Ask>=ShortStop)
Order_close =OrderClose(OrderTicket(),OrderLots(),Ask,1000,CLR_NONE);
else
{
StopLoss= Ask + Point * TrailingStop;
if (OrderStopLoss() > StopLoss &&
OrderOpenPrice() > Ask - TrailingStop * Point)
ShortStop=StopLoss;
}
}
}
// Обнуление внутренних стопов при открытии нового ордера
if (условие)
ShortStop=0.0;
OrderSend(OP_SELL ...
if (условие)
LongStop=0.0;
OrderSend(OP_BUY...
TrailingStop=70;
STOP_LEVEL=50
Spread=20;
Подскажите, пожалуйста, как переписать первую функцию для использования внутреннего трейлинг-стопа (трейлинга самим экспертом)?
Заранее огромное спасибо!