вроде как сделал такой код, теперь нужно интегрировать его в мой код ^_^
Код
local is_run = true -- переменная, контролирующая выполнение основного цикла
function main()
while is_run do
local current_time = os.date("*t") -- получаем текущее время как таблицу
-- проверка, превысили ли секунды значение 58
if current_time.sec > 58 then
message("Секунды превысили значение 58!")
end
sleep(1000) -- пауза в 1 секунду
end
end
function OnStop()
is_run = false
end
не закрывает вовремя позицию!
Пользователь
Сообщений: Регистрация: 22.04.2019
24.08.2023 17:56:29
Цитата
nikolz написал: 1) колбек onРaram().2) таймер и синхронизацию ПК от сервера времени.
если не трудно, приведите пожалуйста код пример, спасибо
не закрывает вовремя позицию!
Пользователь
Сообщений: Регистрация: 22.04.2019
24.08.2023 12:08:53
Цитата
Владимир написал: Что за бред? Закрыть позицию в любой удобный для меня момент можно ТОЛЬКО по рыночной цене. В любом другом случае нужно найти того идиота, который станет "соучастником" сделки, и вовсе не факт, что такой идиот найдётся. И при чём тут вообще свечи?
не, типо мне норм по рыночной цене, главное закрыться в нужное для меня время, а то сейчас приходится ждать долбаного тика...
не закрывает вовремя позицию!
Пользователь
Сообщений: Регистрация: 22.04.2019
24.08.2023 11:49:46
Цитата
Nikolay написал: Судя по всему Вы в алгоритме используете индекс, как факт прихода нового бара. А он увеличивается не по времени, а при совершении первой сделки в новом временном интервале. Поэтому новый бар может появится когда угодно, может даже не прийти вовсе, если сделок не будет.
Закрытие же бара - это цена последней сделки в временном интервале бара из таблицы обезличенных сделок. Можете отслеживать время сделки из ТОС, можете просто, при факте наступления нового интервала, принимать, что бар закрылся. Т.е. надо переходить на контроль времени, а не появления нового индекса бара.
о великий, прошу озарите меня как сие вообще реализовывается?
не закрывает вовремя позицию!
Пользователь
Сообщений: Регистрация: 22.04.2019
24.08.2023 11:00:45
Здравствуйте, вопрос в следующем, если торговать руками, то я могу закрыть позицию в любой удобный для меня момент, т.е. даже тогда когда тиков нет. а вот lua почему то так не может, бывает мне нужно закрыться на close свечи, и тупо с 57 до 01 секунды вообще нет тиков, соответственно закрытие происходит на другой свече, подскажите как закрываться тогда когда мне нужно и не быть зависимым от тиков?
кривой вывод index
Пользователь
Сообщений: Регистрация: 22.04.2019
23.08.2023 17:59:15
DEL долбаный язык кривой, даже не показал что в одной переменной в начале ds: была одна не та буква....
кривой вывод index
Пользователь
Сообщений: Регистрация: 22.04.2019
23.08.2023 15:37:45
Здравствуйте, запускаю скрипт фьюч сбер а он мне выводи Index: 12, O(index-1): 24400.0 ...... wtf? поигрался с настройками приёма данных, пробовал локально и с сервера, перезапускал каждый раз квик, 0 реакций... как пофиксить?
m0 парализация quik
Пользователь
Сообщений: Регистрация: 22.04.2019
02.06.2023 17:09:58
и ещё вопрос, выдаёт ttempt to concatenate a boolean value (local 'res'), не могу найти решение проблемы.
Код
function main()
local res = Subscribe_Level_II_Quotes("QJSIM", "SBER")
if res ~= false then
message("Ошибка при подписке на котировки: " .. res)
end
end
При работе с тиковыми графиками рекомендуем выполнить следующие настройки: В настройках графика отключить автомасштаб («Редактирование настроек графика» - галочки «Авто» в соответствующих областях диаграммы). По возможности ограничить вывод на графике последних свечей («Редактирование настроек графика» - поле «Последние ... интервалов»). Если это не помогает, рекомендации следующие: Выполнить рекомендации по оптимизации трафика, описанные здесь: Открыть пункт меню «Система» / «Настройки» / «Основные настройки» / «Сохранение данных» и поставить точку «Только данные, отражающие текущее состояние». При этом клиентским местом QUIK будут сохраняться только последние значения параметров.
либо не помогло либо я плохо настроил, у вас случайно нет файла настроек при которых сбер m0 работал бы без зависаний всего quik?
m0 парализация quik
Пользователь
Сообщений: Регистрация: 22.04.2019
01.06.2023 21:38:41
версия quik 10.2.1.12
m0 парализация quik
Пользователь
Сообщений: Регистрация: 22.04.2019
01.06.2023 21:36:49
Здравствуйте, при переключении активного графика сбера на m0 для просмотра тиков, остальная часть кроме графика перестаёт банально работать так как он сильно загружает сам quik, даже если правой кнопкой по графику нажать всё равно грузится меню мега долго, при всём этом цп загрузка 60%, оперативки ещё туча свободной, подскажите что сделать что бы работало норм?, открытый второй график m1 перестаёт вообще обновляться.
Как настроить отметки покупки-продажи
Пользователь
Сообщений: Регистрация: 22.04.2019
14.08.2020 19:39:24
Цитата
Andrey Bezrukov написал: Можем зарегистрировать пожелание на реализацию функционала, который бы позволил накапливать в рабочем месте историю сделок за предыдущие сессии и отображать их на исторических графиках. Регистрируем?
да пожалуйста
Как настроить отметки покупки-продажи
Пользователь
Сообщений: Регистрация: 22.04.2019
13.08.2020 22:11:32
Здравствуйте, после покупки-продажи, на графике появляются очень удобные отметки где купил и по сколько купил и тд. Вопрос, как и где настроить что бы данные отметки оставались на графике длительное время? т.е. когда конец сесии и в след день я захожу в квик, то отметки исчезают, а я бы хотел что бы они остались.(хотя бы на неделю)
Как расшифровывается формула?
Пользователь
Сообщений: Регистрация: 22.04.2019
31.07.2020 15:14:45
Цитата
Anton написал: Это рекуррентная формула, т.е. каждое следующее значение рассчитывается на основе предыдущего. Самое первое значение там просто как в SMA, т.е. сумма первых пяти цен (первой - пятой), деленная на 5. Второе - сумма вторых пяти цен (второй - шестой) минус предыдущее значение SMMA плюс последняя в группе (шестая) цена, все деленное на 5. Третье - сумма третьих пяти цен (третьей - шестой) минус предыдущее... и т.д.
я дико извиняюсь, можете расписать как Дыбилу? как sma вычисляется я знаю, суммируем все числа и делим на период. дальнейшие действия я не понял, что за шестое число? у меня всего их 5, или 6 это сумма предыдущих?
Как расшифровывается формула?
Пользователь
Сообщений: Регистрация: 22.04.2019
31.07.2020 13:54:10
Здравствуйте, хочу переписать формулу честно, пытался сам разобрать, но вошел в тупик при последовательности действий SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n, вот числа, должно выйти 123 879 (взял с ) Период 5 { 123900 10:00 123960 10:01 123600 10:02 123730 10:03 123680 10:04 } я бы очень хотел понять последовательность действий, по формуле пишут sum(Pi) / n т.е. 123680 / 5? - 123730 + 123680 / 5 ? или как? Объясните пожалуйста
lua 5.3 не открывает заявки...
Пользователь
Сообщений: Регистрация: 22.04.2019
15.06.2020 12:12:26
вот функция function priceForMarketOrder( vol ) if ( vol > 0 ) then return tostring( tonumber( getParam( "SPBFUT" , "RIM0" , "PRICEMAX" ) ) ) else return tostring( tonumber( getParam( "SPBFUT" , "RIM0" , "PRICEMIN" ) ) ) end end
lua 5.3 не открывает заявки...
Пользователь
Сообщений: Регистрация: 22.04.2019
15.06.2020 11:35:46
Здравствуйте, перешли знач на Lua 5.3 и данный код перестал фурычить, как исправить то? t = { ["CLASSCODE"] = "SPBFUT", ["SECCODE"] = "RIM0", ["ACTION"] = "NEW_ORDER", ["ACCOUNT"] = "счёт" , ["TYPE"] = "M", ["TRANS_ID"] = "25" } t["QUANTITY"] = "1" t["OPERATION"] = "B" if vol < 0 then t["OPERATION"] = "S" end
t["PRICE"] = priceForMarketOrder( vol )
local transResult = sendTransaction( t )
-- Проверка на ошибку if ( transResult and transResult ~= "" ) then
return end
Lua 5.3.5 connect Dll (Crash)
Пользователь
Сообщений: Регистрация: 22.04.2019
03.06.2020 20:45:42
подскажите только, почему у меня Память которую Lua жрёт, постоянно увеличивается? там сейчас только вызов Dll и Return
Lua 5.3.5 connect Dll (Crash)
Пользователь
Сообщений: Регистрация: 22.04.2019
03.06.2020 20:44:30
эмм... пересобрал ещё раз либу, и переименовал свои функции из static int в int и заработало -_-..... ну ок
Lua 5.3.5 connect Dll (Crash)
Пользователь
Сообщений: Регистрация: 22.04.2019
03.06.2020 20:34:57
Здравствуйте, в общем был на Lua 5.1 всё ок, работало, появилась нужда перейти на Quik 8.5.2.11 lua53.dll (lua 5.3) Ну и в общем, при запуске Dll, она тут же: крашит Quik, загружает ЦП 100%, просто выдаёт ошибку. (Critical error ACCESS_VIOLATION in script) Lib файл был собран 5.3.0
Код
static int forLua_TestFunc(lua_State* L)// Возвращает заданный текст
{
//закоментил что бы проверить работу без него MainЕ(); // моя функция
if (check == 1)
{
lua_pushstring(L, "1");
}
if (check == 2)
{
lua_pushstring(L, "2");
}
if (check == 0)
{
lua_pushstring(L, "0");
}
//lua_pushstring(L, "0");
return(1);
}
//=== Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua ================================//
static struct luaL_Reg ls_lib[] = {
{ "TestFunc", forLua_TestFunc },
{ NULL, NULL }
};
//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_HydraConnector(lua_State * L) {
lua_newtable(L);
luaL_setfuncs(L, ls_lib, 0);
lua_setglobal(L, "MyConnector");
return 0;
}
Игровые сервера которые работают в выходные
Пользователь
Сообщений: Регистрация: 22.04.2019
08.05.2020 15:33:43
Здравствуйте, подскажите где скачать Quik с игровыми серверами что бы можно было потестировать различные вещи в выходные?
Получить только текущие данные
Пользователь
Сообщений: Регистрация: 22.04.2019
08.05.2020 15:08:10
Цитата
Николай Камынин написал: если не сложно то выложите историю мне как раз надо большую
Спасибо, в след открытие рынка попробую, вот что есть,
Получить только текущие данные
Пользователь
Сообщений: Регистрация: 22.04.2019
07.05.2020 14:40:58
Отредачил код, if(tostring(t.day) >= "07") then сделал if(tostring(t.day) >= "7") then но сути не меняет, 200 с чем то сообщений всё равно приходят, т.е. все сегодняшние данные.
Получить только текущие данные
Пользователь
Сообщений: Регистрация: 22.04.2019
07.05.2020 14:34:49
Здравствуйте подскажите пожалуйста., использую простой тестовый скрипт, как сделать что бы я получал только текущую информацию после запуска скрипта?
суть, если я пишу в Quik Lua , то эта психованная, загружает мне данные все которые только может, т.е. если у неё есть в истории 350000 записей свечей, то она при запуске этого скрипта мне *иганёт 350000 msg Ухты....
Код
function eventCb( index )
message("Ухты")
end
function main()
local errorStr
ds , errorStr =CreateDataSource(p_classcode, p_seccode, p_timeframe )
if ( ds == nil ) then
end
ds:SetUpdateCallback(eventCb)
— Загрузка информации о позиции
— Цикл таймера
while isRun do
sleep( 10 )
end
end
я думаю что где то в quik нужно что то выключить, галочка стоит, Система -> Настройки -> Программа -> Сохранение данных -> Только данные, отражающие текущее состояние.
вот что странно пытался даже обойти так , О_О всё равно дала мне 2500 О_О
Код
local t = ds:T(index)
if(tostring(t.month) == "5") then
if(tostring(t.day) >= "07") then
message("Ухты")
end
end
do return end
Ema lua
Пользователь
Сообщений: Регистрация: 22.04.2019
16.06.2019 19:35:45
ну вот пример в Wealth-Lab закинул данные и поставил ema close 3 данные ema свечи я получил сразу же через 3 свечи
написал: хоть они и разные и во всех их не могу одного понять! EMA (t) = EMA (t-1) + 2 *(P(t) – EMA (t-1))EM=Price(t)×k+EMA(y×(−k)откуда мне знать чему будет равен EMA (t-1) и
Эти алгоритмы считаются итеративно. E(t-1) - это результат предыдущего расчета, а не предыдущий элемент например массива. На первой (на самом деле нулевой :) ) итерации E(t-1) можно принять равным нулю либо цене расчета. По сути оба варианта равноправны, т.к. пользоваться значением индикатора имеет смысл после того только после (period+1) отсчета.
т.е. EMA (0) = 0 + 2 *(P(0) – 0) или EMA (0) = P(0) + 2 *(P(0) – P(0)). следующая EMA (1) = EMA(0) + 2 *(P(1) – EMA (0)) каждая последующая EMA (t) = EMA (t-1) + 2 *(P(t) – EMA (t-1))
Таким образом, чтобы исключить влияние переходного процесса БИХ-фильтра, значения можно считать корректными, с момента когда через фильтр прошло число отсчетов не менее длины периода расчета фильтра.
Чисто графически имеет смысл начинать с Р(0), так будет лучше выглядеть на графике, хотя сути это не меняет.
Николай подсказывает абсолютно верно: -хорошо бы хотя бы краем глаза взглянуть на теорию :)
Imersio Arrigo, ну вот у меня есть EMA из 3 свечей и он равен 66731; ниже те самые 3 свечи. int candle[3]; candle[0] = 66730; candle[1] = 66719; candle[2] = 66744; опишите алгоритм пожалуйста.
Ema lua
Пользователь
Сообщений: Регистрация: 22.04.2019
14.06.2019 13:15:33
Здравствуйте, подскажите пожалуйста код функции EMA, или подробный алгоритм, в нэте туча подобных алгоритмов EMA (t) = EMA (t-1) + 2 *(P(t) – EMA (t-1))
EM=Price(t)×k+EMA(y×(−k)
хоть они и разные и во всех их не могу одного понять! EMA (t) = EMA (t-1) + 2 *(P(t) – EMA (t-1))
EM=Price(t)×k+EMA(y×(−k)
откуда мне знать чему будет равен EMA (t-1) и тд, если я его только хочу вычислить, просто для меня это звучит так, подходит ко мне человек с потерей памяти и спрашивает меня, сколько ему лет, а я ему говорю, ЛЕТ=(Лет-1) + 1 О_о так он же не знает сколько ему было лет, и сколько есть.
Как выставить TAKE_PROFIT_AND_STOP_LIMIT_ORDER на моих условиях?
Для этого необходимо установить отступ от цены последней сделки (OFFSET), этот параметр указывает, насколько цена последней сделки должна стать ниже локального максимума цены, чтобы тэйк-профит сработал. Направление условной стоп заявки при этом должно быть "Продажа" (если лимитная выставлена на покупку).
Т.е. если я поставлю t["OFFSET"] = tostring(5) то мною описанной ситуации не будет?
Как выставить TAKE_PROFIT_AND_STOP_LIMIT_ORDER на моих условиях?
Пользователь
Сообщений: Регистрация: 22.04.2019
26.05.2019 19:41:50
Здравствуйте, в общем столкнулся с проблемой, а звучит так "Long по 16000", как выставить take профит, по цене которой я хочу, или выше "take 16300", но при этом, что бы сквизы меня не убивали, сейчас вот с таким кодом, если цена 16250, затем за секунду сквизанёт на 16301, и вернётся на 16250, то меня закроет по take по цене 16250, А я хочу по моей цене или выше)))
Код
t = {
["CLASSCODE"] = p_classcode,
["SECCODE"] = p_seccode,
["ACTION"] = "NEW_STOP_ORDER",
["ACCOUNT"] = "AKK" ,
["TRANS_ID"] = tostring( p_robot_id )
}
t["OPERATION"] = "S"
t["MARKET_TAKE_PROFIT"] = "YES"
t["MARKET_STOP_LIMIT"] = "YES"
t["PRICE"] = "0" -- Цена, по которой выставится заявка при срабатывании Стоп-Лосса (для рыночной заявки по акциям должна быть 0)
t["STOPPRICE"] = tostring(openprice + 300) -- Цена Тэйк-Профита
t["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER" -- Тип стоп-заявки
t["EXPIRY_DATE"] = "GTC"
t["IS_ACTIVE_IN_TIME"] = "NO"
t["STOPPRICE2"] = tostring(openprice - 150) -- Цена Стоп-Лосса
t["OFFSET"] = tostring(0)
t["QUANTITY"] = "1"
t["OFFSET_UNITS"] = "PRICE_UNITS"
t["SPREAD"] = tostring(0)
t["SPREAD_UNITS"] = "PRICE_UNITS"
local transResult = sendTransaction( t )
-- Проверка на ошибку
if ( transResult and transResult ~= "" ) then
return
end
тупят стопы?
Пользователь
Сообщений: Регистрация: 22.04.2019
20.05.2019 11:49:07
Здравствуйте, в общем решил протестить одну стратегию, сделал код, всё ок, покупает, выставляет TAKE_PROFIT_AND_STOP_LIMIT_ORDER НО вот в чём трабл, по окончанию дня, я заметил что, что то стопы не так работают, начал приглядываться, и действительно они не срабатывают ПРЯМ вот часто, и я собственно хотел узнать, это дело в том что я на демо(finam) тестирую? или всё же тупят стопы-код?
написал: так что это не то что нужно =(( мне нужна текущая цена текущей позиции.
Что Вы понимаете под "текущая цена текущей позиции"? биржа транслирует то что Вам нужно, если да в каком параметре? Следует понимать что на срочном рынке (в отличии от фондового и валютного рынков), позиции ведет и транслирует биржа, а не QUIK. Следовательно если биржа не транслирует нужную Вам цифру то и в QUIK ее нет.
Окей тогда я проще опишу) фьюч, я допустим, покупаю по 105, затем через минуту я покупаю по 107, средняя цена у меня будет 106, а перед этим я делал ещё 100 сделок, так вот в чём вопрос, как мне получить цифру 106, моей текущей позиции. смысл в том, что я покупаю по маркету, и сразу же выставляю стоп, ну а стоп мне нужно выставить ОТ цены моей позиции +- прибыль - убыток
получить текущую эффективную цену позиции
Пользователь
Сообщений: Регистрация: 22.04.2019
15.05.2019 11:53:49
Цитата
Sergey Gorokhov написал: , Этот параметр считает и транслирует биржа, можете поинтересоваться у нее какая формула расчета. В биржевом потоке это параметр waprice из таблицы position потока FORTS_POS_REPL
И снова я к вам вернулся)) в общем протестил что да как, и вот что выходит перед покупкой с прошлой сделки в "эффект.цена позиции" осталась цена 65212 (позиций нет) short по маркету. в "Таблица заявок" цена 65103 а в "эффект.цена позиции" цена стала 65209(это средняя цена всех предыдущих сделок как я понял), такой цены в стакане в Bid Ask нет. так что это не то что нужно =(( мне нужна текущая цена текущей позиции.
Благодарю вас! так заработало. только я до сих пор не понимаю, почему в "Таблица моих сделок" цена одна купли, а по эффект.цена позиции другая. я уже не понимаю на какую мне смотреть)))
Так на всякий случай спрошу, если я куплю фьюч по рынку, затем через 2 минуты, ещё раз докуплю фьюч, я увижу среднюю цену позиции в эффект.цена.поз? или в другом месте нужно смотреть?
Да, верно, это и есть Средневзвешенная цена открытия.
погуглил что да как вродь всё правильно написал, но пишет nil позиция открыта, в лонг. tas=TABLE getFuturesHolding("SPBFUT","70180ZB", "SiM9",4) message (tostring(tas))
Так на всякий случай спрошу, если я куплю фьюч по рынку, затем через 2 минуты, ещё раз докуплю фьюч, я увижу среднюю цену позиции в эффект.цена.поз? или в другом месте нужно смотреть?
получить текущую эффективную цену позиции
Пользователь
Сообщений: Регистрация: 22.04.2019
14.05.2019 13:58:09
Здравствуйте, подскажите пожалуйста, как через Lua 100% получить Эффективную цену позиции? (фьюч)
Остановка и запуск Lua через Lua
Пользователь
Сообщений: Регистрация: 22.04.2019
30.04.2019 19:01:04
Понял Спасибо большое, уже решил проблему и внедрил код в 1 файл, но всё же было интересно можно так или нет =)
Остановка и запуск Lua через Lua
Пользователь
Сообщений: Регистрация: 22.04.2019
30.04.2019 18:14:03
ну вот в разделе quik -> Доступные Скрипты -> Загруженные скрипты Есть 2 lua файла 1.lua основной запускается и работает, нужно через него запустить 2.lua.
Остановка и запуск Lua через Lua
Пользователь
Сообщений: Регистрация: 22.04.2019
30.04.2019 14:13:53
Здравствуйте, подскажите как через 1.lua, запустить в quik 2.lua(они оба добавлены) и как остановить?
Кто сможет поправить скрипт?, не за бесплатно
Пользователь
Сообщений: Регистрация: 22.04.2019
24.04.2019 18:23:02
Здравствуйте, кто может подправить скрипт Lua, за выполнение работы 1к руб, скрипт работает всё ок, но в каких то моментах тупит адски...
Активная Тэйк-профит и стоп-лимит заявка
Пользователь
Сообщений: Регистрация: 22.04.2019
23.04.2019 11:16:42
И ещё вопросик, почему когда стоит "тэйк-профит, если цена >= 64338" а меня в итоге закрывает по 64325? как это устранить? я хочу что б закрывало больше или равно по цене.
Активная Тэйк-профит и стоп-лимит заявка
Пользователь
Сообщений: Регистрация: 22.04.2019
22.04.2019 21:06:58
В общем потыкал в гугле) и сделал пока что такую вот рабочую версию, если можно сделать более практичной, буду благодарен за помощь.
Код
local t = ds:T(index)
for i = getNumberOf("stop_orders")-1,0,-1 do
T = getItem("stop_orders",i);
message(bit.test(T.flags,0))
if(bit.test(T.flags,0) == true) then
message('DA')
end
end
Пример для проверки стоп заявки: if bit.test(zalyavka.flags, 0) then message ("заявка активная") end
Я прошу прощения, я недавно с lua работаю, стоп заявкой считается "Тэйк-профит и стоп-лимит"? и что нужно мне знать для работы данной проверки? может быть идентификатор заявки какой то или ещё что то? if bit.test(zalyavka.flags, 0) then message ("заявка активная") end
Активная Тэйк-профит и стоп-лимит заявка
Пользователь
Сообщений: Регистрация: 22.04.2019
22.04.2019 17:07:40
Здравствуйте, кратко опишу ситуацию, покупаю фьюч, далее выставляю через lua "Тэйк-профит и стоп-лимит", вопрос вот в чём, как мне через lua проверить исполнена заявка или активная? Как сделать что бы скрипт её видел? в виде переменной, типо if(zalyavka == true) then message ("заявка активная) end Большое спасибо