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

 
Artyom Trishkin #:
Не нужно линии создавать и удалять постоянно. Есть флаги видимости объеета на таймфреймах. Нужно скрывать и отображать.

Писал им об этом еще несколько дней назад. Но кто когда слушает дельные советы?...

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Mihail Matkovskij, 2021.12.03 22:27

Можно скрыть с чарта, а потом показать.  Как правильно скрыть объект и показать, на форуме об этом было написано. Или отслеживай CHARTEVENT_OBJECT_CLICK - идеальное решение!


 
Mihail Matkovskij #:
Более компактный вариант:

Я не программист и стилями не владею(пишу как умею)

Mihail Matkovskij #:

Но ты кажется говорил, твоя функция претендует на универсальность?... Тогда ты забыл одну очень важную деталь:

const- не знаю что это, но и без него чудесно работает.


Mihail Matkovskij #:

Тебе лень написать простой скрипт для проверки? Ладно. Я сделал это за тебя:

Странно...

это функция выдает false на "-n"

Я не программист и не учитель. Я здесь спрашиваю и отвечаю(если знаю). Писюнами не меряюсь.

Хочешь показать свою значимость - научись признавать ошибки или исправлять.

 
Mihail Matkovskij #:

Писал им об этом еще несколько дней назад. Но кто когда слушает дельные советы?...

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

 
Alexey Viktorov #:

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

Алексей, проблема давно решена, человек хотел понять почему именно этот вариант не работает.
 
MakarFX #:


const- не знаю что это, но и без него чудесно работает.

const, это гарантия того что значение не изменится внутри функции

Странно...

это функция выдает false

По моему, я все уже разжевал и разложил по полочкам. Что не так?

Я не программист и не учитель. Я здесь спрашиваю и отвечаю(если знаю). Писюнами не меряюсь.

Хочешь показать свою значимость - научись признавать ошибки или исправлять.

Я тоже отвечаю на вопросы. И пытаюсь донести, то как должен выглядеть грамотно написанный код. И ты говоришь мне о ЧСВ? По моему, вы с  Nerd Trader неправильно меня понимаете. Я уже говорил выше, что для меня важность знания программирования главное, а не моя важность!

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

 
MakarFX #:
Алексей, проблема давно решена, человек хотел понять почему именно этот вариант не работает.

Всё правильно работает, а они голову  всем  тут морочат, вместо того, чтобы сравнить правильный вариант с неправильным. :)

 
законопослушный гражданин #:

ясно

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

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }

и если я запишу так. то отсчет будет от конца списка?

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos>=i; pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

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

и если я запишу так. то отсчет будет от конца списка?

Да
 
законопослушный гражданин #:

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

и если я запишу так. то отсчет будет от конца списка?

Второй вариант не будет работать. Чтобы сделать перебор с конца списка нужно сделать следующее:

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int total = OrdersHistoryTotal();
   for(int i = total - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
Причина обращения: