Иван (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Таблица сделок, номер заявки превращается в число e+
 
Читаю таблицу сделок:
Код
local tradelist = {};
      for i = 0,getNumberOf("trades") - 1 do
      
         tradelist[i] = "" ..
                     getItem("trades",i).datetime.day.."."..getItem("trades",i).datetime.month.."."..getItem("trades",i).datetime.year..";"..
                     getItem("trades",i).datetime.hour..":"..getItem("trades",i).datetime.min..":"..getItem("trades",i).datetime.sec..";"..
                     tonumber(string.format("%0.17g", getItem("trades",i).trade_num))..";"..
                     tonumber(getItem("trades",i).order_num)..";"..
                     tonumber(getItem("trades",i).trans_id)..";"..
                     getItem("trades",i).sec_code..";"..
                     getItem("trades",i).brokerref..";"..
                     getItem("trades",i).price..";"..
                     getItem("trades",i).qty..";";
         
Но при попытке получить номер заявки (order_num, trade_num) - длинное число (19 символов) превращается в число вида 1.2929169375034e+018
Как можно получить обычный номер заявки без e+?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Быстродействие Quik
 
Есть какие-то рекомендации для увеличения скорости работы (быстродействия) квика?
Сегодня нашел в папке квика лог в корневой директории (вес 1 ГБ+). Удалил его и квик вроде как быстрее стал работать раза в 3.

Подскажите пожалуйста рекомендации что еще можно сделать?
Версия квика 7.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Прибавить к текущей дате 30 дней (или произвольное кол-во дней)
 
Как на языке луа сделать прибавление текущей даты + 30 дней (или произвольное кол-во)?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - пустая таблица обезличенных сделок
 
С чем это может быть связано?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - определить актуальный код фьючерса
 
Можно ли как-то автоматически определить актуальный торгуемый фьючерс?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Использование "якоря" для скрипта Lua
 
На каждом окне в Квике в верхнем правом углу есть иконки свернуть окно, уменьшить размер, закрыть окно.
А также есть иконка якоря позволяет позволяет переключить инструмент.

Можно ли как-то этот якорь аналогичным образом использовать для lua скриптов?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Можно ли через QUIK с помощью LUA прочитать список email писем (mail.ru)?
Есть ли образец скрипта как это можно сделать?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Добрый день.

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

function OnTrade(trade)
local trade_num = trade.trade_num;
local trans_id = trade.trans_id;

приходит trade_num вместо обычного числа из 18 символов приходит что то типа: 1.952337642788e+018. В результате пишет не возможно создать заявку (стоп-ордер).

Как преобразовать такое число с "e+018" в обычное число сколько бы там не было символов?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
 
Опубликовал сегодня первую версию торгового привода Enter Trade 0.1 для терминала Quik на Smart-Lab.

Привод умеет: открывать длинную позицию, открывать короткую позицию с заданным объемом, закрывать позицию частично либо полностью, автоматически выставлять защитные стоп-ордера (тип стоп и тейк №9).

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

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

Комментарии и замечания по исходному коду приветствуются.

Больше информации на Smart-Lab.ru - https://smart-lab.ru/blog/624023.php


Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Вопрос про демо-счета Quik
 
Просмотрел практически все демо-счета которые есть у брокеров для Quik для срочного рынка и не могу понять почему они так сильно отличаются от реала? а именно по времени сессии. Есть ли демо приближенное к реальным торгам?  
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
OnTrade и стоп-заявка
 
Есть ли объективные причины почему сервер, биржа могут отклонить правильно оформленную стоп-заявку? В каких случаях это может произойти?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Вопрос про Сallback-и и их потерю
 
Сегодня наткнулся на интересный пост на смарт-лабе:
Цитата
https://smart-lab.ru/blog/472380.php
1. Впервые слышу про то, что колбэки в очередь встают. На сколько мне
известно — такого никогда не было. Если Вы выполняете вычисления
непосредственно внутри функции OnTrade, и не успели их завершить до
прихода следующего колбэка, то пришедший колбэк теряется.
Неужели это действительно так?
Что не успел отработать коллбэк и вернуть результат, тут приходит новый и затирает собой предыдущий?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Функция getCandlesByIndex() и закрытие свечки
 
Как при использовании функции t, n, l = getCandlesByIndex(tag, line, first_candle, getNumCandles(tag)); понять что последняя свеча уже закрылась или последнее значение индикатора уже рассчитано?  
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Несколько Lua-роботов на 1 инструменте
 
На данном форуме вычитал что многие дают роботу идентификатор в поле комментарий при открытии/закрытии позиций.
Не совсем понимаю как несколько роботов могут торговать на 1 инструменте?
Ведь все равно сколько бы роботов не было - они будут опираться на общие данные а не анализ своих операций.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Журнал сделок и расчет результата сделок
 
К примеру было куплено 10 контрактов.

5 купились по цене 103100
3 купились по цене 103101
2 купились по цене 103102

Проходит время мы сделали докупку на 5 контрактов.
4 купились по цене 103250
1 купился по цене 103251

Проходит время мы решили закрыть часть позиций (а именно 10 контрактов).
5 было закрыто по цене 103500
5 было закрыто по цене 103501

Проходит еще время и мы решили закрыть все.
1 был закрыт по цене 103602
1 был закрыт по цене 103603
1 был закрыт по цене 103604
1 был закрыт по цене 103605
1 был закрыт по цене 103606

Как посчитать результат сделки?

Если бы это был открыт 1 контракт, либо было открыто 10 контрактов по одной и той же цене, и аналогично если бы было закрыто все по 1 цене - здесь вопросов нет...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Идентификатор для метки
 
Возможно ли для добавленной метки задать идентификатор?
Либо сделать такой индикатор 2 линии которого можно будет двигать на графике? Просто двигать как передвигается стоп-лосс мышкой.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Индикатор с уровнями для 3 таймфреймов
 
Если мы нанесем на график индикатор MA то при переключении между таймфреймами м5, ч1, и д1 он каждый раз перересуетс в зависимости от таймфрейма. Возможно ли сделать так что бы индикатор рисовал различные уровни для трех таймфреймов?
Желтые для м5, синие для ч1, и красные для д1. Т.е. на каком бы таймфрейме мы не были из этих трех все равно бы нарисовались три типа уровней...?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Реализация скользящего стопа
 
Пересмотрел все виды стопов в Quik и не совсем понимаю как реализуется скользящий стоп на Lua?
Это простое и банальное удаление и перевыставление стопа на Lua?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Всплывающее окошко Message() - кожно ли убрать?
 
Можно ли как-то при совершении операции скрыть окно message()? Что бы сообщения выводились только на панели сверху в "Окно сообщений"?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Создание таблицы в Lua
 
В function OnInit() создаю таблицу:
Код
 
-- Функция создает таблицу
function CreateTable()
   
   -- Получает доступный id для создания
   t_id = AllocTable(); 
   
   -- Создаем колонки
   AddColumn(t_id, 0, "", true, QTABLE_STRING_TYPE, 5);
   AddColumn(t_id, 1, "", true, QTABLE_STRING_TYPE, 20);
   AddColumn(t_id, 2, "", true, QTABLE_STRING_TYPE, 5);
   AddColumn(t_id, 3, "", true, QTABLE_STRING_TYPE, 5);

   t = CreateWindow(t_id);-- Создает таблицу
   SetWindowCaption(t_id, "Enter trade 0.1"); -- Устанавливает заголовок   
   SetWindowPos(t_id, 100, 100, 252, 532); -- Задает положение и размеры окна таблицы
   
   -- Дальше пошли строки и колонки...
end;
Оставляю окошко таблицы скрипта работающим - закрываю Quik.
После запускаю Quik и вижу что это созданное окошко-таблицы почему-то становиться сквозным при переключении между вкладками. Что может быть не так сделано?

Хотелось бы понимать возможно ли запустить несколько экземпляров скрипта по 1 на каждой вкладке.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Перезапуск LUA-скрипта из-за ошибок
 
Каждый раз когда в скрипте случается ошибка, приходится останавливать скрипт через сервисы, и по новому его запускать.
Возможно ли  как-то сделать так, что бы выпала ошибка - обычно ее смотрю в окне "Доступные скрипты", отредактировал скрипт и он перезапустился или продолжил работу дальше?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Список всех идентификаторов графиков на текущий момент в Quik
 
Возможно ли средствами LUA получить список всех зарегистрированных идентификаторов графиков, индикаторов, которые есть на данный момент. Просто список.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Обработать исключение для включаемого файла через dofile
 
Есть файл №2 со скриптом Lua подключаемый в основной скрипт Lua №1 через dofile().
Можно как-то создать исключение если в этом файле №2 есть ошибка - проигнорировать его и не прерывать работу скрипта №1.
Проводимые вычисления и операции в скрипте №2 никак не затрагивают работу скрипта №1.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Индикатор + скрипт
 
При разработке скрипта на LUA, который запускается через "Сервис > Lua-скрипты..." используется следующая конструкция:
Код
IsRun = true; -- Флаг поддержания работы скрипта

function OnInit()

   -- настройки
   
end;             
 
function main()
   -- Цикл будет выполнятся, пока IsRun == true
   while IsRun do
      if IsWindowClosed(t_id) then --закрываем скрипт, когда окно закрыто
         OnStop();
      end;
      sleep(2000);
   end;
end;

Когда создается индикатор используется следующая конструкция:
Код
Settings =
{   ["Name"]         = "NAMEINDICATOR",
   line =
   {   {   Name      = "NAMEINDICATOR",
         Color      = 0xff0000,
         Type      = TYPE_HISTOGRAM,
         Width      = 2
      },
   }
};

function Init()
   return #Settings.line;
end;
Возможно ли в создаваемых индикаторах делать создание окон таблиц и сделать такой же цикл function main() sleep(2000). Или индикаторы затачиваются только на работу и изменение значений графика?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Неправильное значение Totalnet в функции onTrade()
 
Функция как получаю текущее число открытых позиций:
Код
-- QUIK Получить: текущее кол-во открытх позиций
function _QuikGetTotalnetByIndex(code)
   for i = 0,getNumberOf("futures_client_holding") - 1 do
      if getItem("futures_client_holding",i).sec_code == code then
         return getItem("futures_client_holding",i).totalnet;
      end;
   end;
   return 0;
end;
Сейчас 0 контрактов.
Купили 2 контракта.
Приходит ответ в функции в OnTrade() что куплено 2 контракта.
Но если внутри данной функции сделать запрос на кол-во контрактов _QuikGetTotalnetByIndex() - то будет 0.

Если купить еще 3 контракта, и сделать запрос в OnTrade() - то он выведет значение 2.
Складывается впечатление что таблица ограничений по клиентским счетам "futures_client_holding" обновляется после таблицы сделок, либо чего-то не понимаю?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Изменение стоп-ордера средствами Lua
 
Можно создать стоп ордер - NEW_STOP_ORDER
Можно удалить стоп ордер - KILL_STOP_ORDER

Каждое из действий является 1 транзакцией и 1 событием.

Как грамотно написать функцию изменения текущего ордера, что-то вроде MODIFY_STOP_ORDER? Не нашел в сети материалов на данную тему. На форуме есть несколько не развернутых примеров. Хотелось бы больше информации.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Жизнеспособность идеи - 100 контрактов = 100 стоп-ордеров по 1 контракту каждый
 
Обычно выставление стоп-лосса затачивается на то какой объем был куплен или продан. Продали 100 контрактов = 1 стоп на 100 контрактов
Учитывая то что продажа 100 контрактов может происходить частями по 45 по 5 и по 50 контрактов, то соответственно можно и стопы также выставить по 45 по 5 и по 50. И здесь при закрытии позиции начинаются сложности - закрытие также может произойти частями по 30, по 20 и по 50. И сложно пересчитать каждый из ордеров.

Другое дело если каждый ордер это 1 контракт. Продалось 30 контрактов - сняли 30 стопов. Продалось еще 20 - сняли 20 и т.д.
Насколько вообще в принципе жизнеспособна идея купив к примеру 100 контрактов выставить не 1 стоп, а 100 стопов по 1 контракту.

При торговле на 10 контрактов по инструменту допускаю что все это допустимо 10 продано = 10 ордеров.
А вот когда число контрактов 100, 500?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Возможна ли выборка данных из таблицы trades, stop_orders, orders и других как в MySQL
 
Подскажите пожалуйста, есть ли возможность выбирать отфильтрованные, отсортированные данные из таблиц хотя би примитивными способами на уровне SEL ECT * FR OM table SORT sec_code WHERE sec_code = Si. А то получается при запросе данных нужно каждый раз обходить таблицу.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Звук Lua в фоновом режиме
 

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

Код
os.execute('powershell -c (New-Object Media.SoundPlayer "c:\\windows\\media\\tada.wav").PlaySync();')
Но звук будет проигран не в фоновом режиме. Обычно воспроизведение звука занимает 5-10 секунд, что останавливает основную работу скрипта. Можно ли как-то проиграть данную команду в фоновом режиме. Либо как-то запустить проигрыватель VLC.exe для проигрывания звука в фоновом режиме?  
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Передача массива в функцию - теряется последовательность ключей
 
Добрый день.

Передаю в функцию 3 переменных, третья из которых массив = {}

Код
LogWrite("report", comment, {Trade=100, Code=Si, Q="-"..10, Price=10000, Pips=1});

В функции делаю чтение массива:
Код
function LogWrite(name, log_type, log_array)

   local content = "";
   local i = 1;
   for key, value in pairs(log_array) do
      content = content.."\t"..value..";";
      content = string.gsub(content,"([.]+)",",");
      i = i + 1;
   end;
   message(tostring(content));
   
end;
Массив считывается через цикл, но почему-то у него получается иная последовательность.
На выходе ожидаю строку: 100; Si; -10; 10000; 1;
По факту последовательность другая: Si; 1; 100; -10; 10000;

С чем это может быть связано?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Страницы: 1
Наверх