Приклад скриптуQLua (Lua), що виконує торгові операції у терміналі QUIK, BOT
Свіжі записи
Приклад скрипта QLua (Lua), який виконує торгові операції у терміналі QUIK

Коли є відкрита даним скриптом позиція, у таблиці відображається інформація про неї (профіт, баланс, ср.ціна, дата відкриття).
Профіт обчислюється за формулою:"Поточна ціна, за якою можна закрити позицію" -"Ціна відкриття позиції" -"Комісія 8 р. на кожен лот".
Також, виконується запис у лог-файл ("Log.txt" ) виконуваних скриптом операцій та у файлі стану ("State.txt" ) зберігається інформація про поточні вибрані інструменти та про поточною, відкритою скриптом позиції.
ВАЖЛИВО. При виборі опціону, кнопками "/\","\/" змінюється страйк опціону з кроком 500, переконайтеся, що такий опціон існує.
Встановлення кольору в комірці виконується за допомогою setColor. Але у скрипті бачу
Де про це можна почитати? У документах за ключом "колір" або "Green" подібне не знаходжу.
Якщо Ви подивитеся код скрипта, то знайдете там однойменні функції, які всередині себе використовують setColor, це зроблено просто для зручності. Ви також можете створювати свої функції, які спрощують життя програмісту.
Класна ідея! Дякую!
Можете підказати, у які рядки дивитися та правити. щоб у заявці вимкнути перевірку ліміту ціни?
Справа в тому, що у мене в демо-версії підвищена волатильність на опціони. А відтак і теор. ціна. Скрипт нормально виставляє заявки на купівлю 2 колів та продаж ф'ючерсів. А у зворотнийУ бік нормально працює тільки покупка ф'ючерсів, а коли не продаються. У цьому скрипт помилок не видає.
Намагаючись закрити позицію вручну, отримав повідомлення: "Помилка створення заявки. "Ціна угоди поза лімітом"
Вдалося закрити позицію вручну, тільки після того, як прибрав галочку з "перевіряти ліміт ціни"
Вітаю. Параметри транзакцій можна переглянути у файлі довідки info.chm, який знаходиться у папці з терміналом Quik. Також можете використовувати кишеню транзакцій для вивчення.
Цей скрипт викладено як приклад для тих, хто навчається програмувати на QLua
Так, я зрозумів, що він для навчання. Думав, взяти робочий скрипт та його допилювати до своїх потреб, тим самим навчаючись. А тут одразу натрапив на перешкоду. Копиратимуся! Тим цікавіше.
У Вас є 3 варіанти: навчиться самостійно, використовуючи статті та приклади сайту; записатися на платне навчання; замовити скрипт, який працюватиме за Вашим алгоритмом.
Якщо хтось ще зіткнеться з подібним, то для транзакції закриття позиції по опціонам (після 259 рядків) додаємо:
Ви молодець, швидко вирішили завдання! Я міг би підказати, але я не стикався з таким завданням, тому я не мав рішення.
Дякую! Але завдання всього на один рядок))
Буду молодцем, коли таки доб'юся, щоб квік транслював нормальну волотильність, а не зашкалюючу (зараз показує 80% на РТС, за нормальної 24%). Але це завдання не для програміста, а для користувача)) А ось коли її вирішу, тоді і милиця зі скасуванням перевірки ліміту ціни можна буде прибрати. Тех. підтримка брокера безсила. Мабуть, скоро писатиму на підтримку квіка, якщо так і не знайду рішення.
До речі, цей милиця можливо допоможе не тільки на демо-версії з неправильною.волотильністю. Але і коли біржа сама "косить" і не дає поставити заявки, вважаючи невірно ліміти. Бачив подібну проблему на форумах, доки шукав рішення.
Вітаю. А чи можна збільшувати висоту рядка?
Здрастуйте, тільки загальними налаштуваннями шрифту в самому квіку
Підкажіть, а можна переробити скрипт, щоб можна було набирати позицію більше ніж 2 опціони + 1 ф'юч. Що потрібно змінити? Заздалегідь вдячний.
Вітаю! Давно писав цей скрипт, не пам'ятаю вже в подробицях як саме він працює, але пробігшись поглядом припускаю, що буде достатньо змінити значення в наступних рядках на потрібні: 191 220 256 285 305 306 - у цьому рядку змінюйте лише цифру, знак мінус залиште, бо коли шорт, то баланс зі знаком мінус
прохання в таблицю "профіт у ціна дата" додати колонку волатильність або пояснити як це можна зробити.
Вітаю. У функції CreateTable скрипта потрібно додати ще одну колонку для виведення волатильності. У функції OnParam за допомогою getParamEx отримувати значення волатильності (поле VOLATILITY) за вибраним опціоном і виводити значення в таблицю за допомогою функції SetCell.
Вітаю. Підкажіть, чи можна через файл state.txt вручну підключити вже відкриті позиції ф'ючерс/опціон? Прохання викласти на будь-який файлообмінник записаний файл state.txt.
Вітаю! Я вже зараз не пам'ятаю в якому форматі він записує даний файл, зробіть простіше: запустіть цей скрипт на демо-рахунку, відкрийте позицію і зупиніть скрипт, потім відкрийте файл і поправте там коди, кількість і дати відкриття. Формат, насправді, простий, кожне нове значення в новому рядку, а такий загальний список рядків:
Код Ф'ЮЧЕРСА для відкриття Код ОПЦІОНУдля відкриття Код ОПЦІОНУ в позиції Кількість лотів у позиції по ОПЦІОНАМ Середня ціна відкриття позиції по ОПЦІОНАМ Дата відкриття позиції по ОПЦІОНАМ Код Ф'ЮЧЕРСА в позиції Кількість лотів у позиції по ОПЦІОНАМ Ф'ЮЧЕРСАМ Середня ціна відкриття позиції щодо Ф'ЮЧЕРСІВ Дата відкриття позиції за Ф'ЮЧЕРСАМИ
не дозволяє додавати позицію, пише "позиція вже відкрита"
Якщо він пише, значить файл State.txt вже є і в ньому записана інформація про позицію, відкрийте його і подивіться що там.
Вітаю! Підкажіть, будь ласка, як зробити так, щоби при закритті угоди стоп до неї не знімався. Приклад: купив 1 лот збера і поставив стоп і тейк потім продав 1лот збера стоп і тейк автоматично знялися. Як зробити, щоб не знімалися.
Вітаю! А яким чином Ви купуєте та продаєте? Взагалі, стоп і тейк не повинні самі зніматися, вони ніяк до угод не прив'язані.
Угоди на фючерсах Відкриваю угоду так:
Ставлю стоп так:
А закриваєте також функцією sendMarket?
відкриваю продаж (функ sendMarket) на 1 лот ставлю стоп та тейк. потім відкриваю покупку (функ sendMarket) на 1 лот ставлю стоп та тейк. виходить чиста позиція 0 і 2 стопа і 2 тейки (1 стоп і тейк на продаж і 1 стоп і тейк на купівлю).
Так і має бути, коли Ви купуєте, Ви відкриваєте довгу позицію, коли продаєте, закриваєте її, не може бути одночасно і короткою та довгою позицією, а стоп-профіт заявки ніяк не залежать від позиції, тому й залишаються.
я розраховую якраз на те, що вони залишаться, а вони знімаються, в якому саме випадку я не зрозумів поки. моя система дає сигнали, то на покупку, то на продаж, багато угод взаємо закриваються, а стопи і тейки залишаються, але потім коли всі стопи спрацюваличиста позиція має дорівнювати 0, але в практиці негаразд. Коли перевіряю в таблиці заявок, деякі заявки зняті.
Можливо, вони під час клірингу знімаються? Ви їм час дії (EXPIRY_DATE) достатньо призначаєте?
Такі заявки під час клірингу знімаються «GTC» – до скасування, «TODAY» - до закінчення поточної торгової сесії, Дата у форматі «ГДММДД».
GTC, у разі, мають на увазі до скасування біржів, а чи не Вами. Призначайте дату із запасом невеликим, тоді не знімуться.
Можу запропонувати Вам готову зв'язку функцій (може стати в нагоді):
Тільки майте на увазі, що на демо-рахунку від розробників квіка не можна виставляти заявки з часом дії
все одно знімаються поставив today знову знялася. може справа в інструменті, такі дива на SiH7
система-налаштування-осн.налаштування-торгівля-закриття-позицій-знімати стоп заявки галочка потрібна?
У мене стоїть ця галочка, я навіть не знав про неї 🙂 Але стоп-заявки залишаються при закритті позиції, зараз спеціально перевірив: купив, виставив тейк профіт та стоп-ліміт, продав, стоп-заявка залишилася. Якщо Ви на демо зіткнулися з такою проблемою, напишіть сюди: [email protected] Якщо це на реальному рахунку, або на демо-рахунку брокера, то зв'яжіться з брокером.
По ідеї, TODAY знімаються у вечірній кліринг, GTC тільки коли Ви знімете, та й з датою зрозуміло. Перепрошую, що раніше написав, що GTC біржею знімається, це не так. Якщо GTC знімається, то пишіть тому, хто надав Вам рахунок, це помилка.
знімається не під час клірингу
а ще іноді буває, що заявка, що виставляється по стоп, заявці відкидається. Чи не знаєте чому?
що відкидаються заявки я розібрався
Ви зараз про демо рахунок кажете, абопро реальний?
Якщо навіть не під час клірингу знімаються і не при спробі виконання, то це якийсь баг і потрібно до брокера, або розробникам. Якщо тільки у Вас якийсь робот не знімає їх.
робот не знімає, рахунок не демо. Існує при спробі виконання
Якщо не демо і при спробі виконання, то, швидше за все, недостатньо коштів на той момент.
Кошти точно є
Тоді точно потрібно дзвонити брокеру, у них щось не так.
Ви написали спочатку, що хочете, щоб при закритті позиції стоп і тейк до неї не знімалися, за Вашою розповіддю вони і так не знімаються, не розумію, що Вас не влаштовує.
Я поки не дуже розібрався в читанні з файлів - чи можливе, наприклад, читання рядка з три файлу квика і відразу заповнення змінної Transaction. Чи потрібно парсить цей рядок для кожного значення?
Здрастуйте, на мою думку, не повинно бути жодних проблем з відправкою рядка з файлу через sendTransaction.
Ок, спробую – дякую)
Це поле CLIENT_CODE
О, я помилився, вибачте, brokerref точно потрібно використовувати, важкий день був, голова трохи не варить. З керівництвом дійсно багато неоднозначностей, всі мучаться, для того і робив сайт, тому що сам намучився, коли вивчав QLUA, вирішив трохи полегшити завдання іншим, не все, звичайно, зміг висвітлити, але якщо що, питайте, постараюсь допомогти, чим зможу .
Приклад із двигуна:
Ну та плутанина, але не у вас, а у квіковців у клуа.
Дмитре, якась дивна штука. Тестую скрипт на випадок дисконнекту та ін екстремальних ситуацій. Спеціально зупиняю скрипт та знімаю руками заявку на закриття позиції, яку він контролює. Заявка пов'язана зі стоп заявкою, але в даному випадку, як я розумію, це не має значення. Запускаюскрипт і підводжу до ситуації, коли, за логікою, він повинен цю заявку (яку я зняв руками) зняти і закритися по ринку. І він її цю вже зняту заявку нібито знімає, принаймні, Result = sendTransaction(Transaction) видає ""! Якщо знімаю пов'язану стоп заявку – той самий результат. Може це нормально і потрібно перевіряти зняту заявку чи ні? І навздогін: а як взагалі скрипт поводиться при розриві, а потім поновленні зв'язку?
Вітаю! Ви про який скрипт пишете? Цей скрипт взагалі не виставляє жодних стоп-заявок і на розриви зв'язку теж не реагує.
Транзакція на зняття неіснуючої заявки не поверне помилку при надсиланні, те, що заявку не вдалося зняти, потрібно дивитися в результатах транзакцій, функція OnTransReply. На розриви з'єднання скрипт сам собою ніяк не реагує, т.к. він обробляє дані у міру надходження, під час розривів вони просто перестають надходити. Якщо Вам важливо відстежувати розриви, то можете використовувати функції зворотного виклику OnDisconnected і OnConnected, або перевіряти, чи є з'єднання функцією isConnected.
Дмитре, дякую. Може бути так само дивитися заздалегідь FLAGS у таблиці заявок. trans_id я знаю?
Завжди будь ласка! Можна і прапори дивитись, так.
можна запитати? 285 рядок на ф'ючерсах у кількостях 0 поставимо. отримаємо купуємо чи продаємо опціони? і у нас таблиця з датами опціонів тільки. хедж не потрібний. однією кнопкою швидше. пробував цей скрипт включати, але торгувати не став. він знаходить тек опціони.ф'ючи. або як окремо або розділити купівлю або продаж інструментів. використовувати тільки окремо? чи цей скрипт одночасно не відкриває і є окремо?
Багато чого потрібно буде змінити, вивчайте, розбирайтеся.