Постов с тегом "LUA": 340

LUA


В Quik 9 автоматический сбор мусора в lua не работает?

Скрипт, нормально работающий в Quik 8.7, жрет и не освобождает память в Quik 9.2. Пришлось накостылить периодический вызов collectgarbage() в потоке обработчиков (вызов в потоке main() не помогает). Это норма в 9-м квике?

lua quik

Добрый день. Вопрос для программистов на lua. Я начал разбираться с написанием робота. Сам робот на простой ma10. Вход при пробитии закрытия свечи ma(закрытием снизу вверх — лонг, сверху в них — шорт). Выход по стопам, при этом после стопа входить в противоположную сторону по открытию следующего часа. И выход по пробитию закрытия свечи и ma.
1)Не могу понять в какую часть когда записать следующее условие: нужно что бы робот выходил при пробитии закрытия свечи ma и делал переворот.
2)Как прописать условие переворота, по открытию следующего часа, переворота при выбивании стопа.
3)Как прописать перенос сделок через ноч.



( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Quik: отлавливаем заявки на скорость с помощью Lua и колбэков

    • 08 октября 2021, 22:15
    • |
    • FatCat
  • Еще

Строя автоматизированную торговлю на базе Квик, нет-нет да и столкнёшься с ситуацией, когда отправленная заявка исполняется совсем не так быстро как хотелось бы. Удивляться тут нечему, производительность квиковских серверов брокера не резиновая, на всплесках нагрузки могут изрядно подтупливать. Что с этим делать?
Запилить торговую систему через прямое подключение к бирже задача совсем другого уровня сложности по сравнению с демократичным Квиком со встроенным языком Lua. Что же, будем выкручиваться с имеющимся инструментарием.

Для получения информации о выставлении или перестановке заявки можно использовать колбэки OnTransReply (со значением поля status = 3) или OnOrder. Сильно ли они отличаются между собой по скорости? Для ответа на этот вопрос я прикрутил логгирование задержек срабатывания этих колбэков от момента вызова функции отправки заявки на сервер до срабатывания соответствующего колбэка. Логгирование выполнялось на дельтахеджере и опционном котировщике. Данные собирались в течение месяца не первом сервере в Открывашке, сам Квик работал на VDS-хостинге.



( Читать дальше )

Не знаю, почему автор молчит

    • 08 октября 2021, 11:57
    • |
    • Vkt
  • Еще
Есть реально полезная штука — фреймворк для торговых роботов
Оказывается существует новая версия:  github.com/ffeast/hacktrade
А я все на старой сидел, про которую узнал тут:   smart-lab.ru/blog/195508.php
Как можно использовать -  smart-lab.ru/blog/246568.php



  • обсудить на форуме:
  • Quik Lua

Индикатор горизонтальной ширины канала за период

Ширина канала показана синим отрезком, канал строится за отрезок показанный зеленым цветом
по перегибам можно понять что тренд заканчивается
Индикатор горизонтальной ширины канала за период
Settings={
Name="Buy_osc_v01",
period=50,
delta=0,
lim=100.0,
line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0, 0, 255)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0, 0, 0)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    }

                }

}
--[[

описание свойств:
period - период, за каротрый делается расчет
delta - смещение назад 

назначение:
горизонтальная ширина канала 

использовался:
метод наименьших квадратов (аппроксимация линией)

--]]

function Init()
  
  return 2
end

function OnCalculate(index)
    
  sz = Size()
  n = Settings.period
  d = Settings.delta
  lim = Settings.lim
        	
   y = nil    
   if index-n-d > 0 then
    a1 = 0
	a2 = 0
	a3 = 0
	a4 = 0
    for i=index-n+1-d, index-d do  

	  a1 = a1+i*C(i)
	  a2 = a2+i
	  a3 = a3+C(i)
	  a4 = a4+i*i
	
    end  
	
	if((n*a4 - a2*a2) ~= 0) then
	 a = (n*a1 - a2*a3)/(n*a4 - a2*a2)
	 b = (a3 - a*a2)/n
    
	 c1 = 0
	 c2 = 0
	 n1 = 0
	 n2 = 0
     for j=index-n+1-d, index-d do  
      y = a*j + b
	  if C(j) < y then
	    c1 = c1 + (y -C(j))
		n1 = n1 + 1
	  end
	  if C(j) > y then
	    c2 = c2 + (C(j) - y)
		n2 = n2 + 1
	  end	  
     end	
	 
	 if n1 ~= 0 then
	   c1 = c1/n1
	 end
	 if n2 ~= 0 then
	   c2 = c2/n2
	 end		 
	 
	 if a==0 then
	   y = 0
	 else
	   y = (c1+c2)/a	
	   if y > lim then 
	     y = lim 
	   else 
         if y < -lim then 
		   y = -lim
         end   		 
	   end 	 
	 end 

	 
    end 
   end 	
   
   return y,0 
  
