Постов с тегом "Quik Lua": 239

Quik Lua


Горизонтальные объемы, последняя версия

Горизонтальные объемы, последняя версия
Settings={
Name="GVOL",
period=200,
maxline=20,
width=4,
count=50,
xshift=0,
vlm=1,
line={} 
}
--[[

описание свойств:

xshift - сдвиг по горизонтали
count - количество черточек по вертикали
period- сколько баров берутся в подсчет
maxline - количество баров для максимальной черточки
width - толщина черточки
vlm - 1-c учетом оъема 0-просто распределение без объема,

--]]

function Init()

    n=Settings.count  
	
    vol={}
    for j = 1, n do        
      vol[j]=0
      Settings.line[j] = {Color=RGB(192,192,192),Type=TYPE_LINE,Width=Settings.width}
      --for i=Size()-Settings.xshift-Settings.maxline, Size()-Settings.xshift do 	
	  for i=1, Size() do 	
	   SetValue(i, j, nil)
	  end 
    end  
    
  return Settings.count  
end

function OnCalculate(index)
    

 
  if (index < Size()-Settings.xshift)or(index > Size()-Settings.xshift) then
    return nil
  else  	   
  
    n=Settings.count  
	
    maxv=0
    maxc=0
    minc=9999 
         
    for i=Size()-Settings.xshift-Settings.period, Size()-Settings.xshift do  
       
      if C(i) ~= nil then         
        if maxc < C(i) then 
          maxc = C(i)      
        end        
        if minc > C(i) then 
          minc = C(i)      
        end
      end
            
    end   
     
    delta = (maxc - minc)/n
     
    for i=Size()-Settings.xshift-Settings.period, Size()-Settings.xshift do  
 
      for j = 1, n do 
       if C(i) ~= nil then      
        if (C(i) > minc + (j-1)*delta) and (C(i) <= minc + j*delta) then 
		  if Settings.vlm == 1 then
		    if V(i) ~= nil then
              vol[j]=vol[j]+V(i) 
            end 			
          else 		  
		    vol[j]=vol[j]+1
		  end
        end  
       end    
      end
            
    end   

    for j = 1, n do
	  vol[j] = math.floor(vol[j]+0.5)
      if maxv < vol[j] then 
        maxv = vol[j]
      end                
    end    
      

    k = 0 
    for i=Size()-Settings.xshift-Settings.maxline+1, Size()-Settings.xshift do  
      k = k + 1
      for j = 1, n do
        if vol[j] >= (Settings.maxline - k)*maxv/Settings.maxline then 
          SetValue(i, j, minc + j*delta)		  
        else  		
          SetValue(i, j, nil)
        end      
      end
    end
	  
     
  end


end


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

Раздаю x64 lua библиотеки для Quik8

    • 15 июля 2019, 10:06
    • |
    • П М
  • Еще
В рамках добра. 
Для тех кто любит плюшки на lua.
Пересобрал либины w32.dll и ffi.dll для Квика v8.0
ffi проверил на прилагаемом к ней тесте — работает, w32.dll не проверял, сами скажите если что не так.

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

Исходный код w32.dll не менялся вообще, у ffi я внёс минимальные изменения в заголовочный файл чтобы всё собралось.
Возможны некоторые косяки с изменением размера данных в w32.dll, ранее я ей никогда не пользовался. Проверяйте.
хотя судя по этой теме, проблем скорей всего вообще не будет, обрезать данные можно:
https://stackoverflow.com/questions/1822667/how-can-i-share-hwnd-between-32-and-64-bit-applications-in-win-x64

Исходники брал с гита.
ссылки:
ffi - 
www.dropbox.com/s/mqtpqyhi4b35lcq/ffi.dll?dl=1

w32 -
www.dropbox.com/s/1b6kb98uiad7pnc/w32.dll?dl=1
ps: собирал на windows 10, на более ранних скорее всего не взлетит у вас.
  • обсудить на форуме:
  • Quik Lua

Индикатор "Горизонтальные объемы"

пока первая версия, в ближайшие дни доработаю
Индикатор "Горизонтальные объемы"

регулируется параметрами:
Индикатор "Горизонтальные объемы"

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

bot.quikluacsharp.ru - позвольте представиться

bot.quikluacsharp.ru - позвольте представиться
   Много лет мы занимаемся автоматизацией торговли наших клиентов в терминале Quik, но до сих пор не представились на просторах SmartLab. Исправляемся:)
   Приглашаем Вас, особенно тех, кто с нами еще не знаком, посетить наш основной ресурс quikluacsharp.ru  и дополнительную страницу для приема заказов bot.quikluacsharp.ru для того, чтобы мы смогли узнать друг друга лучше.
   Вы всегда можете обратиться к нам за любой помощью. Те, кто нас давно знают, подтвердят, что мы всегда отвечаем на любые вопросы, которые Вы задаете в комментариях на нашем основном сайте, помогаем Вам как самостоятельно написать своего робота, так и берем выполнение этой задачи полностью на себя, делая это на должном уровне.
