Lua советник

Страницы: 1
RSS
Lua советник
 
Добрый день,
---------------------------
Пример простого, универсального советника на луа на основе любых индикаторов.
------------------------------
Советник - это программа,
которая формирует сигналы "купить/продать" и показывает их, но не совершает сделки.
---------------------
Пример на основе  стратегии  пересечения двух скользящих средних.
Помещаем два индикатора на график цены инструмента
Присваиваем им идентификаторы MOV1 и MOV2  как на рисунке:

   

далее  пишем индикатор  "nk_bot"
Код
Settings={ i1="MOV2",i2="MOV1", Name = 'nk_bot', }
------------------
local function gI(s,j,i)
 local t=getCandlesByIndex(s,j,i-1,1); if t then return t[0].close; else return 0 end
end --значение индикатора
-------------------------
local function cross(s1,j1,s2,j2,i)
   local m=i; local x= gI(s1,j1,m) local x1=gI(s2,j2,m);
    while m>1 and x~=0 and x1~=0 and x>x1 do m=m-1; x=gI(s1,j1,m); x1=gI(s2,j2,m) end
    if m>1 and i>m then return m end
end  --пересечение
--------------------------
function OnCalculate(i)
   local Bu,Se; local i1=i-1;
   if i>1 then
      local jU_,jD_=jU,jD;
      jU=cross(Settings.i1,0,Settings.i2,0,i1); --MOV1 пересекает MOV2 снизу вверх
      jD=cross(Settings.i2,0,Settings.i1,0,i1); --MOV1 пересекает MOV2 сверху вниз
      if jU and jU_==nil then jBu=i; Bu=L(i)-0.1; end
      if jD and jD_==nil then jSe=i; Se=H(i)+0.1; end
      if i==Size() then  -- последняя свеча
      end
   end
return Se,Bu;
end
-----
function Init()
local t={};
   t[#t+1]={Name = "Se",Color = RGB(255,0,0),Type = 11,Width =3};   ---sell
   t[#t+1]={Name = "Bu",Color = RGB(0,255,0),Type = 10,Width =3};   ---buy
Settings.line=t;
return #t;
end

и помещаем его на график инструмента
В результате получим на истории торгов сигналы "купить/ продать" на графике инструмента

---------------------
На основе данного примера  Вы можете построить советник для  любых индикаторов,
которые встроены в терминал КВИК  или написаны кем-то.
 
это картинки работы советника на Сбербанке.
второй график - индикатор прибыли(зеленый) убытков(красный) итого (белый)
--------------------
интервал 30 минут:

интервал 5 минут:
 
если кому-то нужен индикатор прибыли/убытков,
или есть пожелание, что надо добавить
пишите вежливо.
 
nikolz, доброго времени суток!
можно получить ваш индикатор прибыли/убытков?
 
Идея советника интересна, но вот приведенная стратегия не выдерживает критики

Ну если говорить о пересечении меньшим MA большего, то в теории это все работает и очень даже красиво, но вот на практике нет
Когда MA пересеклись, то уже поздно совершать сделку

Переделайте индикатор, чтобы он выдавал сигнал на сделку не на максимуме и минимуме свечи (что поймать практически нереально), а, например, на закрытии, и картина будет совершенно другая.
 
Цитата
nikolz написал:
Добрый день,
---------------------------
Пример простого, универсального советника на луа на основе любых индикаторов.
------------------------------
Советник - это программа,
которая формирует сигналы "купить/продать" и показывает их, но не совершает сделки.
---------------------
Пример на основе  стратегии  пересечения двух скользящих средних.
Помещаем два индикатора на график цены инструмента
Присваиваем им идентификаторы MOV1 и MOV2  как на рисунке:

     

далее  пишем индикатор  "nk_bot"
Код
  Settings = { i1 =  "MOV2" ,i2 =  "MOV1" , Name  =   'nk_bot' , }
 ------------------ 
 local   function   gI (s,j,i)
  local  t =  getCandlesByIndex (s,j,i -  1 , 1 );  if  t  then   return  t[ 0 ].close;  else   return   0   end 
 end   --значение индикатора 
 ------------------------- 
 local   function   cross (s1,j1,s2,j2,i)
    local  m = i;  local  x =  gI(s1,j1,m)  local  x1 = gI(s2,j2,m);
     while  m >  1   and  x~ =  0   and  x1~ =  0   and  x > x1  do  m = m -  1 ; x = gI(s1,j1,m); x1 = gI(s2,j2,m)  end 
     if  m >  1   and  i > m  then   return  m  end 
 end    --пересечение 
 -------------------------- 
 function   OnCalculate (i)
    local  Bu,Se;  local  i1 = i -  1 ;
    if  i >  1   then 
       local  jU_,jD_ = jU,jD;
      jU = cross(Settings.i1, 0 ,Settings.i2, 0 ,i1);  --MOV1 пересекает MOV2 снизу вверх 
      jD = cross(Settings.i2, 0 ,Settings.i1, 0 ,i1);  --MOV1 пересекает MOV2 сверху вниз 
       if  jU  and  jU_ =  =  nil   then  jBu = i; Bu = L(i) -  0.1 ;  end 
       if  jD  and  jD_ =  =  nil   then  jSe = i; Se = H(i) +  0.1 ;  end 
       if  i =  =  Size ()  then    -- последняя свеча 
       end 
    end 
 return  Se,Bu;
 end 
 ----- 
 function   Init ()
 local  t = {};
   t[ # t +  1 ] = {Name  =   "Se" ,Color  =   RGB ( 255 , 0 , 0 ),Type  =   11 ,Width  =  3 };    ---sell 
   t[ # t +  1 ] = {Name  =   "Bu" ,Color  =   RGB ( 0 , 255 , 0 ),Type  =   10 ,Width  =  3 };    ---buy 
Settings.line = t;
 return   # t;
 end 
  

и помещаем его на график инструмента
В результате получим на истории торгов сигналы "купить/ продать" на графике инструмента
   
---------------------
На основе данного примера  Вы можете построить советник для  любых индикаторов,
которые встроены в терминал КВИК  или написаны кем-то.
подскажите почему этот индикатор показывает метки на buy/sell не у графика, а с самого верху и низу, не могу понять, что не так ((
 
Цитата
Тони написал:
Цитата
nikolz написал:
Добрый день,
---------------------------
Пример простого, универсального советника на луа на основе любых индикаторов.
------------------------------
Советник - это программа,
которая формирует сигналы "купить/продать" и показывает их, но не совершает сделки.
---------------------
Пример на основе  стратегии  пересечения двух скользящих средних.
Помещаем два индикатора на график цены инструмента
Присваиваем им идентификаторы MOV1 и MOV2  как на рисунке:

     

далее  пишем индикатор  "nk_bot"  
Код
 
и помещаем его на график инструмента
В результате получим на истории торгов сигналы "купить/ продать" на графике инструмента
   
---------------------
На основе данного примера  Вы можете построить советник для  любых индикаторов,
которые встроены в терминал КВИК  или написаны кем-то.
подскажите почему этот индикатор показывает метки на buy/sell не у графика, а с самого верху и низу, не могу понять, что не так ((

У Вас сильно растянут масштаб по Y
Уберите  добавки в значениях сигналов
исправьте так:
Код
 if jU and jU_==nil then jBu=i; Bu=L(i); end
      if jD and jD_==nil then jSe=i; Se=H(i); end
Страницы: 1
Читают тему
Наверх