end



Индикатор спреда bid-offer в QUIK

Подскажите, пожалуйста, можно ли в QUIK настроить графическое отображение и экспорт статистики спреда bid-offer, который отображается в шапке стакана цен?

Техподдержка QUIK сказала, что такой возможности нет, но думаю, если это считается в квике, то значит такая возможность должна быть.

Индикатор спреда bid-offer в QUIK


  • обсудить на форуме:
  • QUIK

Косяк в LUA

    • 21 мая 2021, 19:00
    • |
    • GOLD
      Популярный автор
  • Еще
Цикл:

for i = 0.1, 0.3, 0.1 do
    message(tostring(i))
end
Результат:

0.1
0.2


Цикл:

for i = 0.1, 0.5, 0.1 do
    message(tostring(i))
end
Результат:

0.1
0.2
0.3
0.4
0.5

Забавно да?

А я этому LUA доверяю свои деньги! Кто знает, где у него еще косяки зарыты...

----------------------------------------
QUIK 8.13.1.16 / LUA 5.3.5 и 5.4.1
  • обсудить на форуме:
  • Quik Lua

Связь Lua -> ваша программа. RAM Disk.

    • 11 мая 2021, 21:33
    • |
    • 3Qu
  • Еще
Я, вроде, уже писал подобный пост. Давно. Но, новое — хорошо забытое старое.
Очень многие неплохо владеют основами программирования, но написать DLL, связь через TCP или что-то другое для экспорта-импорта в Lua — это достаточно сложная процедура, и требует дополнительных знаний и много времени. Однако, если такую связь как-то по простому реализовать, то решились бы многие проблемы обмена данными с C#, Python и другими средами, и не надо вникать во всяческие C-API и прочие премудрости.
Однако, есть достаточно простой и доступный способ — обмен данными через файлы. Например, так:
1. программа Lua пишет строку (строки) данных в формате CSV в файл data.csv,
2. программа Lua создает пустой файл flag.ddd,
3. ваша программа проверяет наличие файла flag.ddd, что означает, что данные готовы к чтению,
4. при наличии файла flag.ddd программа читает данные файла data.csv и удаляет файл flag.ddd,
5. программа Lua проверяет наличие файла flag.ddd, и если этот файл отсутствует пишет строку (строки) данных в файл data.csv (см. п.1)
При обратном обмене происходит все тоже самое, только имена файлов другие.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

О быстродействии авто торговой системы.

    • 01 мая 2021, 02:25
    • |
    • 3Qu
  • Еще
На вечерке измерил быстродействие своей ТС. ТС обрабатывает в среднем ~2.8 запроса в секунду.
Если ТС занята обработкой предыдущего запроса, то следующий запрос пропускается и не обрабатывается. При этом рыночные данные в системе постоянно обновляются и всегда остаются актуальными для системы.
Ну, и о системе. Это Lua программа в паре с C++ DLL. Вся необходимая обработка производится в DLL. Lua является только источником рыночной информации — стакан, обезличенные сделки и свечи.

PS Начал заниматься тем, о чем написал в комментариях — попыткой ускорить обработку данных ТС до 4-5 запросов в секунду. Практически ничего не меняю — небольшая перекомпоновка программы C++ DLL, и обнаружил несколько уже ненужных операторов, оставшихся как мусор от этапа отладки.

Панель скальпинга для Quik.

    • 24 апреля 2021, 20:55
    • |
    • 3Qu
  • Еще
Недавно в одном из топиков анонсировал проект скальпинга и интрадея для Quik. С чего-то начинать надо, и начал с простенькой панели для скальпинга, чтобы не думая и ничего не настраивая нажимать на клавиши Buy/Sell. Ну, вот, сегодня слабал на C# вот это, первый вариант, самый простенький и без затей.
Пока панель выглядит так:
Панель скальпинга для Quik.

На данный момент панель предназначена для торговли одним инструментом, записанном в скрипте Lua. Чтобы сменить инструмент, его надо прописать в скрипте.
Панель не получает никакой информации из Quik, и это ей не нужно, а только передает через DLL в Lua данные о сделке: Buy/Sell, отступы и количество. Всю дальнейшею работу по формированию заявки, будет делать скрипт Lua.
На данный момент панель уже умеет взаимодействовать со скриптом и пока ничего более. Торговый функционал Lua, когда будет время перенесу из другого скрипта. Сейчас все равно выходной, и попробовать нет возможности.

....все тэги
UPDONW
Новый дизайн