Блог им. AlexGood

Нужен скрипт для КВИК вычисляющий среднюю цену фьючей в позиции!

Друзья и коллеги, всем привет! Кто сможет написать или достать скрипт (на lua?) считающий среднюю цену фьючей в моей позиции?!
★3
16 комментариев
Я программистом был в позапрошлой жизни, а сейчас только и исключительно для себя. Да и то, по правде сказать, больше чтоб мозги не ржавели. Но дам наводку.
quikluacsharp.ru/landing/
Сам не обращался, но у них всякие примеры подсматриваю периодически.
Сохраняй ежедневно сделки в эксель по итогам дня и считай среднюю какие проблемы
avatar
astic, мне не в конце дня надо, а в оперативном режиме для мани/риск-менеджмента в своем трейдинге, чтобы в числовом виде или лучше линии на графике была средняя цена набранных фьючей!
avatar
AlexGood,  так если интрадей в течении для до клиринга есть же поле «Эффективная цена позиции». В клиринг она пересчитывается по цене закрытия но до клиринга это и есть твоя средняя цена.
avatar
astic, 
поле «Эффективная цена позиции»

это в какой таблице?
avatar
AlexGood, «Позиции по клиентским счета (фьючерсы)»
avatar
divertam-se :)

Все что ниже в отдельный файл с расширением lua:

function main()
local avgprice = 0
local pos = 0
function myFind(C,S) return C == «SPBFUT» and S == «SiM3» end                  
local tradeTable = SearchItems(«trades», 0, getNumberOf(«trades»)-1, myFind, «class_code,sec_code»)
for n = #tradeTable, 1, -1 do
trade = getItem(«trades», tradeTable[n])
if bit.band(trade.flags, 0x4) == 0 then
avgprice = avgprice — trade.value
pos = pos + trade.qty
elseif bit.band(trade.flags, 0x4) ~= 0 then
avgprice = avgprice + trade.value
pos = pos — trade.qty end end
avgprice = avgprice/-pos
message(«avgprice = »..tostring(avgprice))
end
avatar
astic, добавляю в КВИКе ваш код в Доступные скрипты, пытаюсь запустить, выдает ошибку синтаксиса!
avatar
AlexGood, а все правильно скопировал? у меня все ок щас проверил. А в настройках поставь версию луа 5.3.5 может из-за этого. Ну и таблица сделок должна существовать и сделки в ней.
avatar
astic, все правильно скопировал и учел ваши рекомендации, та же проблема!Идентификатор на графике не нужен?
avatar
AlexGood, кинь скриншотик что пишет. Нет она берет данные из таблицы сделок. Тикер поменял на тикер своего фьючерса?
avatar
AlexGood, 

function main()
local avgprice = 0
local pos = 0
local tradeTable = SearchItems('trades', 0, getNumberOf('trades')-1, myFind, 'class_code,sec_code')
for n = #tradeTable, 1, -1 do
trade = getItem('trades', tradeTable[n])
if bit.band(trade.flags, 0x4) == 0 then
avgprice = avgprice-trade.price
pos = pos + trade.qty
elseif bit.band(trade.flags, 0x4) ~= 0 then
avgprice = avgprice+trade.price
pos = pos-trade.qty end end
avgprice = avgprice/-pos
message('avgprice = '..tostring(avgprice))
end
function myFind(C,S) return C == 'SPBFUT' and S == 'GDM3' end


попробуй этот вариант, я заменил двойные кавычки на одинарные, либо Расширенный символ с кодом 171 в таблице символов это кавычка вида «. Менять вид кавычек на " (код 187). (с форума поддержки квика)
В двух местах при копипасте минус заменился на дефис.
Также заменил вытаскиваемое значение с объема на цену (trade.value на trade.price)
avatar
funjpg, пишет ошибку 5: attempt to get length of a nil value, после совершения сделки по фьючам заданного в коде тикера просто не запускается, ничего не пишет!
avatar
AlexGood, не находит трейды заданного фьюча, напиши точно тикер, может в нем ошибка. У меня не было сегодня трейдов по золоту, такая же ошибка. Как вариант, можно добавить проверку на nil, если nil, то выводить сообщение, не нашел трейдов по инструменту. 
avatar
AlexGood, 

...
local tradeTable = SearchItems('trades', 0, getNumberOf('trades')-1, myFind, 'class_code,sec_code')
if tradeTable == nil then message('not found trades', 2); return end
for n = #tradeTable, 1, -1 do
...

можно добавить строчку выделенную жирным
avatar
Кстати да изза кавыче двойных может вполне синтаксис давать их лучше понять на одинаровные
avatar

теги блога AlexGood

....все тэги



UPDONW
Новый дизайн