Постов с тегом "QUIK LUA": 232

QUIK LUA


В помощь QLUA-водам. Функция чтения CSV файла.

    • 21 ноября 2019, 12:01
    • |
    • Egorax
  • Еще
В былую давность пытался решить вопрос с интерфейсом для QLUA.
Испробовал IUP, VCL и еще какая-то библиотека была. Но ни одна библиотека стабильно не работала, через какой-то промежуток времени Квик вставал колом.


Т.к. нам красоты не надо, а удобство хочется, то решил пусть интерфейсом будет Excel(файл.CSV).

В помощь QLUA-водам. Функция чтения CSV файла.


Вот вам функция для чтения CSV файлов:

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

-----------------------------
function File_Read(filename)


local col = 1
local pat = "(.*)"
local A={};local B={};local C={};local D={};local E={};
local F={};local G={};local H={};local I={};local J={};
local K={};local L={};local M={};local N={};local O={};
local P={};local Q={};local R={};local S={};local T={};
local file, err = io.open(filename,«r»)
if err ~= nil then PrintDbgStr(«err read file: »..err); return; end
str = file:read()
for var in string.gmatch (str, ";") do col=col+1 end
for i = 2, col do pat = pat..";(.*)" end
for line in io.lines(filename) do
--PrintDbgStr(line)
local _,_,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20 = string.find(line,pat)
--PrintDbgStr(tostring(s1))
table.insert(A,s1);table.insert(B,s2);table.insert(C,s3);table.insert(D,s4);table.insert(E,s5);
table.insert(F,s6);table.insert(G,s7);table.insert(H,s8);table.insert(I,s9);table.insert(J,s10);
table.insert(K,s11);table.insert(L,s12);table.insert(M,s13);table.insert(N,s14);table.insert(O,s15);
table.insert(P,s16);table.insert(Q,s17);table.insert(R,s18);table.insert(S,s19);table.insert(T,s20);
end
file:close()
table.remove(A,1);table.remove(B,1);table.remove(C,1);table.remove(D,1);table.remove(E,1);
table.remove(F,1);table.remove(G,1);table.remove(H,1);table.remove(I,1);table.remove(J,1);
table.remove(K,1);table.remove(L,1);table.remove(M,1);table.remove(N,1);table.remove(O,1);
table.remove(P,1);table.remove(Q,1);table.remove(R,1);table.remove(S,1);table.remove(T,1);
--Print_Table® Print_Table(S) Print_Table(T)
return A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T
end

 



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


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



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

COM интерфейс МаtLab в LUA

Так уж вышло, что пару дней назад я познакомился с терминалом QUICK и языком его скриптов — LUA

   Естественно, сразу возникла необходимость передать полный контроль над этим двумя сложнейшими приложениями чему-то более простому и понятному, например Матлабу, чтобы нажимая разноцветные кнопочки «Обыграть рынок» и «Что там опять у волатильности?» оставить конечному пользователю, то есть мне, только наслаждение от наблюдения за происходящим.


     Теоретически, для этого надо нанять менеджера COM из LUACOM.dll и дать ему в управление пару простых исполнителей — объектов LUA, чтобы высшее руководство МатЛаба могло эффективно распоряжаться ресурсами в иерархии 

 Руководство МатЛаб -> менеджер интерфейса  COM -> исполнитель  объект LUA 


       Но в силу каких-то неведомых причин (от сборки dll, до сборки MS Windows и даже предустановленного железа) сделать по теории управления с ходу не получилось, поэтому была использована альтернативная схема:

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

Вопрос к программистам...

При выключении скрипта lua, при его работе почти целый день, квик зависает напрочь. Что может быть такого в коде или проблема с кивком? Зависание наблюдается на крике 7 и 8 версии у двух разных брокеров.
  • обсудить на форуме:
  • Quik Lua

Упрощенный алгоритм индикатора zigzag

в дальнейшем в него встрою сигналы и наклонные уровни

Упрощенный алгоритм индикатора zigzag

--[[
параметры: 
Procent - процент зигзага 
--]]
Settings={
Name="ZIGZAGPROF",
Procent=1,
    line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 0)
                    }				
                }
}

function Init()
  
  y1 = nil
  y2 = nil
  x1 = 1
  x2 = 1
    
  return 1
  
end

