Вторая часть трала вообще никогда не будет выполняться.
Запринтуйте все значения для условий трала и просмотрите их потом в журнале, мне кажется у Вас в логике затык.
PS. Очень улыбнула фраза:
if (ProfitPlus==true) new_target=new_target+indent*Point; else new_target=new_target;
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
double stLevel=MarketInfo(Sym,MODE_STOPLEVEL);
double spr=MarketInfo(Sym,MODE_SPREAD);
double new_extremum;
double new_target=OrderTakeProfit();
for (int j=0; j<OrdersTotal(); j++) {
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) {
// если длинная позиция (OP_BUY), находим минимум bars_n свечей
if (OrderType()==OP_BUY){
new_extremum = Low[iLowest(Sym,tf,MODE_LOW,bars_n,1)];
if (ProfitPlus==true) new_target=new_target+indent*Point;
else new_target=new_target;
// если тралим и в зоне убытков
if (trlinloss==true){
// если найденное значение "лучше" текущего стоплосса позиции, переносим
if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0))
&& (new_extremum - indent*Point<Bid-stLevel*Point)) {
ModifyOrder(-1, new_extremum - indent*Point, -1);}
}
else
// если новый стоплосс не только лучше предыдущего, но и курса открытия позиции
if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0))
&& ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-stLevel*Point)){
ModifyOrder(-1, new_extremum - indent*Point, -1);}
}