Помогите решить идиотскую проблему - страница 2

 
Roman.:


Вы одно поймите, что у Вас не исключено здесь МНОГОЕ не верно - отойдите от своего кода - берите грамотно написанный код из библиотеки трайлинг-стопов от Юрия Дзюбана и правите подобную ф-ию под Ваш параболик сар, например меняете трал по МА или ценовому каналу - подход тот же, код грамотный - все работает - что еще Вам надо??? Зачем изобретать велосипед, натыкаясь на одни и те же грабли, когда все уже давно украдено до Вас (с)...

Берете, правите, пользуетесь - в прицепе - библиотека тралов + описание.


рома, не парь человеку баки, он не хочет может готовое, а хочет сам научиться
 
valenok2003:

рома, не парь человеку баки, он не хочет может готовое, а хочет сам научиться

мозг человек сам себе "делает" и все. ИМХО.
 
shumaher9:

Ордер выбран до этого! с этим тоже проблемы нет

Почему советник игнорирует эту запись SL0 > OrderStopLoss()? где SL0 новый стоп лосс


А где до этого выбран ордер? Это должно быть сделано в коде самой функции. Или, как вариант, передать в функцию все параметры ордера.

 

Блин я уехал из дома где у меня полный код советника, поэтому не могу щас опубликовать полный код....

Объясняю ситуацию, я написал трал по сару, он работает исправно и только в ту сторону в которую надо. Потом я вставил новое условие, что бы по прошествию нескольких баров если цена не ушла дальше чем определенное количество пунктов, то лось переводился в плюс один. Это трал тоже прикрасно делает. Но вот дальше... Так как сар в этот момент меньше чем лось в плюс один (на примере бая) мне не нужно что бы тралилось по сару до того момента пока сары не станут больше чем лось в плюс один. Это я пытался сделать записью "новый стоп лосс >стоп лосс ордера". Но это не работает почему то. Я перед этим писал алерт, который прописывал мне новый стоп лосс и стоп лосс ордера, значения корректные. То есть 1,2323>1,2333 и это истинно.... Ерунда какая то.

 
void TralBuy(int _Ticket) {
   double SL0 = какая-то_функция();

   OrderSelect(_Ticket, SELECT_BY_TICKET);

   if(LastBar1 != iTime(NULL,TFT,0) && SL0 > OrderStopLoss()) { 
      bool Ans0 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL0,Digits),OrderTakeProfit(),0); 
      LastBar1 = iTime(NULL,TFT,0); 
      if(Ans0 == false) Alert("Case1,Ордер ",OrderTicket()," не модифицирован");
   }      
}
рация на бронетранспортёре
 
shumaher9:Почему советник игнорирует эту запись SL0 > OrderStopLoss()? где SL0 новый стоп лосс

думаю дело в то, что Вы неправильно сравниваете действительные числа, я бы сравнивал так:

if(SL0- OrderStopLoss()>0.0).....

 
valenok2003:
рация на бронетранспортёре

Броня не пробита;))) что в этом коде не так как у меня?
 
IgorM:

думаю дело в то, что Вы неправильно сравниваете действительные числа, я бы сравнивал так:

if(SL0- OrderStopLoss()>0.0).....


Блин делал толко во второй части ставил просто 0, а не 0.0
 
shumaher9:

Броня не пробита;))) что в этом коде не так как у меня?

void TralBuy(int _Ticket)

OrderSelect(_Ticket, SELECT_BY_TICKET);

 

У меня это выглядит так,

стоит счетчик ордеров, выбирает ордер, определяет бай это или селл, потом оператором свич два кейса 0 и 1 соответственно под оп_бай и оп_селл.

Кейс 0 вызывает тралбай

Кейс 1 вызывает тралселл

Таким образом ордер и выбирается.

Причина обращения: