Ребята помогите подсичтать количесво ордеров!) - страница 2

 
Maxim Kuznetsov:

предоставили же отличнейшую штуку - SQLite. Остаётся в советнике создать в памяти и поддерживать в актуальном виде оперативную базу.

SELECT * FROM Orders WHERE groupid=xx ORDER BY openTime

Сеточники пишут не всегда все типы данных зная, а вы SQL предлагаете сходу запользовать)))))

Да и честно говоря избыточное решение в данном случае от слова совсем. Но хорошее, чтобы люди знали )

 
Aleksey Mavrin:

Сеточники пишут не всегда все типы данных зная, а вы SQL предлагаете сходу запользовать)))))

Да и честно говоря избыточное решение в данном случае от слова совсем. Но хорошее, чтобы люди знали )

В базовый класс советник можно(нужно) добавлять поддержку базы и в производных классах её пользоваться.

К тому, сдаётся мне что дескриптор базы можно передавать в пользовательские DLL и DLL-ки могут её читать/писать.

 
Maxim Kuznetsov:

предоставили же отличнейшую штуку - SQLite. Остаётся в советнике создать в памяти и поддерживать в актуальном виде оперативную базу. 

не предоставили, я админа Рената спросил про MQL4 будет ли и там SQLite , админ ответил - примерно как "не масштабируйте фишки MQL5 на старый терминал", затем удалил и свой и мой пост
Maxim Kuznetsov:

В базовый класс советник можно(нужно) добавлять поддержку базы и в производных классах её пользоваться.

так и делал раньше MQL4 , свой шаблон динамического списка в виде небольшой БД, устал уже выкладывать, смысла нет - все равно 99% экспертов под МТ4  пишут как и 10 лет ранее, без учета возможностей обновленного MQL4 (классы и возможность портирования под MQL5 с минимальными исправлениями)
 
Igor Makanu:
не предоставили, я админа Рената спросил про MQL4 будет ли и там SQLite , админ ответил - примерно как "не масштабируйте фишки MQL5 на старый терминал", затем удалил и свой и мой пост

в 5-ке SQLite овеяный одобрением MQL.

фичи в 4-ку разработчики терминала больше не вносят, но в 4-ку его API вполне портируется самостоятельно (разве что будет зависимость от DLL SQLite), затыки и пенальти видятся только с кодировками (исходного кода, коих две возможных и базы для которой родная это utf-8).

 
Maxim Kuznetsov:

но в 4-ку его API вполне портируется самостоятельно (разве что будет зависимость от DLL SQLite), затыки и пенальти видятся только с кодировками (исходного кода, коих две возможных и базы для которой родная это utf-8).


поиском по статьям "SQL", готовые решения под MQL4 очень давно описаны
 
Igor Makanu:


поиском по статьям "SQL", готовые решения под MQL4 очень давно описаны

ещё обсуждения почитай - с кодировками всегда проблемы :-)

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

 
Maxim Kuznetsov:

ещё обсуждения почитай - с кодировками всегда проблемы :-)

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

читал пару лет назад, не интересно

БД не нужны для текущего сопровождения ордеров, имхо, БД нужны для оценки проходов оптимизатора и/или выбора нужной ТС

 
я, конечно, не знаю всей логики робота, но по тому, что описано в первом посте, стоит сделать иначе - одна сделка из сетки потерялась - закройте всю сетку, т.к. робот уже не работает в рамках заложенной в него логики. ну, или, как минимум, просто игнорировать, независимо от количества ордеров - если вмешался руками - и продолжай сам...
 
Dmitry Fedoseev:

Подключите немного разума и сделайте, чтобы и с неоднозначным номером работало. 

Например, в конец добавляйте какой-нибудь знак-разделитель, потом находите его позицию и отделяйте соответствующее количество знаков (цифр).

Да думаю так будет проще, чем менять магики в сетке.

Я ищу последний ордер в сетке по тикету.(Открыть больше одного ордера на тик робот не может)

   int Ticket = 0;
   int OldTicket = 0;
   string NewComment;

   for(int i=0; i<=OrdersTotal()-1; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnum)
              {
               Ticket = OrderTicket();
               if(Ticket> OldTicket)
                 {
                  OldTicket=OrderTicket();
                  NewComment = OrderComment();


А потом уже работаю с переменной NewComment, меня просто смутило что функция StringGetCharacter возвращает значение символа, а не сам символ, с двузначным числом в комментарии приходится извращаться в коде. Думала есть способ проще и удобней, мало ли) Мож я просто до него не дошла.

Как вариант, номер сделки выносить, например, в начало комментария. После поиска разделителя забираем строку до разделителя StringSetCharacter. Проверяем число символов в строке StringLen и уже конкретно увидим скольки значное число мы получили. От этого и пляшем.

Просто по логике робота, если из N ордеров, 1,2,3,4 были закрыты и существует N ордер, то надо сидеть и не жужжать, Если из N ордеров были закрыты 1,2,3,4 и N ордер тоже был закрыт, то он должен снова открыть N ордер.

Т.е. пока существует хотябы 1 ордер в середине сетки, робот будет стараться открыть ордера пока из комментария не получит максимально допустимый номер сделки. И отталкивается от последнего именно существующего ордера. Из N ордеров были закрыты 1,2,3, а также N-2, N-1 и N. То ордера N-2, N-1 и N надо снова открыть.

Если же сетки не существует, то робот обнуляется и начинает строить новую сетку.

Документация по MQL5: Строковые функции / StringGetCharacter
Документация по MQL5: Строковые функции / StringGetCharacter
  • www.mql5.com
Строковые функции / StringGetCharacter - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
ABGammA:

Да думаю так будет проще, чем менять магики в сетке.

Ну проще так проще. Попадётся брокер который трёт комменты, вернётесь к этому , удачи ;)

з.ы. магик - целое число, коммент - строковый тип. ВСЕГДА операции с целыми числами ПРОЩЕ и НАДЕЖНЕЕ чем со строками

з.ы.ы. Но раз уж вы любите строки, посмотрите ф-ию  StringSplit. С нею удобно в коммент множество пар-ров записать-прочитать. заодно проще определить что коммент "уже не тот")

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