bot.quikluacsharp.ru - позвольте представиться

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

Учимся сами создавать торговые советники для Quik


С ЧЕГО НАЧАТЬ САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ?


Во первых, Вам потребуются удобные среды разработки (программы, где Вы сможете писать свой код), о том, где их взять и как установить прочтите здесь. Для написания скриптов QLua Вам понадобится только Notepad++.

Во вторых, получите терминал QUIK с демо-счетом, можете получить его либо в компании Arqa (разработчик терминала) по данной ссылке, либо у практически любого брокера.

И в третьих, начинайте изучать QLua.
Рекомендую начать с раздела меню «QLua(Lua) основы», в частности со статей: «База скрипта в QLua (lua)» и «Функции обратного вызова, встроенные в QLua», остальные статьи данного раздела используйте как справочники при написании скрипта, в них практически к каждой функции есть пример кода с комментариями.

Следующим шагом переходите к разделу меню «QUIK + QLua(Lua)», в нем речь идет о том, как взаимодействует скрипт с терминалом QUIK, как обменивается данными, все так же с примерами и комментариями. Особое внимание обратите на раздел «Блоки кода», в особенности на статью в нем: «Пример простого торгового движка „Simple Engine“ QLua(Lua)», разобрав код которой Вам многое станет понятнее, хоть по началу такой подход может показаться несколько сложным.



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

Коллеги, есть у кого-нибудь скрипт, позволяющий складывать значения нескольких индикаторов вместе?

 Необходимо сложить показания нескольких индикаторов по идентификаторам и вывести в виде графика. Может кто-то уже писал для себя? 

 Буду признателен, если поделитесь.
  • обсудить на форуме:
  • Quik Lua

Доработал zigzag5

работа индикатора заключается в том, чтоб показать ближашие горизонтальные уровни (один снизу, другой сверху) и один наклонный

