Підрахунок спреда (сторінка 1) - lua підручники, загальні питання - quik - dde

Тема: Підрахунок спреда

Допоможіть будь ласка з написанням скрипта на Луа, який би обчислював середньодобовий спред з тих чи інших паперів.
Працювати він повинен за таким алгоритмом:

1. Задається список що відслідковуються паперів. Наприклад, "GAZP, RASP, LKOH, TGKE"
2. Раз в проміжок часу (наприклад 10 хвилин) по ним підраховується спред по формулі (ask-bid) * 100 / bid і записується в файл.
3. У міру накопичення значень у файлі (або одного разу в кінці дня) по кожному паперу вважається середнє арифметичне її спреда і виводиться куди-небудь, наприклад в сусідній файл.

Буду дуже вдячний за будь-яку допомогу!

"Раз в проміжок часу (наприклад 10 хвилин) по ним підраховується спред" - в сенсі цікавлять лише ті значення, які були 1 раз в ці 10 хвилин? тобто просто в якийсь момент взяли спред і його запам'ятали? Або всі ці 10 хвилин спред теж повинен якось усереднюють за всіма значеннями взагалі? не зрозуміло з опису.

Усередині цього часу підрахунок не веде.
Раз в 10 хвилин робиться зріз. І так весь торговий день.
10 хвилин - це опція, час можна збільшувати або зменшувати.

Re: Підрахунок спреда

по кожному паперу вважається середнє арифметичне її спреда і виводиться куди-небудь, наприклад в сусідній файл.

або в таблицю в самому Квік.

Також було б здорово навчити цей скрипт відстежувати екстремальні значення:
-найширший спред за торговий день
-найвужчий спред за торговий день.

Re: Підрахунок спреда

Викладу то що є, чуь пізніше кілька доповню.

Спочатку файлу константи, їх необхідно поставити відповідні вам.

Результати пишуться в файл. Поки мається на увазі що скрипт буде працювати весь день, при перезапуску почне все розраховувати спочатку. Через деякий час доповню його так, щоб при старті він зчитував свій же вихідний файл і, таким чином, отримував попередні дані за день.

Обмеження і умови використання:

задається папір і клас, але все тікери повинні бути різні;

склянки для інструментів, за якими здійснюється моніторинг, повинні бути відкриті; якщо тскан не відкрито - спред НЕ моніториться і не логіруется;

якщо стакан порожній або в ньому є тільки попит або тільки пропозиція - спред по такому інструменту не логіруется.

Зберігаємо текст в файл spread-logger-1.lua і запускаємо. Вихідні дані будуть записуватися в файл spread-logger-1.lua.log в тому ж каталозі, звідки запущений скрипт.

Рядки вихідного файлу зараз зберігаються в такому форматі:

Питання, пропозиції, претензії - пишіть, не соромтеся.

Re: Підрахунок спреда

Можливість коректного рестарту скрипта всередині дня (зі зчитуванням раніше накопичених даних з файлу) актуальна?
Візуалізація (табличка) - потрібна? (в якому вигляді)

З приводу рестарту було б непогано.
Табличка. якщо вийде. Але все і так зрозуміло з файлу.
Ще дуже цікаво щоб скрипт видавав екстремальні значення - найменший і самий широкий спред за той час що він спостерігав цю акцію.
І щоб міг моніторити паперу з різними кодами класу з одного скрипта.

Re: Підрахунок спреда

Рестарт з читання з балки так і не зроблений. Треба подумати що для етго потрібно, достатньо наявних даних.

Для коректного рестарту з балки необхідна інформація:
1) Час запису спреда (щоб можна було соблудать періодичність, якщо це критично)
2) Тикер інструменту і клас
3) Кількість збережених спредів (скільки було записів по цьому інструменту)
4) Поточне нарахована середнє

Якщо всі ці дані буду вам заважати використанню даних для подальшої обробки, то цілком можна вчинити так: один лог-файл (назвемо технічний) пишеться для того, щоб можна було робити рестарт, другий Пішель в зручному вам форматі.

