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

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

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

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

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

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

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

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

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

Консультации по программированию на 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 раз(а).
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.

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

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

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

Консультации по программированию на 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) Айсберг-заявка
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.

Консультации по программированию на 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
 
Сообщений: 383
Зарегистрирован: 13 июн 2018, 19:22
Средств на руках: 30.25 Доллар
Откуда: Волгоград
Группа: Базовая
Благодарил (а): 114 раз.
Поблагодарили: 208 раз.

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

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

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

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

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

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

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

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

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

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

Консультации по программированию на 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);

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


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

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

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

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

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

cron