Доработал zigzag5
код индикатора:
Settings=              
        {                          
            Name = "Zigzag5",   -- название индикатора
            delta=2,                  -- параметр индикатора                          
            deltaY=1,                  -- параметр индикатора   			
            linedeltaY=0.75,                  -- параметр индикатора   				
            line=                                     
                {                               
                    {  
                        Name = "zigzagline3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,255, 0)
                    },
                    {  
                        Name = "upline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
                    {  
                        Name = "declineline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "upline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 255)
                    },
                    {  
                        Name = "declineline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    }				
                }
       }
	
	
function getradius(x, y)
  return math.sqrt(Settings.deltaY*y*y+x*x)
end

function koef(val)
  return 1 - 1/(1-1/val)
end


function Init()

  vMin = 0
  vMax = 0
  vMinindex = 0
  vMaxindex = 0
  voldMinindex = 0
  voldMaxindex = 0
  upval = 0
  lowval = 0
  upindex = 1
  lowindex = 1  
  veu = nil
  vel = nil
  curfrom = 1
  curto = 1

  return 7
end


function OnCalculate(index)
  local printz = 0
  vsize = Size()	  

  ve = nil
  veu = nil
  vel = nil 
  curv = nil 
  veu2 = nil
  vel2 = nil 
  curv2 = nil  
  
  if index == 1 then
    vMin = C(index)
    vMax = C(index)
    vMinindex = index
    vMaxindex = index
    voldMinindex = index
    voldMaxindex = index
    ve = C(index)  
	  
  else
         
    if voldMaxindex >= voldMinindex then
        
       
	  if C(index) > (1 + Settings.delta/100)*vMin then
         
        vMin = C(index)  
        vMax = C(index) 
        vMaxindex = index
        voldMinindex = vMinindex 
        vFrom = voldMaxindex  
        vTo = vMinindex
        printz = 1		
		
        if (C(vMinindex) > C(vsize)) and (upval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
		  upval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
		  upindex = vMinindex
		end
        if (C(vMinindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
		  lowval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
		  lowindex = vMinindex
	   end	
	   
	    curfrom = voldMaxindex
	    curto = voldMinindex	  	   
	      	    
      else      
	  
        if vMin > C(index) then
          vMin = C(index)
          vMinindex = index
          vFrom = voldMaxindex      
          vTo = index
          printz = 0
		  curto = index		
        else
          vFrom = vMinindex 
          vTo = index
          printz = 0
        end 		
	  
	    curfrom = voldMaxindex	
		
      end
	 
 	 
    else
     
    if voldMaxindex <= voldMinindex then
	  
      if C(index) < (1 - Settings.delta/100)*vMax then
	     	  
        vMax = C(index) 
        vMin = C(index)  
        vMinindex = index
        voldMaxindex = vMaxindex
        vFrom = voldMinindex
        vTo = vMaxindex
        printz = 1
	
        if (C(vMaxindex) > C(vsize)) and (upval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
		  upval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
		  upindex = vMaxindex
		end                   
        if (C(vMaxindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
		  lowval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
		  lowindex = vMaxindex
		end		
		
	    curfrom = voldMinindex		
	    curto = voldMaxindex
		
      else 
	    	    
        if vMax < C(index) then
          vMax = C(index)
          vMaxindex = index
          vFrom = voldMinindex    
          vTo = index
          printz = 0
		  curto = index		
        else  
          vFrom = vMaxindex  
          vTo = index        
          printz = 0
        end
		
	    curfrom = voldMinindex
		
      end  

	
    end
    end
 
    if (printz == 1) or (Size() == index) then
      for i = vFrom, vTo do
        k = (C(vTo)- C(vFrom))/(vTo- vFrom)
        v = i*k + C(vTo) - vTo*k
        SetValue(i, 1, v)
        ve = v
      end   
      if (Size() == index) then
        ve = C(index)
        if voldMaxindex >= voldMinindex then
          vFrom = voldMaxindex 
          vTo = vMinindex
        end 
        if voldMaxindex <= voldMinindex then  
          vFrom = voldMinindex
          vTo = vMaxindex
        end 
        for i = vFrom, vTo do
          k = (C(vTo)- C(vFrom))/(vTo- vFrom)
          v = i*k + C(vTo) - vTo*k
          SetValue(i, 1, v)
        end  
           
        -- up level line 
        if upindex ~= nil then
		  if C(upindex) > C(index) then		
            for i = upindex, index do
              SetValue(i, 2, C(upindex))
              SetValue(i, 5, C(upindex)-Settings.linedeltaY*C(vsize)/100)			  
            end  	
            veu = C(upindex)	
          end 		  
		end
		
		-- low level line 
		if lowindex ~= nil then
		  if C(lowindex) < C(index) then
            for i = lowindex, index do
              SetValue(i, 3, C(lowindex))
              SetValue(i, 6, C(lowindex)+Settings.linedeltaY*C(vsize)/100)				  
            end  			
            vel = C(lowindex)
         end
       end		
        
       if voldMaxindex >= voldMinindex then     
	    vsign = -1
		if curfrom == voldMinindex then
		  vsign = -1
		end
		if curfrom == voldMaxindex then
		  vsign = 1
		end		

        -- inclined line
	    if curto- curfrom > 0 then
	     maxcurv = 0
	     k = (C(curto)- C(curfrom))/(curto- curfrom)
         for i = curfrom, curto  do        
          curv = i*k + C(curto) - curto*k	
          if vsign == -1 then  		  
 		    if L(i) < curv then
		      if maxcurv < curv - L(i) then
		        maxcurv = curv - L(i)
              end
            end
		  else
 		    if H(i) > curv then
		      if maxcurv < H(i) - curv then
		        maxcurv = H(i) - curv
              end
            end		  
		  end
         end   		
         for i = curfrom, index  do
          curv = i*k + C(curto) - curto*k + vsign*maxcurv	  
          SetValue(i, 4,curv)
		  curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
		  SetValue(i, 7,curv2)		  
         end   		
	    end
	    curv = nil	
	   end 
	  
       if voldMaxindex <= voldMinindex then
	    vsign = -1
		if curfrom == voldMaxindex then
		  vsign = 1
		end		
		if curfrom == voldMinindex then
		  vsign = -1
		end			
  
        -- inclined line
        if curto- curfrom > 0 then
         maxcurv = 0
         k = (C(curto)- C(curfrom))/(curto- curfrom)
         for i = curfrom, curto  do        
          curv = i*k + C(curto) - curto*k		  
          if vsign == -1 then  		  
 		    if L(i) < curv then
		      if maxcurv < curv - L(i) then
		        maxcurv = curv - L(i)
              end
            end
		  else
 		    if H(i) > curv then
		      if maxcurv < H(i) - curv then
		        maxcurv = H(i) - curv
              end
            end		  
		  end
         end   		
         for i = curfrom, index  do
          k = (C(curto)- C(curfrom))/(curto- curfrom)
          curv = i*k + C(curto) - curto*k + vsign*maxcurv	  		
          SetValue(i, 4,curv)
		  curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
		  SetValue(i, 7,curv2)
         end   		     
        end
	    curv = nil		
       end	  
	          
      end
    end

  end  
  
  return ve, veu, vel, curv, veu2, vel2, curv2  
  
end



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

zigzag5 переработал алгоритм горизонтальных уровней

zigzag5 модернизировал чтоб горизонтальные уровни рисовались более интеллектуально

zigzag5 переработал алгоритм горизонтальных уровней
zigzag5 переработал алгоритм горизонтальных уровней

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

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