• Консультации по программированию на LUA

    Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
    Бонус за сообщение 0.5$
    Ответственный Модератор - Haos

    Консультации по программированию на LUA

    Сообщение ВЯЧЕСЛАВПЕТРОВ » 11 май 2019, 15:00

    Рэндом писал(а):Самый простой способ прописать глобальные переменные в коде и в нем же их менять. Для этого нужно в начале советника создать переменную. С другими способами я пока не разобрался, но в примерах видел что делают так как я написал.

    Да не самый хороший способ но на первом этапе придется так и сделать. Когда код сам написал делать это легче. Первое впечатление от создания советника не очень. Квик это таблицы и еще раз таблицы. Данные для советников получаются из таблиц большей частью. Можно получать с графиков. Можно создавать пользовательские таблицы и выводить на экран что позволяет сделать работу советников видимой.
    Аватар пользователя
    ВЯЧЕСЛАВПЕТРОВ
     
    Сообщений: 1447
    Зарегистрирован: 06 сен 2016, 21:28
    Средств на руках: 60.95 Доллар
    Награды: 2
    Ветеран I (1) Медаль за эрудицию (1)
    Группа: Магистратура
    Благодарил (а): 3115 раз.
    Поблагодарили: 406 раз.

    Консультации по программированию на LUA

    Сообщение Рэндом » 13 май 2019, 05:32

    Вот таблицы мне не очень нравятся. Сделать работу советника видимой это хорошо. Но в таблицах нельзя править данные руками. Поэтому для настройки советника они не подходят. Хотя я ещё не до конца с ними разобрался. Может быть ошибаюсь. В любом случае это сложный метод управления советником. Такого как в MQL нет. Как там просто задать параметры для советника. Главное что в Квик история сделок всего за один день сохраняется. Адаптировать мой советник будет сложно. Я его хотел сделать в качестве примера. Хотя торговать им не получиться нормально. Он нуждается в оптимизации. А в Квик нет тестера и оптимизатора. :nez-nayu:
    Аватар пользователя
    Рэндом
    Специалист MQL
     
    Сообщений: 9468
    Зарегистрирован: 18 июл 2013, 08:05
    Средств на руках: 10.70 Доллар
    Группа: Администраторы
    Благодарил (а): 894 раз.
    Поблагодарили: 2501 раз.
    Каждый заблуждается в меру своих возможностей.

    Консультации по программированию на LUA

    Сообщение ВЯЧЕСЛАВПЕТРОВ » 13 май 2019, 08:18

    В квике нет истории сделок. Показывают 1 день . Они не разделяются на исполненные и активные все находятся одной таблице. Вот только я не разобрал что за биты возвращает flags ?
    Код: выделить все
      local zayvkigetNumber = getNumberOf('orders')
    local zayvki={}
      for i = 0, zayvkigetNumber-1 do
        local zayvki = getItem('orders', i )

        -- Если значение получено выведем все поля строки
        if zayvki ~= nil then
           message("   Флаг  = " .. tostring(zayvki.flags))
            message("   Код бумаги = " .. tostring(zayvki.sec_code))
            message("    = " .. tostring(zayvki.brokerref))
        else
            message("Не удалось получить строку таблицы!")
          end
        end 



    А тестирование на истории су шествует нужно скачивать файлы у брокера и через ехсель. Поверхностно понял.
    Последний раз редактировалось ВЯЧЕСЛАВПЕТРОВ 13 май 2019, 08:32, всего редактировалось 5 раз(а).
    Аватар пользователя
    ВЯЧЕСЛАВПЕТРОВ
     
    Сообщений: 1447
    Зарегистрирован: 06 сен 2016, 21:28
    Средств на руках: 60.95 Доллар
    Награды: 2
    Ветеран I (1) Медаль за эрудицию (1)
    Группа: Магистратура
    Благодарил (а): 3115 раз.
    Поблагодарили: 406 раз.

    Консультации по программированию на LUA

    Сообщение Рэндом » 13 май 2019, 09:21

    Флаги многое значат. В справке есть целый раздел описывающий их. Я не могу сюда его перенести. Да и смысла нет. Но вот что такое битовый флаг объясню. Исторически сложилось, что память компьютера делиться на байта. Каждый байт это 8 бит. Компьютер оперирует нулями и единицами. Один бит как раз может записать ноль и единицу. Каждый бит в флаге отвечает за свое значение. Для проверки флага используется логическая операция "И" между флагом и числом. В числе должен быть установлен нужный бит. Тогда если операция "И" дает не 0, то флаг установлен. А смысл флага, как я уже говорил, в справке.
    Аватар пользователя
    Рэндом
    Специалист MQL
     
    Сообщений: 9468
    Зарегистрирован: 18 июл 2013, 08:05
    Средств на руках: 10.70 Доллар
    Группа: Администраторы
    Благодарил (а): 894 раз.
    Поблагодарили: 2501 раз.
    Каждый заблуждается в меру своих возможностей.

    Консультации по программированию на LUA

    Сообщение ВЯЧЕСЛАВПЕТРОВ » 15 май 2019, 17:07

    Второй день сижу и думаю что и как возвращает flags .

    • бит 0 (0x1) Заявка активна, иначе – не активна
    • бит 1 (0x2) Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
    • бит 2 (0x4) Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)
    • бит 3 (0x8) Заявка лимитированная, иначе – рыночная
    • бит 4 (0x10) Возможно исполнение заявки несколькими сделками
    • бит 5 (0x20) Исполнить заявку немедленно или снять (FILL OR KILL)
    • бит 6 (0x40) Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту
    • бит 7 (0x80) Для адресных заявок – заявка получена от контрагента
    • бит 8 (0x100) Снять остаток
    • бит 9 (0x200) Айсберг-заявка
    Аватар пользователя
    ВЯЧЕСЛАВПЕТРОВ
     
    Сообщений: 1447
    Зарегистрирован: 06 сен 2016, 21:28
    Средств на руках: 60.95 Доллар
    Награды: 2
    Ветеран I (1) Медаль за эрудицию (1)
    Группа: Магистратура
    Благодарил (а): 3115 раз.
    Поблагодарили: 406 раз.

    Консультации по программированию на LUA

    Сообщение Shepherd » 15 май 2019, 17:18

    ВЯЧЕСЛАВПЕТРОВ писал(а):Второй день сижу и думаю что и как возвращает flags .

    • бит 0 (0x1) Заявка активна, иначе – не активна
    • бит 1 (0x2) Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
    • бит 2 (0x4) Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)
    • бит 3 (0x8) Заявка лимитированная, иначе – рыночная
    • бит 4 (0x10) Возможно исполнение заявки несколькими сделками
    • бит 5 (0x20) Исполнить заявку немедленно или снять (FILL OR KILL)
    • бит 6 (0x40) Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту
    • бит 7 (0x80) Для адресных заявок – заявка получена от контрагента
    • бит 8 (0x100) Снять остаток
    • бит 9 (0x200) Айсберг-заявка

    погуглил LUA очень специфический язык, довольно не удобный, в особенности при работе с битами,то что делается в одну строчку в 99% языках, в LUA это что то с чем то :-)
    гуглом "lua quik битовые операции" - первый ответ поисковика будет пример по Вашему вопросу
    Аватар пользователя
    Shepherd
    Специалист MQL
     
    Сообщений: 346
    Зарегистрирован: 13 июн 2018, 19:22
    Средств на руках: 29.15 Доллар
    Откуда: Волгоград
    Группа: Магистратура
    Благодарил (а): 105 раз.
    Поблагодарили: 193 раз.

    Консультации по программированию на LUA

    Сообщение Рэндом » 17 май 2019, 05:47

    0x1 - это шестнадцатеричное. Вам надо понять как соотносятся шестнадцатеричные и двоичные числа. Во в скобках указано число шестнадцатеричное которым можно проверить бит.
    Код для проверки будет следующий:
    Код: выделить все
    res=bit.band(flag,0x1) // для первого флага
    if res~=0 then
      // флаг установлен
    else
      // флаг не установлен
    end
    Аватар пользователя
    Рэндом
    Специалист MQL
     
    Сообщений: 9468
    Зарегистрирован: 18 июл 2013, 08:05
    Средств на руках: 10.70 Доллар
    Группа: Администраторы
    Благодарил (а): 894 раз.
    Поблагодарили: 2501 раз.
    Каждый заблуждается в меру своих возможностей.

    Консультации по программированию на LUA

    Сообщение ВЯЧЕСЛАВПЕТРОВ » 17 май 2019, 15:54

    Язык программирования оказался не таким страшным как казалось сначала. За две недели изучения написал шаблон простого советника способного открывать и закрывать сделки на условии. Разница с MQL не столь колоссальна. Здесь множество таблиц с которых нужно получать переменные в мт4 их гораздо меньше.Если получил переменные работать уже легче. Сразу нужно создать таблицу в которую можно их вывести.

    С битами я не стал разбираться на этом этапе flags возвращает номер.
    25 активная покупки и еще данные
    29 активная продажа и еще данные
    для начала вполне хватает чтобы советник различал сделку.
    Вот бы всю таблицу кодов и все стало бы понятно.Без заморочек.
    Аватар пользователя
    ВЯЧЕСЛАВПЕТРОВ
     
    Сообщений: 1447
    Зарегистрирован: 06 сен 2016, 21:28
    Средств на руках: 60.95 Доллар
    Награды: 2
    Ветеран I (1) Медаль за эрудицию (1)
    Группа: Магистратура
    Благодарил (а): 3115 раз.
    Поблагодарили: 406 раз.

    Консультации по программированию на LUA

    Сообщение Рэндом » 20 май 2019, 04:38

    А что не понятно с битовыми флагами? Я думаю без них не получится нормально работать с ордерами. Задавайте вопросы, я отвечу.
    Аватар пользователя
    Рэндом
    Специалист MQL
     
    Сообщений: 9468
    Зарегистрирован: 18 июл 2013, 08:05
    Средств на руках: 10.70 Доллар
    Группа: Администраторы
    Благодарил (а): 894 раз.
    Поблагодарили: 2501 раз.
    Каждый заблуждается в меру своих возможностей.

    Консультации по программированию на LUA

    Сообщение ВЯЧЕСЛАВПЕТРОВ » 20 май 2019, 18:16

    Рэндом писал(а):А что не понятно с битовыми флагами? Я думаю без них не получится нормально работать с ордерами. Задавайте вопросы, я отвечу.

    В теории понятно. На практике код как я понял десятичный и из битов набирается. Тоесть в конечном виде легче с десятичным работать.
    Оставим пока этот вопрос у меня возник совсем другой это как разобраться с заявками в квике. Нужно для того чтобы установить трелинг стоп который движется за ценой. Как устанавливать рыночные и лимитные частично понял. А вот заявки тейк профит и стоп лос так и не разобрал.
    выставление и удаление заявок выполняется как я понял одной функцией sendTransaction
    Код: выделить все
    local LimitOrderBuy={   ["ACTION"]="NEW_ORDER" ,["ACCOUNT"]=TRADE_ACC,["OPERATION"]="B" ,["CLASSCODE"]=CLASS ,
       ["SECCODE"]=SEC  ,["PRICE"]=tostring(Bid_Prise) ,["QUANTITY"]=tostring(1) ,["TRANS_ID"]=tostring(MAGIKNUMER) ,["CLIENT_CODE"]=tostring(MAGIKNUMER)
       }
       local Err_Order=sendTransaction(LimitOrderBuy)
        message(Err_Order);

    Нужно понять из каких заявок формируется трелинг стоп.
    Аватар пользователя
    ВЯЧЕСЛАВПЕТРОВ
     
    Сообщений: 1447
    Зарегистрирован: 06 сен 2016, 21:28
    Средств на руках: 60.95 Доллар
    Награды: 2
    Ветеран I (1) Медаль за эрудицию (1)
    Группа: Магистратура
    Благодарил (а): 3115 раз.
    Поблагодарили: 406 раз.


    Вернуться в MQL – теория и практика

    Кто сейчас на форуме?

    Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    Права доступа к форуму

    Вы не можете начинать темы
    Вы не можете отвечать на сообщения
    Вы не можете редактировать свои сообщения
    Вы не можете удалять свои сообщения
    Вы не можете добавлять вложения

    cron