Автор: Kamynin

  • QUIK. LUA. Свой Индикатор

    Известно, что в торговом терминале QUIK есть встроенные индикаторы и есть возможность написать собственный индикатор на языке программирования LUA.

    Сравнительно просто написать индикатор на основе параметров свечи либо используя данные с графика другого индикатора.

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

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

    В данной заметке выкладываю пример создания собственного индикатора в торговом терминале QUIK на основе любых параметров с возможностью сохранения истории индикатора для дальнейшего отображения либо использования в торговых роботах.

    Обобщенный алгоритм построения такого индикатора следующий:

    Скрипт индикатора условно разделяется на две части.

    В первой его части function param() рассчитываем наш индикатор.

    Во второй части function OnCalculate(i) обеспечиваем сохранение значений индикатора в файле и отображение на графике.

    Пример такого индикатора, который рассчитывает отношение спроса и предложения.

    name="nk_BID_OFFER"
    Settings={}; Settings.Name =name; Settings.line ={};
    -----------------
    function param()
    pr1=tonumber(getParamEx (clas,sec,"NUMBIDS").param_value); 
    pr2=tonumber(getParamEx (clas,sec,"NUMOFFERS").param_value);
    if pr2 and pr1 and pr2~=0 then x_par=0.001*math.floor(1000*pr1/pr2);end
    end
    -----------------
    function OnCalculate(i)
    local size=Size(); local Ti=T(i);
    DT=100*(100*(Ti.year-2000)+Ti.month)+Ti.day;
    TT=100*(100*Ti.hour+Ti.min)+Ti.sec;
    if i==1 then
     local tinfo=getDataSourceInfo();
     cl,se,int=tinfo.class_code,tinfo.sec_code,tinfo.interval;
     path=getScriptPath().."/"..cl..se.."_"..int.."_"..name;  
       i_old=0;
    else
     local fn=path..DT..".txt";
     if DT~=D_old then 
      if file then file:close(); end
      file=io.open(fn,"r+"); 
      if file then file:seek("cur"); s_ind=file:read(); end
    end
     x_par=nil;
     if size>i then
      if s_ind then 
       local t={}; for s1 in string.gmatch(s_ind,"%S+") do 
           t[#t+1]=tonumber(s1); end
         if TT and #t>0 and TT>=t[1] then x_par=t[2]; 
              s_ind=file:read(); end
      end
    else
      if file==nil then file=io.open(fn,"w"); file:close();
      file=io.open(fn,"r+"); end
     param();
    if x_par and i_old~=i and x_par>0 then
     local s=tostring(TT).." ".. tostring(x_par).."\n";
     if file then file:seek("end"); end
     file:write(s);  file:flush(); end
    end
    end
    D_old=DT;T_old=TT;x_old=x_par; i_old=i;
    if x_par then
       if x_par>1 then return x_par else return nil,x_par end
    end
    end
    ----------------
    function Init()
    local t=Settings.line;
    t[#t+1]={Name= "x1",Color=RGB(0,255,0),Type =4,Width = 2}
    t[#t+1]={Name= "x2",Color=RGB(255,0,0),Type = 4,Width =2}
     return #t
    end
    ---------------
    function OnDestroy () if file then file:close(); end end

    Данный скрипт создает файл в каталоге индикаторов и пишет в него время и значение индикатора.

    Если значение индикатора больше 1, то его цвет на графике будет зеленый, иначе -красный.

    Пример индикатора на графике (третье окно сверху).

  • ESP8266 depp-sleep. Super fast wifi

    При выходе из depp-sleep возможны три варианта подключения к WiFi и передачи сообщений. 
    ———————
    1) логин и пароль — новые значения. 
    Время подключения и передачи сообщения UDP 4 секунды.
    ———————-

    2) логин,пароль и IP сохраняем в RTC. 
    Время подключения и передачи сообщения UDP 1.2 секунда.
    ———————-

    3) логин, пароль, IP сохраняем в RTC и отключаем dhcpc. 
    Время подключения и передачи сообщения UDP 0.3 секунды.
    ============= 
    Время рассчитывается с учетом интервала начального старта, 
    который составляет в стандартном boot 0.12 секунды.
    Если переписать загрузчик rboot,то время можно еще сократить дополнительно на 0.04-0.06 секунды.
    Сейчас у меня получается 0.26 секунды.
    ==================
    Теперь вы можете уменьшить время активности своих устройств и увеличить время работы от батарейки в 3 раза, если у вас вариант 2, или в 13 раз, если у вас реализован вариант 1.
    ———————-
    Успехов