Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 75

 
ilnur17021992:
SELL_Lvl это количество колен (ордеров) sell сетки,  а SELL_NoLossLevel  это общий уровень (цена) БУ этих ордеров.  В общем идея такая: нужно что бы на уровне БУ отрисовывалась линия и соответственно перерисовывалась при открытии новых колен.  Как это реализовать не догоняю. 

Не догоняешь как определить линию БУ всех ордеров?

 

Подскажите, как правильнее записать для экономии ресурсов, и получения актуальных цен

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

 или вот так?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

Подскажите, как правильнее записать для экономии ресурсов, и получения актуальных цен

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

 или вот так?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


 

Первый вариант более правельнее, во втором эту строку надо так записать SymbolInfoTick(symb,Last_Tick); <<<
 
Vitaly Muzichenko:

Подскажите, как правильнее записать для экономии ресурсов, и получения актуальных цен

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

 или вот так?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


 

Я-бы сказал что это зависит от размера OrdersTotal() и вероятности изменения цен за время работы цикла.

На мой взгляд получение свежих данных непосредственно в цикле правильнее.

И считаю что дополнительные переменные (выделено в коде) абсолютно лишние.

 
Alexey Viktorov:

Пример в документации есть.

Тут, наверное будет лучше перебирая ордера в цикле, сразу, при условии, что очередной получается ниже предыдущего, выбирать его для дальнейшей работы с ним. Таким образом после выхода из цикла уже будет выбран ордер для удаления.

Или сначала в цикле запомнить позицию его в списке ордеров и после выхода из цикла выбрать его по запомненному индексу.

не так то все просто ордера выставляются и выше и ниже при условии 
 
Sergey Gritsay:
Первый вариант более правельнее, во втором эту строку надо так записать SymbolInfoTick(symb,Last_Tick); <<<

Да, просто скопировал, и не заметил.

Интересует сам вопрос того, насколько  SymbolInfoTick правильно ставить внутри цикла, нужно-ли оно там, или можно поставить до цикла. Используется в трайлинг-стопе, может тянуть сетку до 50шт.

 
Vitaly Muzichenko:

Да, просто скопировал, и не заметил.

Интересует сам вопрос того, насколько  SymbolInfoTick правильно ставить внутри цикла, нужно-ли оно там, или можно поставить до цикла. Используется в трайлинг-стопе, может тянуть сетку до 50шт.

Для трайлинг-стопа конечно лучше один раз до цикла.
 
Alexey Viktorov:

Не догоняешь как определить линию БУ всех ордеров?

Как определить БУ я знаю,  мне нужно что бы на этом уровне отрисовывалась линия 
 
Alexey Viktorov:
Для трайлинг-стопа конечно лучше один раз до цикла.

Раньше стояли обычные Ask и Bid внутри цикла и всё работало отменно, сейчас потихоньку переписываю под пятёрку. Я к тому, что цена может измениться очень быстро, и получиться ситуация что уровень будет менее допустимого стоплевел, что приведёт к ошибке.

Я так понимаю, что эта шляпа "SymbolInfoTick" нужна для получения актуальных цен?

 
проблему решил по сравнению цен
Причина обращения: