Данные с индикатора. Просто и быстро.

Страницы: 1
RSS
Данные с индикатора. Просто и быстро.
 
Тема для начинающих писателей роботов.
----------------------------
Ранее на форуме я рассказывал как построить робота-эксперта  на основе двух любых индикаторов отображаемых на графике.
https://forum.quik.ru/forum17/topic7630/
---------------------------
В этой теме поясню как читать данные с индикатора быстро и просто.
------------------------
Напишем пример скрипта индикатора, который считывает значения индикатора moving в массив t и выводит на график значения индикатора смещенные на 0.1 в виде зеленых треугольников .
---------------------------
При этом  сделаем так, чтобы индикатор не тратил время на считывание тиков, а читал значение индикатора один раз в момент появления новой свечи цены.

В моих роботах именно в этот момент и принимается решение о выставлении заявки.

Т е решение принимается в момент открытия новой свечи .
------------------------------  
Если робот будет торговать на интервала 30 минут, то чтение индикатора будет происходить всего 1 раз в 30 минут именно на открытии новой свечи.
Код
Settings={ tag="moving", Name = '*nk_test'}

function OnCalculate(i)
 if i==1 then  i1=0; t={};
 elseif i1~=i  then local M=getNumCandles (Settings.tag);  
    if M>=i then x=getCandlesByIndex(Settings.tag,0,i1,1); if x then t[#t+1]=x[0].close end  i1=i;  end
 end
 i1=i;  if #t>0 and t[#t]~=0 then  return t[#t]+0.1; end
end

function Init() 
local t={} Settings.line =t;
t[#t+1]={Name = "Bu",Color = RGB(0,255,0),Type = 10,Width = 3};
return #t;
end



это результат:
 
и еще...
Все существующие на графике свечи будут считаны в момент открытия графика.
Поэтому  в последующие моменты будет считываться лишь последняя закрытая свеча и только один раз.  
 
Теперь покажу простой скрипт-индикатор  торгового советника.  
Он реализует следующий алгоритм:  
-----------------------
Покупаем, если минимум свечи выше мувинга.
продаем, если максимум свечи  ниже мувинга.
---------------------
Чтение данных мувинга вынес в отдельную функцию.
Вот этот скрипт:  
Код
Settings={ tag="moving", Name = '*nk_test'}

function ind(i,tag,t)
  local M=getNumCandles (tag);  
  if M>=i then x=getCandlesByIndex(tag,0,i,1); if x then t[#t+1]=x[0].close end   end
  end

function OnCalculate(i)
local buy,sel;
  if i==1 then  i1=0; t={}; BS=0;
  elseif i1~=i  then  ind(i1,Settings.tag,t);  
      if #t>0 then  local x=t[#t];  if L(i)>x and 0>=BS then buy=L(i)-0.05; BS=1;  end  if x>H(i) and BS>=0 then sel=H(i)+0.05 BS=-1; end end
   end
  i1=i;  
 return buy,sel;
 end

function Init() 
local t={} Settings.line =t;
   t[#t+1]={Name = "Bu",Color = RGB(0,255,0),Type = 10,Width = 4};
    t[#t+1]={Name = "Se",Color = RGB(255,0,0),Type = 11,Width = 4};
   return #t; end

а это результат работы советника:
 
Теперь добавляю надписи в скрипт.
Код
Settings={ tag="moving", Name = '*nk_test'}
params={R=0,G=0,B=255,TRANSPARENCY=0,FONT_HEIGHT=10,TRANSPARENT_BACKGROUND= 1,FONT_FACE_NAME= 'Verdana'}

function ind(i,tag,t)
  local M=getNumCandles (tag);  
  if M>=i then x=getCandlesByIndex(tag,0,i,1); if x then t[#t+1]=x[0].close end   end
  end

function OnCalculate(i)
local buy,sel;
  if i==1 then  i1=0; t={}; BS=0;
  elseif i1~=i  then  ind(i1,Settings.tag,t);  
      if #t>0 then  local x=t[#t];  if L(i)>x and 0>=BS then  buy=L(i)-0.05; BS=1; params.TEXT="buy" 
      end  if x>H(i) and BS>=0 then   sel=H(i)+0.05 BS=-1; params.TEXT="sel" end end
      -----------------------------------
      if sel or buy then  
        local x=T(i); params.DATE=100*(100*x.year+x.month)+x.day; params.TIME=100*(100*x.hour+x.min)+x.sec;
       if buy then  params.YVALUE=buy-0.1 else  params.YVALUE=sel+0.1 end;
       Label=AddLabel(Settings.tag,params); 
      end
      -------------------------------
   end
  i1=i;  
 return buy,sel;
 end

function Init() 
local t={} Settings.line =t;
   t[#t+1]={Name = "Bu",Color = RGB(0,255,0),Type = 10,Width = 4};
    t[#t+1]={Name = "Se",Color = RGB(255,0,0),Type = 11,Width = 4};
   return #t; end
    
function OnDestroy ()  DelAllLabels(Settings.tag) end
получаем вот такой результат торгового советника:
 
Продолжение здесь:
https://forum.quik.ru/messages/forum17/message80774/topic9418/?result=new#message80774
Страницы: 1
Читают тему
Наверх