function OnCalculate(index)

  de = Settings.Procent

  vl = C(index)
  if index == 1 then 
	y1 = vl
    y2 = vl
  else   
	  if C(index) > y1*(1+de/100) and y1 < y2 then 
	    x2 = x1
	    y2 = y1	
	    x1 = index 
	    y1 = C(index)	        
	  end 	
	  if C(index) > y1 and C(index) > y2 then 
	    x1 = index 
	    y1 = C(index)	  			  
	  end 
	  	  		
	  if C(index) < y1*(1-de/100) and y1 > y2 then 
	    x2 = x1
	    y2 = y1
	    x1 = index 
	    y1 = C(index)	  		
	  end 	
	  if C(index) < y1 and C(index) < y2 then 
	    x1 = index 
	    y1 = C(index)	  			  
	  end 	  	  		
	end 	
  
  if x1 ~= index then 
    curfrom = x1
	curto = index
  else 
    curfrom = x2
	curto = x1
  end 
 
  if curto ~= curfrom and curfrom ~= nil and curto ~= nil then 
    if C(curto) ~= nil and C(curfrom) ~= nil then 
      k = (C(curto)- C(curfrom))/(curto- curfrom)  
      for i = curfrom, index  do
        curv = i*k + C(curto) - curto*k  		          
	    SetValue(i, 1, curv)
      end   	
	end 
  end 
  
  return vl
 
  
end


 

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

Куплю робота на LUA без блока индикаторов

    • 09 августа 2019, 09:24
    • |
    • Michael
  • Еще
Нужен робот на LUA, без блока индикаторов, «болванка». Было бы хорошо, если бы там была реализована схема динамического переноса стоп-лоссов
  • обсудить на форуме:
  • Quik Lua

Индикатор на базе объемов и цены, показывающий точки входа и выхода

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


Settings={
Name="VDIV",
period=20,
periodma=15,
    line=                                     
                {                               		
                    {  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0,0)
                    },				
                    {  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,0)
                    }
                }
}
--[[

-- кривая объемов
описание свойств:

period: сколько баров берутся в подсчет
weighted: =0 - обычная, =1 - взвешанная
proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open)

--]]

function Init()

  mas = {} 
  return 3
  
end

function OnCalculate(index)
  	

	  sumv1 = 0
	  sumv2 = 0


	if index >= Settings.period then 
	  for i=index-Settings.period+1, index do    
	    if V(i) ~= nil and C(i) ~= nil then
	      if C(i) > O(i) then
		    sumv1 = sumv1+V(i)*(C(i) - O(i))
	      else
		    sumv2 = sumv2+V(i)*(O(i) - C(i))	
	      end
        end 
	  end 
	else
	  sumv1 = nil	
	  sumv2 = nil
	end	
	
	if sumv2 ~= 0 and sumv2 ~= nil then 
	  vdiv = sumv1/sumv2
	  vdiv2 = sumv2/sumv1
	  vdiv3 = vdiv - vdiv2
	else	
	  vdiv = nil
	  vdiv2 = nil
	  vdiv3 = nil
	end
	
	mas[index] = vdiv3
	
	ma = 0
	if index >= Settings.periodma then 
	  for i=index-Settings.periodma+1, index do    
	    if mas[i] ~= nil then		  
          ma = ma + mas[i]			
		end 
	  end
	end  
    ma = ma/Settings.periodma		
	
  return ma, 0


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

Другой вариант кривой объемов со средней

пересечение двух линий является сигналом
Другой вариант кривой объемов со средней


Settings={
Name="VCUR",
period=20,
periodma=20,
weighted=1,
proportional=1,
    line=                                     
                {                               
                    {  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(155,0, 0)
                    },	
                    {  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,155)
                    },						
                    {  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    }					
                }
}
--[[

-- кривая объемов
описание свойств:

period: сколько баров берутся в подсчет
weighted: =0 - обычная, =1 - взвешанная
proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open)

--]]

function Init()
    
  mas={}	
  return 3
  
end

function OnCalculate(index)
  	
	--sumv = 0
	if index >= Settings.period then 
	  for i=index-Settings.period-1, index do    
        if sumv == nil then
	      sumv = 0
        end	  
	    if C(i-1) ~= nil then
	      if C(i-1) > O(i-1) then
		    if Settings.proportional == 0 then
		      prop = 1
			else
			  if (H(i-1)-L(i-1)) == 0 then
			    prop = 0
			  else
			    prop = (C(i-1)-O(i-1))/(H(i-1)-L(i-1))
			  end
			end
		    if Settings.weighted == 0 then
              sumv = sumv + prop*V(i-1)
			else
			  sumv = sumv + prop*V(i-1)*(i-(index-Settings.period))/Settings.period
			end
	      else
            if Settings.proportional == 0 then
		      prop = 1
			else
              if (H(i-1)-L(i-1)) == 0 then
			    prop = 0
			  else			
			    prop = (O(i-1)-C(i-1))/(H(i-1)-L(i-1))
			  end
			end	  
		    if Settings.weighted == 0 then
              sumv = sumv - prop*V(i-1)
			else
			  sumv = sumv - prop*V(i-1)*(i-(index-Settings.period))/Settings.period
			end
	      end
        end 
	  end 
	else
	  sumv = nil
	end
	mas[index]=sumv
	
	ma = 0
	if index >= Settings.periodma then 
	  for i=index-Settings.periodma+1, index do    
	    if mas[i] ~= nil then
	      ma = ma + mas[i]
		end 
	  end
	end  
	ma = ma/Settings.periodma	
     
  return sumv, ma, 0


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

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