slukin (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Индикатор Squeeze Momentum Indicator, Прошу помощи по перекодировки индикатора в луа для Квик
 
Squeeze Momentum Indicator lua
Индикатор Squeeze Momentum Indicator, Прошу помощи по перекодировки индикатора в луа для Квик
 
Код
function Init()
    indicator:name("Squeeze Momentum Indicator");
    indicator:description("");
    indicator:requiredSource(core.Bar);
    indicator:type(core.Oscillator);   
   indicator.parameters:addGroup("Calculation"); 
    indicator.parameters:addInteger("lengthKC", "KC Length", "", 20, 2, 2000);
    indicator.parameters:addGroup("Style");    
    indicator.parameters:addColor("Up", "Up Color", "", core.#00ff00);
    indicator.parameters:addColor("Down", "Down Color", "", core.#ff0000);
   indicator.parameters:addColor("Neutral", "Neutral Color", "", core.#808080);
end
-- Indicator instance initialization routine
-- Processes indicator parameters and creates output streams
-- Parameters block
local first;
local source = nil;
local MA, Average,Raw;
local Alert;  
local close_local_up, local_ex_up;
local close_local_dn,local_ex_dn;
local val;
local lengthKC;
local Up,Down,Neutral;
-- Routine
 function Prepare(nameOnly)   
    lengthKC= instance.parameters.lengthKC;
    local name = profile:id() .. "(" ..  instance.source:name() .. ", " ..  lengthKC .. ")";
    instance:name(name); 
    Up= instance.parameters.Up;
   Down= instance.parameters.Down;
   Neutral= instance.parameters.Neutral;
    if   (nameOnly) then
        return;
    end
   close_local_up = instance:addInternalStream(0, 0);
   local_ex_up = instance:addInternalStream(0, 0);
    close_local_dn = instance:addInternalStream(0, 0);
   local_ex_dn = instance:addInternalStream(0, 0);
   val = instance:addInternalStream(0, 0); 
   MA= instance:addInternalStream(0, 0); 
   Average= instance:addInternalStream(0, 0);
   Raw = instance:addInternalStream(0, 0);
    source = instance.source;
    first=source:first()+lengthKC; 
   Alert = instance:addStream("Alert" , core.Bar, " Alert"," Alert",instance.parameters.Neutral, first+lengthKC);
    Alert:setPrecision(math.max(2, instance.source:getPrecision()));
end
-- Indicator calculation routine
function Update(period, mode)   
    if period < first then
   return;
   end
    MA[period]=  mathex.avg(source.close, period-lengthKC+1, period);
    Average[period] = ((source.high[period]+source.low[period])/2 + MA[period])/2;    
   Raw[period]= source.close[period]-Average[period];   
    if period < first+lengthKC then
   return;
   end   
   val[period] =mathex.lreg (  Raw, period-lengthKC+1,period);   
   if(val[period]>0 and val[period]<val[period-1] and val[period-1]>val[period-2]) then
   local_ex_up[period]= val[period]
   else
   local_ex_up[period]=local_ex_up[period-1]
    end      
     if val[period]>0 and val[period]<val[period-1] and val[period-1]>val[period-2] then
    close_local_up[period]=source.close[period]
    else
    close_local_up[period]=close_local_up[period-1]
    end 
     if val[period]<0 and val[period]>val[period-1] and val[period-1]<val[period-2] then
    local_ex_dn[period]=val[period]
     else
    local_ex_dn[period]=local_ex_dn[period-1] 
    end
     if val[period]<0 and val[period]>val[period-1] and val[period-1]<val[period-2] then
    close_local_dn[period]=source.close[period]
    else
    close_local_dn[period]=close_local_dn[period-1] 
    end      
   if (close_local_up[period]>close_local_up[period-1] and local_ex_up[period-1]>local_ex_up[period])  then
   dn_sg=true;
   else
   dn_sg=false;
   end      
    if (close_local_dn[period]>close_local_dn[period-1] and local_ex_dn[period-1]>local_ex_dn[period]) then
   dn_sg_custom=true;
   else
   dn_sg_custom=false;
   end   
     if (close_local_dn[period]<close_local_dn[period-1] and local_ex_dn[period-1]<local_ex_dn[period]) then
    up_sg=true;
     else
    up_sg=false;
    end    
    if (close_local_up[period]<close_local_up[period-1] and local_ex_up[period-1]<local_ex_up[period]) then
    up_sg_custom=true;
    else
    up_sg_custom=false;
    end   
   if dn_sg or dn_sg_custom or up_sg or up_sg_custom then   
    Alert[period]=1;
   else
   Alert[period]=0;
   end   
   if( val[period] >val[period-1]) then
   Alert:setColor(period, Up);
   elseif( val[period] < val[period-1]) then
   Alert:setColor(period, Down);
   else
   Alert:setColor(period, Neutral);
   end              
end
Quik + Python
 
Работа с QUIK из стороннего приложения на Python
https://forum.quik.ru/messages/forum1/message34644/topic4031/#message34644

RPC-сервис для вызова API Lua-библиотеки торгового терминала QUIK (ARQA Technologies)
https://github.com/Enfernuz/quik-lua-rpc

Коннектор к торговому терминалу ARQA QUIK (Квик), который делает доступным весь функционал QLUA из Python
https://github.com/finsight/QUIKSharp/blob/master/quiksharp_qlua_python_soc­­ket_client.py
https://github.com/finsight/QUIKSharp/issues/189
Работа с QUIK из стороннего приложения на Python
 
Коннектор к торговому терминалу ARQA QUIK (Квик), который делает доступным весь функционал QLUA из Python
https://github.com/finsight/QUIKSharp/blob/master/quiksharp_qlua_python_soc­ket_client.py
https://github.com/finsight/QUIKSharp/issues/189
Работа с QUIK из стороннего приложения на Python
 
RPC-сервис для вызова API Lua-библиотеки торгового терминала QUIK (ARQA Technologies)

https://github.com/Enfernuz/quik-lua-rpc
Как выводить данные из Quik для анализа?
 
RPC-сервис для вызова API Lua-библиотеки торгового терминала QUIK (ARQA Technologies)
https://github.com/Enfernuz/quik-lua-rpc
Страницы: 1
Наверх