Постов с тегом "QLua": 133

QLua


2048

Нашел у себя тексты некогда популярной игрушки 2048, на скорую руку адаптировал к квику. Ловите, улыбайтесь )

local stopped

game = {
	cell = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	best = 0,
--	key = nil,
-- t = nil,
	colors =	{	[0]	= QTABLE_DEFAULT_COLOR,
					[2]	= RGB(248,248,255),
					[4]	= RGB(255,239,213),
					[8]	= RGB(255,222,173),
					[8]	= RGB(255,218,185),
					[16]	= RGB(205,92,92),
					[32]	= RGB(255,69,0),
					[64]	= RGB(238,238,0),
					[128]	= RGB(238,118,33),
					[256]	= RGB(255,160,122),
					[512]	= RGB(255,0,0),
					[1028]= RGB(238,18,137),
					[2048]= RGB(139,0,0)
				},
	
	create_table =
		function(self)
			self.t = AllocTable()
			for i = 1,4 do
				AddColumn(self.t, i, "", true, QTABLE_INT_TYPE, 10)
			end
			CreateWindow(self.t)
			SetWindowPos(self.t,100,100,300,130)
			for i = 1,4 do
				InsertRow(self.t,i)
			end
			SetTableNotificationCallback(self.t, 		
												  function(_t, msg, _p, key)
													if msg == QTABLE_VKEY then
														self.key = key
													elseif msg == QTABLE_CLOSE then
														stopped = true
													end
												  end)
			SetWindowCaption(self.t, "2048 game by www.bot4sale.ru")
		end,
	
	draw = 
		function(self)
			local cell = self.cell
			for row=1,4 do
				for column=1,4 do
					local value = cell[(row-1)*4 + column]
					SetCell(self.t,row,column,value==0 and "" or tostring(value))
					SetColor(self.t,row,column,game.colors[value],0,game.colors[value],0)
				end
			end
	  end,
  
	incr = 
		function(self)
			local t,open = self.cell,{}
			for i=1,16 do 
				if t[i]==0 then 
					open[#open+1]=i 
				end
			end
			t[open[math.random(#open)]] = math.random()<0.1 and 4 or 2
		end,
  
	pack = 
		function(self,ofr,oto,ost,ifr,ito,ist)
			local t = self.cell
			for outer=ofr,oto,ost do
				local skip = 0
				for inner=ifr,ito,ist do
					local i = outer+inner
					if t[i]==0 then 
						skip=skip+1 
					else 
						if skip>0 then 
							t[i-skip*ist],t[i],self.diff = t[i],0,true 
						end 
					end
				end
			end
		end,
  
	comb = 
		function(self,ofr,oto,ost,ifr,ito,ist)
			local t = self.cell
			for outer=ofr,oto,ost do
				for inner=ifr,ito-ist,ist do
					local i,j = outer+inner,outer+inner+ist
					if t[i]>0 and t[i]==t[j] then 
						t[i],t[j],self.diff,self.best = t[i]*2,0,true,math.max(self.best,t[i]*2) 
					end
				end
			end
		end,
  
	move = 
		function(self,dir)
			local loopdata =	{	{0,12,4,1,4,1},
										{0,12,4,4,1,-1},
										{1,4,1,0,12,4},
										{1,4,1,12,0,-4}
									}
			local ofr,oto,ost,ifr,ito,ist = table.unpack(loopdata[dir])
			self:pack(ofr,oto,ost,ifr,ito,ist)
			self:comb(ofr,oto,ost,ifr,ito,ist)
			self:pack(ofr,oto,ost,ifr,ito,ist)
		end,
  
	full = 
		function(self)
			local t = self.cell
			for r=0,12,4 do
				for c=1,4 do
					local i,v = r+c,t[r+c]
					if (v==0) or (c>1 and t[i-1]==v) or (c<4 and t[i+1]==v) or (r>0 and t[i-4]==v) or (r<12 and t[i+4]==v) then
						return false
					end
				end
			end
		return true
	end,
  
	play = 
		function(self)
			math.randomseed(os.time())
			self:incr()
			self:incr()
			while not stopped do
				self:draw()
				if self.best == 2048 then 
					message("Поздравляю!\n\nwww.bot4sale.ru") 
					break 
				end
				if self:full() then 
					message("Game Over!")
					break 
				end
				
				self.diff = false
				if		 self.key==0x25 then 		-- Left
					self:move(1)
				elseif self.key==0x27 then			-- Right
					self:move(2)
				elseif self.key==0x26 then 		-- Up
					self:move(3)
				elseif self.key==0x28 then			-- Down
					self:move(4)
				end
				self.key = nil
				if self.diff then 
					self:incr() 
				end
				sleep(100)
			end
		end,
		
	rules = 
		function()
			message("Правила игры:\n\nВ каждом раунде появляется плитка номинала «2» или «4». Нажатием стрелки игрок может скинуть все плитки игрового поля в одну из 4 сторон. Если при сбрасывании две плитки одного номинала «налетают» одна на другую, то они превращаются в одну, номинал которой равен сумме соединившихся плиток. После каждого хода на свободной секции поля появляется новая плитка номиналом «2» или «4». Если при нажатии кнопки местоположение плиток или их номинал не изменится, то ход не совершается. Если в одной строчке или в одном столбце находится более двух плиток одного номинала, то при сбрасывании они начинают соединяться с той стороны, в которую были направлены.\nЛевый столбец с номерами строк участия в игре не принимает.\n\ns_mike@rambler.ru")
		end
}
local game = game

--------------------------------------------------

function main()
	game:create_table()
	game:rules()
	game:play()
end

 

 Оригинал здесь


Обновление квик позволяет выбрать версию луа

    • 22 марта 2021, 11:45
    • |
    • Glago
  • Еще
В обновлении Quik 8.11.0.66 при запуске скрипта луа на кнопочке появилось выпадающее меню, позволяющее выбрать версию луа, на которой будет запускаться скрипт. Выглядит это так:

Обновление квик позволяет выбрать версию луа


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

Алготрейдинг - торговый робот ROBOT_PYRAMIDING

Отторговка торгового робота — ROBOT_PYRAMIDING, за прошедшую торговую неделю (21.12.2020 — 25.12.2020):

21.11.2020
Алроса вход вход выход ШОРТ:
Алроса вход вход выход ШОРТ
Ростелеком вход выход ШОРТ:
Ростелеком вход выход ШОРТ


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

Алготрейдинг - торговые роботы ROBOT_PYRAMIDING и ROBOT_MARKET_REVERSAL

Пару свойств и принципов движения цен, на основе которых построены два авторских торговых робота для терминала QUIK — трендовый робот ROBOT_PYRAMIDING и контртрендовый робот ROBOT_MARKET_REVERSAL:
1. Свойство трендов продолжаться, при этом цена колеблется от динамических уровней поддержки/сопротивления, в виде скользящих средних линий, в сторону существующего тренда;
2. Покупать следует то, что дёшево, но не дешевеет, продавать то, что дорого, но не дорожает. 

Скачать полнофункциональные ДЕМО версии торговых роботов можно по ссылке: 
www.tradingalgorithms2020.ru


Ниже приведены характерные точки входа против тренда (2-е дно с ложным пробоем, перевернутые голова и плечи, 2-й верх с ложным пробоем, голова и плечи), реализованные в контртрендовом роботе ROBOT_MARKET_REVERSAL:

Сбербанк   — бычий разворот 19.03.2020 (таймфрейм 4ч):
Сбербанк бычий разворот рынка 19.03.2020


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

Алготрейдинг - торговый робот ROBOT_PYRAMIDING

Отторговка торгового робота — ROBOT_PYRAMIDING, за прошедшую торговую неделю (16.11.2020 — 20.11.2020):

16.11.2020
Алроса вход вход выход ЛОНГ:
Алготрейдинг - торговый робот ROBOT_PYRAMIDING
Газпром вход выход ЛОНГ:
Алготрейдинг - торговый робот ROBOT_PYRAMIDING

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

QLua скринер стакана. Или стакан к празднику!

Всем привет, и желаю здравствовать!
Вчера один наш коллега попросил решить простенькую задачу — отображать стаканный спред в моменте, то есть (best_ask_price+best_bid_brice)/2 с помощью луа-скрипта. Вот такой был диалог:
QLua скринер стакана. Или стакан к празднику!
Чего уж проще, выдался час свободного времени решил помочь. Но походу разработки, пришли идеи сделать, что-то типа скринера стакана с дополнительной информацией, которая, возможно будет полезна для анализа.
А идеи возникли следующие: добавить для мониторинга объем всех бидов и асков, разницу (дельту) между объемами покупок и продаж. Но это можно теперь наблюдать даже на графике в Квике(не прошло и 15-ти лет). А вот следующая идея показалась мне интересной. Рассчитывать в моменте VWP (Volume Weighted Price) цену взвешенную на объем для бидов и асков по отдельности. Чтобы было понятно о чем идет речь покажу это на примере стакана в Jatotrader для RIZ0:
QLua скринер стакана. Или стакан к празднику!

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

бюджетный вариант удаленного робота на виртуальном сервере (4)

в продолжение поста https://smart-lab.ru/blog/offtop/638196.php
напомню еще раз сам себе, чем я занимаюсь, для чего мне нужен виртуальный сервер. Идея простая — для того, чтобы использовать преимущества мобильной торговли, мне нужен софт (можно назвать его «советник»), которое будет посылать сигналы на телефон. Понятно, что для такой «простой» задачи не требуется «навароченное железо». Задачи следующие — считать данные о текущих ценах из терминала, сохранить их в БД, посчитать свои индикаторы, сравнить с выставленными уставками и сигнализировать об алармах по почте или через бота. Планируется получать сигналы не чаще 3-5 раз за одну торговую сессию.
Что я сейчас уже реализовал — подобрал дешевый VPS (55 р/месяц), установил XP и два терминала (QUIK и ALOR) от разных брокеров, написал и протестил программы, которые позволяют сохранять информацию о ценах в файлы(SQLite база данных), через которые потом другая прога — «советник», будет формировать сигналы. Этот софт я начал писать на Python 3.4 (так как 3.4 это последняя версия поддерживаемая ХР)

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

бюджетный вариант удаленного робота на виртуальном сервере (3)

в продолжение поста https://smart-lab.ru/blog/634376.php
Удалось найти провайдера с VPS (RAM 512M+установка своей OS) всего за 55 руб/месяц.
Поставил минимальную XP + QUIK 7.5 + ALOR + Python 3.4 + VS2010 + NET 4.0  и все это на 7 GB влезло.
Неделю уже в реале работает !

бюджетный вариант удаленного робота на виртуальном сервере (3)

Теперь надо попробовать со скриптами QLUA + Python 3 запустить…

qlua написать скрипт, вывод таблицы в csv файл

сейчас вывожу по dde в excel.
Можно через lua выводить выбранные таблицы в csv файлы с интервалом 5-10мин, сразу после запуска quik ?

ps кто может написать скрипт?
  • обсудить на форуме:
  • Quik Lua

....все тэги
UPDONW