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

15 июня, 2020

Известно, что в торговом терминале 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

26 мая, 2019

При выходе из 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.
———————-
Успехов