Обьясните что не так
Файлы:
open_order.mq5
43 kb
Kirill Andreev:
Обьясните что не так
Обьясните что не так
Тут ошибка:
NormalizeDouble(NormalizePrice(_Symbol,ask-TakeProfit*_Point),_Digits);
Kirill Andreev:
Обьясните что не так
Обьясните что не так
ошибка в функции трейлинга, вот в этих строках задается тп равным 0, по этому он и прыгает постоянно
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),0.0);
и
trade.PositionModify(Position.Ticket(),
NormalizeDouble(bid-ExtTrailingStop,digits),0.0);
и
trade.PositionModify(Position.Ticket(),
NormalizeDouble(bid-ExtTrailingStop,digits),0.0);
надо так
void Position_trall()
{
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
double ExtTrailingStop=InpTrailingStop*point;
double ExtTrailingStep=InpTrailingStep*point;
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//--- TrailingStop -> подтягивание StopLoss у ПРИБЫЛЬНОЙ позиции
if(Position.PositionType()==POSITION_TYPE_BUY)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(bid-ExtTrailingStop>Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(bid-ExtTrailingStop-ExtTrailingStep>Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),NormalizeDouble(bid-ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(ask+ExtTrailingStop<Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(ask+ExtTrailingStop+ExtTrailingStep<Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),
NormalizeDouble(ask+ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
}
}
{
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
double ExtTrailingStop=InpTrailingStop*point;
double ExtTrailingStep=InpTrailingStep*point;
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//--- TrailingStop -> подтягивание StopLoss у ПРИБЫЛЬНОЙ позиции
if(Position.PositionType()==POSITION_TYPE_BUY)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(bid-ExtTrailingStop>Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(bid-ExtTrailingStop-ExtTrailingStep>Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),NormalizeDouble(bid-ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(ask+ExtTrailingStop<Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(ask+ExtTrailingStop+ExtTrailingStep<Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),
NormalizeDouble(ask+ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
}
}
Sergey Gritsay:
ошибка в функции трейлинга, вот в этих строках задается тп равным 0, по этому он и прыгает постоянно
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),0.0);
и
trade.PositionModify(Position.Ticket(),
NormalizeDouble(bid-ExtTrailingStop,digits),0.0);
и
trade.PositionModify(Position.Ticket(),
NormalizeDouble(bid-ExtTrailingStop,digits),0.0);
надо так
void Position_trall()
{
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
double ExtTrailingStop=InpTrailingStop*point;
double ExtTrailingStep=InpTrailingStep*point;
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//--- TrailingStop -> подтягивание StopLoss у ПРИБЫЛЬНОЙ позиции
if(Position.PositionType()==POSITION_TYPE_BUY)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(bid-ExtTrailingStop>Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(bid-ExtTrailingStop-ExtTrailingStep>Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),NormalizeDouble(bid-ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(ask+ExtTrailingStop<Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(ask+ExtTrailingStop+ExtTrailingStep<Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),
NormalizeDouble(ask+ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
}
}
{
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
double ExtTrailingStop=InpTrailingStop*point;
double ExtTrailingStep=InpTrailingStep*point;
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//--- TrailingStop -> подтягивание StopLoss у ПРИБЫЛЬНОЙ позиции
if(Position.PositionType()==POSITION_TYPE_BUY)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(bid-ExtTrailingStop>Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(bid-ExtTrailingStop-ExtTrailingStep>Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),NormalizeDouble(bid-ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
//--- когда у позиции ещё нет StopLoss
if(Position.StopLoss()==0)
{
//--- пока StopLoss равен 0.0, TrailingStep не учитываем
if(ask+ExtTrailingStop<Position.PriceOpen())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),Position.PriceOpen(),Position.TakeProfit());
}
}
//--- у позиции уже есть StopLoss
else
{
//--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
//--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
if(ask+ExtTrailingStop+ExtTrailingStep<Position.StopLoss())
{
//--- модификация позиции
trade.PositionModify(Position.Ticket(),
NormalizeDouble(ask+ExtTrailingStop,digits),Position.TakeProfit());
}
}
}
}
}
Спасибо, а то сколько раз смотрел код не мог понять.....(
Отсутствие опыта сказывается((((
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь