[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 627

 
lottamer:

А можно ли как-то модифицировать стоп-лосс, но при этом не трогать тейк-профитв одной строке(не упоминать о нем, т.е. нужно чтобы он оставался таким как его установили раньше другие функции)

OrderModify(OrderTicket(),0,stop_loss,   ???,   0,CLR_NONE); 

OrderModify(OrderTicket(),OrderLots( ),stop_loss,OrderTakeProfit( ),   0,CLR_NONE); 

Стоп, так у вас лот -- 0.  

 
При этом этот ордер нужно ещё и непременно передварительно выбрать OrderSelect . А то я уже наступал на эти грабли- иначе зачастую тикет может стать какой угодно.
 
Dimka-novitsek:
При этом этот ордер нужно ещё и непременно передварительно выбрать OrderSelect . А то я уже наступал на эти грабли- иначе зачастую тикет может стать какой угодно.

Да да, точнее тикет то встанет тот, который вы укажете, но значения  OrderLots( ) и  OrderTakeProfit( ) он может вернуть для какого угодно ордера.
 

Доброго утра! 

Я категорически немогу разобраться- не работают условия для трейлингстопа.

//***************************************   
 
 bool nahodka=false;
  
 if (OrderSelect(tacket, SELECT_BY_TICKET , MODE_HISTORY)) 
 if (OrderTakeProfit( )-3*Point<profit&&OrderTakeProfit( )+3*Point>profit) nahodka=true;     // Находим ордер, сработавший именно по тейкпрофиту 
   
 if(nahodka){if (OrderSelect(tucket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )<Bid-treylingstop*Point ){ Print ("втораямодифи    " );
 OrderModify(  tucket, OrderOpenPrice(), Bid-treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
 if (BUY == 0) {perenos=false;srabotka=false;nahodka=false;} 
 
 
 //*************************************** 
 
 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 
               
               //SELL

Так вот ордер отбирается сразу, когда он ещё вовсе не на истории, чего я вовсе не понимаю!!

//***************************************   
 
  nahodka=false;
 
 for (i=0; i<=OrdersHistoryTotal(); i++) {
 if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
 if (OrderSymbol()!=Symbol())continue; 
 if (OrderMagicNumber() != 450) continue; 
 if (tocket==OrderTicket()) 
 if (OrderTakeProfit( )-3*Point<profitsell&&OrderTakeProfit( )+3*Point>profitsell) nahodka=true;}
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if(nahodka){if (OrderSelect(tecket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )>Bid+treylingstop*Point ){ Print ("четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
 for ( i = OrdersTotal() - 1; i >= 0; i--)

А вот так вот ситуация уже лучше!! С таким наворотом ордер хоть отбирается тогда, когда он уже на истории. 

Но раз из пяти- десяти   nahodka не принимает значение   true, и дальнейшей модификации не происходит!! 

 
Ну да, точно!!
 

Вот , например, как оно не модифицирует бай- а это зиркальное условие, и так же не работает всегда.

 

 

Вот этим местом.

//***************************************   
 
 bool nahodka=false;
 
 for (i=0; i<=OrdersHistoryTotal(); i++) {
 if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
 if (OrderSymbol()!=Symbol())continue; 
 if (OrderMagicNumber() != 450) continue; Print (" tacket ",tacket, "  OrderTicket() ",OrderTicket(),"    profit " , profit, "    OrderTakeProfit( ) ",OrderTakeProfit( ) );
 if (tacket==OrderTicket()) {Print ("tacket==OrderTicket()    " );
 if (OrderTakeProfit( )-3*Point<profit&&OrderTakeProfit( )+3*Point>profit) nahodka=true;}}     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if(nahodka){if (OrderSelect(tucket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )<Bid-treylingstop*Point ){ Print ("втораямодифи    " );
 OrderModify(  tucket, OrderOpenPrice(), Bid-treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
 if (BUY == 0) {perenos=false;srabotka=false;nahodka=false;} 
 
 
 //*************************************** 
 
 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 
               
               //SELL
 
Dimka-novitsek:

Доброго утра! 

Я категорически немогу разобраться- не работают условия для трейлингстопа.

Так вот ордер отбирается сразу, когда он ещё вовсе не на истории, чего я вовсе не понимаю!!

А вот так вот ситуация уже лучше!! С таким наворотом ордер хоть отбирается тогда, когда он уже на истории. 

Но раз из пяти- десяти   nahodka не принимает значение   true, и дальнейшей модификации не происходит!! 

 

 


Не пробовали if(OrderClosePrice()==OrderTakeProfit())nahodka=true;? 
 
Dimka-novitsek:

Доброго утра! 

Я категорически немогу разобраться- не работают условия для трейлингстопа.

Так вот ордер отбирается сразу, когда он ещё вовсе не на истории, чего я вовсе не понимаю!!

А вот так вот ситуация уже лучше!! С таким наворотом ордер хоть отбирается тогда, когда он уже на истории. 

Но раз из пяти- десяти   nahodka не принимает значение   true, и дальнейшей модификации не происходит!! 

При выборе ордера по тикету пулл не учитывается. Посему совершенно бесполезно писать MODE_HISTORY. После выбора ордера по тикету нужно ещё обязательно проверить его время закрытия OrderCloseTime() - если больше ноля - то ордер закрыт и выбран из истории, если НОЛЬ - то ордер ещё находится в рынке и выбран из списка рыночных позиций.

В ваших строках этой проверки нет:

if (OrderSelect(tacket, SELECT_BY_TICKET , MODE_HISTORY)) 
if (OrderTakeProfit( )-3*Point<profit&&OrderTakeProfit( )+3*Point>profit) nahodka=true;     // Находим ордер, сработавший именно по тейкпрофиту 

Начните с малого:

if (OrderSelect(tacket, SELECT_BY_TICKET)) {
   if (OrderCloseTime()>0) {                         // Убедились, что ордер выбран из истории
      // Тут ищете далее то, что вам необходимо ... а закрылся ли он по тейку ...
      }
   }

и будет вам счастие...

 
Dimka-novitsek:

Доброго утра! 

Я категорически немогу разобраться- не работают условия для трейлингстопа.

Так вот ордер отбирается сразу, когда он ещё вовсе не на истории, чего я вовсе не понимаю!!

А вот так вот ситуация уже лучше!! С таким наворотом ордер хоть отбирается тогда, когда он уже на истории. 

Но раз из пяти- десяти   nahodka не принимает значение   true, и дальнейшей модификации не происходит!! 

! - Вашей находчивости именовать Ticket: tecket, tocket, tucket и т.д. и т.п. А Вы сами в этих именованиях не запутались?! Мой Вам совет - во избежание путаницы, так не делать. На этом принципе строится ЛохБрендинг, например: ADIDAS и ADITAS...

Ещё, ни к чему такое количество флагов, например:

     if (OrderSelect (ticket, SELECT_BY_TICKET))
     {
         //---- Проверяем закрыт этот ордер или нет
         if (OrderCloseTime > 0)
         {
             //---- Находим ордер, сработавший именно по тейкпрофиту 
             if (NormalizeDouble (OrderTakeProfit()- OrderClosePrice()), Digits) == 0.0)
             {
                 if (OrderSelect (tucket, SELECT_BY_TICKET))
                 {
                     double ld_SL = NormalizeDouble (Bid - treylingstop * Point, Digits);
                     if (NormalizeDouble (ld_SL - OrderStopLoss(), Digits) > 0.0)
                     {
                         Print ("втораямодифи    " );
                         OrderModify (tucket, OrderOpenPrice(), ld_SL, OrderTakeProfit(), 0, CLR_NONE);
                     }
                 }
             }
         }
     }
Это лёгкая импровизация на основе Вашего кода.
 
Спасибо!!!!!!!
Причина обращения: