Всем привет!
Ранее в этой статье мы рассматривали как можно прочитать информацию из свечей. По сути это является материалом для всевозможного анализа – построения индикаторов и прочего. Давайте сегодня начнем заниматься таким анализом, пусть и в упрощенном виде – посчитаем среднюю цену последних N свечей. Я в своих скриптах использую такой подход для того чтобы не входить в позиции, если текущая цена выше среднего за последние семь дней.
Напомню, что скрипт чтения свечей был такой:
function main()
CLASS_CODE = "QJSIM";
SEC_CODE = "SBER"--Код бумаги
data=CreateDataSource(CLASS_CODE,SEC_CODE,INTERVAL_M5);
data:SetEmptyCallback()
i=0;
while ((i<100)and((data:Size()==0)))do --ожидаем получения данных по свечам.
i=i+1
sleep(100);
end
if (data)then --данные свечи получены.
local count_svechei = data:Size() -- узнаем количество свечей.
message("Свечи получены. Количество свечей - "..count_svechei);
for i=1,count_svechei do
local open_current_svechi = data:O(i)
local hi_current_svechi = data:H(i)
local low_current_svechi = data:L(i)
local close_current_svechi = data:C(i)
local volume_current_svechi = data:V(i)
message("Данные по свече № "..i..": Открытие: "..open_current_svechi.."; Максимум: "..hi_current_svechi.."; Минимум: "..low_current_svechi.."; Закрытие: "..close_current_svechi.."; Объем:"..volume_current_svechi);
end
else
message("Данные свечей не получены!");
end
end
Давайте определимся, что мы будем ориентироваться только на цены закрытия. Такой подход практикуется, например, при расчете плавающей средней.
Итак, что мы сделаем в нашем скрипте. Прочитаем данные свечей, возьмем последние N свечей. Из них возьмем цены закрытия и объемы. Потом посчитаем среднюю, но не как среднюю арифметическую, а с учетом веса в виде объема. То есть формула нашей средней цены будет такая:
, где
P - средняя цена.
Pi - цена закрытия очередной цены;
Vi - объем по очередной цене.
То есть сумму произведений цены на объем мы поделим на сумму объемов.
Вот такая реализация получится:
function main()
CLASS_CODE = "QJSIM";
SEC_CODE = "LKOH"--Код бумаги
N = 10 --по скольки свечам будем определять среднюю.
data=CreateDataSource(CLASS_CODE,SEC_CODE,INTERVAL_M5);
data:SetEmptyCallback()
i=0;
while ((i<100)and((data:Size()==0)))do --ожидаем получения данных по свечам.
i=i+1
sleep(100);
end
if (data)then --данные свечи получены.
local count_svechei = data:Size() -- узнаем количество свечей.
message("Свечи получены. Количество свечей - "..count_svechei);
summ_umnozhen_price_na_volume = 0; -- сюда положим сумму произведений цен на объем.
summ_volume = 0; -- сюда положим сумму объемов.
for i=count_svechei,(count_svechei - N + 1),-1 do --проходимся по свечам от последней. Всего N свечей рассматриваем.
local close_current_svechi = data:C(i)
local volume_current_svechi = data:V(i)
message("Данные по свече № "..i.." Закрытие: "..close_current_svechi.."; Объем:"..volume_current_svechi);
summ_umnozhen_price_na_volume = summ_umnozhen_price_na_volume + close_current_svechi * volume_current_svechi; -- суммируем произведение цены на объем.
summ_volume = summ_volume + volume_current_svechi;
end
ave_price = summ_umnozhen_price_na_volume / summ_volume; -- рассчитываем среднюю цену.
message ("Средняя цена по последним "..N.." свечам составляет "..ave_price);
else
message("Данные свечей не получены!");
end
end
Пожалуй, на сегодня все. Всем пока. Пишите в комментариях – получилось ли запустить данный скрипт и получить данные средней цены.
Если Вы еще не подписаны на канал, то подписывайтесь – дальше будет интереснее.
=================================
Краткое содержание данного канала.
=================================