Re: Підрахунок спреда

-- local qt = getQuoteLevel2 (class, sec) - прибираємо виклик до склянки
-- if ((qt.bid_count + 0> 0) and (qt.offer_count + 0> 0)) then - прибираємо перевірку умови
-- local bid = qt.bid [qt.bid_count + 0] .price - прибираємо отримання біда зі склянки
-- local offer = qt.offer [1] .price - прибираємо отримання аска зі склянки

local bid = getParamEx (class, sec, "bid")
local offer = getParamEx (class, sec, "offer")

local p_spread = (offer - bid) / bid * 100

local key = sec. ":". class
local elem = spreads [key]
if elem == nil then
spreads [key] =
elem = spreads [key]
else
elem.Spread = p_spread
elem.Avr = (elem.Avr * elem.Count + p_spread) / (elem.Count + 1)
elem.Count = elem.Count + 1
if elem.Min> p_spread then elem.Min = p_spread end
if elem.Max end

file: write ( "AVR_". sec. "=". tostring (elem.Avr). "". "\ n")
file: write ( "[". tostring (elem.Count). "]". sec. ":". class. "=". tostring (p_spread). "avr =". tostring (elem.Avr). "min = ". tostring (elem.Min)." max = ". tostring (elem.Max)." \ n ")

-- end - прибираємо фінал перевірки умови

Re: Підрахунок спреда

У мене інструменти задані в такому порядку:

SEC [ "APTK"] = "EQNL"
SEC [ "AVAZP"] = "EQNL"
SEC [ "BSPB"] = "EQNL"
SEC [ "GAZP"] = "EQNE"
SEC [ "HYDR"] = "EQBR"
SEC [ "KMAZ"] = "EQBS"
SEC [ "LKOH"] = "EQBR"
SEC [ "LSNG"] = "EQNL"
SEC [ "MAGN"] = "EQNL"
SEC [ "MRKK"] = "EQNL"
SEC [ "MSRS"] = "EQBR"
SEC [ "OGKB"] = "EQBR"
SEC [ "OPIN"] = "EQNL"
SEC [ "RASP"] = "EQNL"
SEC [ "RTKM"] = "EQBR"
SEC [ "SBER"] = "EQBR"
SEC [ "SNGS"] = "EQNL"
SEC [ "SNGSP"] = "EQNL"
SEC [ "SYNG"] = "EQNL"
SEC [ "TGKA"] = "EQBR"
SEC [ "TGKE"] = "EQNL"
SEC [ "TGKF"] = "EQNL"
SEC [ "TRMK"] = "EQBR"
SEC [ "URKA"] = "EQBR"
SEC [ "VTBR"] = "EQNL"
SEC [ "VZRZ"] = "EQBS"

Чому в підсумковому файлі вони йдуть вроздріб?

AVR_APTK = 0.2068627406292
AVR_OGKB = 0.16652977902568
AVR_VZRZ = 0.32100360912737
AVR_RASP = 0.11919033845793
AVR_URKA = 0.058398588662547
AVR_LKOH = 0.024594674588463
AVR_AVAZP = 0.27888853122047
AVR_SNGSP = 0.05923011085541
AVR_LSNG = 0.70180301215612
AVR_TGKE = 0.53887543384184
AVR_TGKA = 0.32988383264019
AVR_TRMK = 0.44494026965039
AVR_MSRS = 0.86604488170569
AVR_TGKF = 0.5589009518343
AVR_OPIN = 1.5116186775737
AVR_MAGN = 0.068115489441876
AVR_HYDR = 0.029428833146793
AVR_VTBR = 0.027005381309969
AVR_SYNG = 0.8848156772472
AVR_RTKM = 0.066976460702493
AVR_SBER = 0.013652757755115
AVR_BSPB = 0.14493702671554
AVR_SNGS = 0.049061792735469
AVR_KMAZ = 0.34151044356869
AVR_GAZP = -0.00053292169463214

Як зробити так, щоб вони йшли в тому порядку, який я їм поставив?

Повідомлень з 1 по 25 з 35

Схожі статті