Найти в Дзене

Определяем среднюю цену по последним свечам.

Всем привет!

Ранее в этой статье мы рассматривали как можно прочитать информацию из свечей. По сути это является материалом для всевозможного анализа – построения индикаторов и прочего. Давайте сегодня начнем заниматься таким анализом, пусть и в упрощенном виде – посчитаем среднюю цену последних 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 свечей. Из них возьмем цены закрытия и объемы. Потом посчитаем среднюю, но не как среднюю арифметическую, а с учетом веса в виде объема. То есть формула нашей средней цены будет такая:

-2

, где

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

Скачать данный код

Пожалуй, на сегодня все. Всем пока. Пишите в комментариях – получилось ли запустить данный скрипт и получить данные средней цены.

Если Вы еще не подписаны на канал, то подписывайтесь – дальше будет интереснее.

=================================

Краткое содержание данного канала.

=================================