Найти в Дзене
1 подписчик

Используем этот пример для написания торгового робота.

Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра индекс свечи и возвращают соответствующее значение.

Первое что сделаю, перепишу функцию для себя.
Для расчета МА использую функцию O(idx).
Переменная APeriodMA[idx] хранит расчетные значения МА для каждого бара.

Settings={}
Ssettings.name= "*RobotMA"
Settings.B_PeriodMA = "1"

function Init()
 return 8
end

function MyInit()
 APeriodMA = {}
 APeriodMA[0] = 0
 APeriodMA[1] = 0

 PeriodMA = Settings.B_PeriodMA+0
end

function OnCalculate(idx)
 if idx == 1 then
  MyInit()
 end

 APeriodMA[idx] = APeriodMA[idx-1]

 if idx >= PeriodMA then
  mSum = 0
  if idx == PeriodMA then
   for i = 0, PeriodMA-1, 1 do
   mSum = mSum + O(idx - i)
   end
   APeriodMA[idx] = mSum/PeriodMA
  end
  if idx > PeriodMA then
   APeriodMA[idx] = APeriodMA[idx-1] - O(idx-PeriodMA)/PeriodMA + O(idx)/PeriodMA
  end
 end

 if idx >= PeriodMA then
  return APeriodMA[idx]
 end
end

Если в папке QUIK нет папки LuaIndicators, то нужно ее создать.
В ней создать файл, скопировать текст.
Около минуты