Есть подобный скрипт на lua, на Смартлабе как-то кто-то выкладывал. Если не ошибаюсь там ещё что-то было похожее. Я раньше тоже использовал этот скрипт немного переделав, получалась вот такая штука.
Вот только не в курсе работает он сейчас или нет, после всех этих новых версий квика и lua 5.4 Очень многие срипты просто перестали нормально функционировать.
Скрытый текст
Код
-- Вывод таблицы крупных "склеенных" обезличенных сделок по набору инструментов.
-- Для каждого инструмента, идентифицируемого кодом класса и кодом инструмента,
-- задаётся положительная граница размера крупной обезличенной сделки в лотах/контрактах.
local bounds = {
--[[["TQBR:SBER"] = 500,
["TQBR:GAZP"] = 200,
["SPBFUT:SiM0"] = 100,]]
["SPBFUT:SiH2"] = 3,
}
local isInterrupted = false -- флаг прерывания для завершения работы скрипта
local tableId -- информационная таблица
local SELL_FLAG = 1
local BUY_FLAG = 2
local prevTrade -- информация о предыдущей обезличенной сделке
local currTrade -- информация о текущей обезличенной сделке
local mergedTrade = {} -- информация о "склееной" сделке
local largeTradesCount = 0 -- количество крупных "склеенных" сделок
local largeTrades = {} -- массив крупных "склеенных" сделок
local printCount = 1 -- номер крупной "склеенной" сделки, которую нужно вывести в таблицу
function OnStop()
if tableId then
DestroyTable(tableId)
tableId = nil
end
isInterrupted = true
end
function OnAllTrade(allTrade)
prevTrade = currTrade
currTrade = allTrade
local key = allTrade.class_code .. ":" .. allTrade.sec_code
local bound = bounds[key]
if type(bound) ~= "number" then
return
end
local buySell = 0
if bit.band(currTrade.flags, BUY_FLAG) == BUY_FLAG then
buySell = 1
elseif bit.band(currTrade.flags, SELL_FLAG) == SELL_FLAG then
buySell = -1
end
-- Эвристика buySell
if prevTrade then
if currTrade.class_code == prevTrade.class_code
and currTrade.sec_code == prevTrade.sec_code
and currTrade.trade_num == prevTrade.trade_num + 1
and (buySell > 0 and prevTrade.buySell > 0 and currTrade.price >= prevTrade.price or buySell < 0 and prevTrade.buySell < 0 and currTrade.price <= prevTrade.price)
and currTrade.datetime.ms == prevTrade.datetime.ms
and os.time(currTrade.datetime) == os.time(prevTrade.datetime)
then
buySell = buySell * 2
end
end
currTrade.buySell = buySell
if buySell == 1 or buySell == -1 then
mergedTrade.datetime = currTrade.datetime
mergedTrade.tradeNum = currTrade.trade_num
mergedTrade.price1 = currTrade.price
mergedTrade.price2 = currTrade.price
mergedTrade.prevVolume = 0
mergedTrade.currVolume = currTrade.qty * buySell
mergedTrade.count = 1
else
mergedTrade.price2 = currTrade.price
mergedTrade.prevVolume = mergedTrade.currVolume
mergedTrade.currVolume = mergedTrade.currVolume + currTrade.qty * buySell / 2
mergedTrade.count = mergedTrade.count + 1
end
if math.abs(mergedTrade.currVolume) >= bound then
if math.abs(mergedTrade.prevVolume) < bound then
-- Новая крупная "склеенная" обезличенная сделка
largeTrades[largeTradesCount + 1] = {
time = os.date("%Y-%m-%d %X", os.time(mergedTrade.datetime)) .. string.format(".%03d", mergedTrade.datetime.ms),
classCode = currTrade.class_code,
secCode = currTrade.sec_code,
tradeNum = mergedTrade.tradeNum,
price1 = mergedTrade.price1,
price2 = mergedTrade.price2,
volume = mergedTrade.currVolume,
count = mergedTrade.count,
}
largeTradesCount = largeTradesCount + 1
else
-- Обновление информации о последней крупной "склееннщй" обезличенной сделке
local largeTrade = largeTrades[largeTradesCount]
largeTrade.price2 = mergedTrade.price2
largeTrade.volume = mergedTrade.currVolume
largeTrade.count = mergedTrade.count
end
end
end
local function rgb(color)
local r, g, b = string.match(color, "#(%x%x)(%x%x)(%x%x)")
return RGB(tonumber(r, 16), tonumber(g, 16), tonumber(b, 16))
end
local function displayInfoTable()
if tableId and IsWindowClosed(tableId) then
isInterrupted = true
else
local count = largeTradesCount
for rowId = printCount, count do
while GetTableSize(tableId) < rowId do
InsertRow(tableId, -1)
end
local largeTrade = largeTrades[rowId]
SetCell(tableId, rowId, 1, largeTrade.time)
SetCell(tableId, rowId, 2, largeTrade.secCode)
SetCell(tableId, rowId, 3, tostring(largeTrade.price1), largeTrade.price1)
SetCell(tableId, rowId, 4, tostring(largeTrade.price2), largeTrade.price2)
SetCell(tableId, rowId, 5, tostring(largeTrade.volume), largeTrade.volume)
SetCell(tableId, rowId, 6, tostring(largeTrade.count), largeTrade.count)
SetCell(tableId, rowId, 7, tostring(largeTrade.price2 - largeTrade.price1), largeTrade.price2 - largeTrade.price1)
--SetCell(tableId, rowId, 3, largeTrade.classCode)
--SetCell(tableId, rowId, 4, tostring(largeTrade.tradeNum), largeTrade.tradeNum)
--[[local largeTrade = largeTrades[rowId] --Изначальный вариант
SetCell(tableId, rowId, 1, largeTrade.time)
SetCell(tableId, rowId, 2, largeTrade.classCode)
SetCell(tableId, rowId, 3, largeTrade.secCode)
SetCell(tableId, rowId, 4, tostring(largeTrade.tradeNum), largeTrade.tradeNum)
SetCell(tableId, rowId, 5, tostring(largeTrade.price1), largeTrade.price1)
SetCell(tableId, rowId, 6, tostring(largeTrade.price2), largeTrade.price2)
SetCell(tableId, rowId, 7, tostring(largeTrade.volume), largeTrade.volume)
SetCell(tableId, rowId, 8, tostring(largeTrade.count), largeTrade.count)
SetCell(tableId, rowId, 9, tostring(largeTrade.price2 - largeTrade.price1), largeTrade.price2 - largeTrade.price1)]]
if largeTrade.volume > 0 then
SetColor(tableId, rowId, QTABLE_NO_INDEX, rgb("#0b091c"), rgb("#006f00"), rgb("#0b091c"), rgb("#006f00")) --#9b0000 FFE8E8 006f00
elseif largeTrade.volume < 0 then
SetColor(tableId, rowId, QTABLE_NO_INDEX, rgb("#0b091c"), rgb("#9b0000"), rgb("#0b091c"), rgb("#9b0000"))
end
end
if printCount < count then
printCount = count
end
end
end
function main()
tableId = AllocTable()
AddColumn(tableId, 1, "Дата/Время", true, QTABLE_STRING_TYPE, 25)
--AddColumn(tableId, 2, "Класс", true, QTABLE_CACHED_STRING_TYPE, 10)
AddColumn(tableId, 2, "Тикер", true, QTABLE_CACHED_STRING_TYPE, 10)
--AddColumn(tableId, 4, "Номер сделки", true, QTABLE_INT_TYPE, 20)
AddColumn(tableId, 3, "Нач.Цена", true, QTABLE_DOUBLE_TYPE, 12)
AddColumn(tableId, 4, "Кон.Цена", true, QTABLE_DOUBLE_TYPE, 12)
AddColumn(tableId, 5, "Кол-во", true, QTABLE_INT_TYPE, 6)
AddColumn(tableId, 6, "Частей", true, QTABLE_INT_TYPE, 6)
AddColumn(tableId, 7, "Проскальзывание", true, QTABLE_DOUBLE_TYPE, 20)
CreateWindow(tableId)
SetWindowCaption(tableId, "Time and Sales")
--[[AddColumn(tableId, 1, "Дата/Время", true, QTABLE_STRING_TYPE, 25)
AddColumn(tableId, 2, "Класс", true, QTABLE_CACHED_STRING_TYPE, 10)
AddColumn(tableId, 3, "Инструмент", true, QTABLE_CACHED_STRING_TYPE, 10)
AddColumn(tableId, 4, "Номер сделки", true, QTABLE_INT_TYPE, 20)
AddColumn(tableId, 5, "Нач.Цена", true, QTABLE_DOUBLE_TYPE, 12)
AddColumn(tableId, 6, "Кон.Цена", true, QTABLE_DOUBLE_TYPE, 12)
AddColumn(tableId, 7, "Кол-во", true, QTABLE_INT_TYPE, 6)
AddColumn(tableId, 8, "Частей", true, QTABLE_INT_TYPE, 6)
AddColumn(tableId, 9, "Проскальзывание", true, QTABLE_DOUBLE_TYPE, 20)
CreateWindow(tableId)
SetWindowCaption(tableId, "Крупные склеенные обезличенные сделки")]]
while not isInterrupted do
displayInfoTable()
sleep(200)
end
end
Михаил В написал: Сделайте встроенную возможность автоматического выставления тейк профита и стоп-лоса при создании заявки. Из перепробованных в интернете написанных на языке lua ни один нормально не работает.
поддерживаю, отличная функция могла бы быть!
Цитата
RayIntraday написал: Данные пожелания, о реализации автоматического выставления тейк профита и стоп-лоса при создании заявки, существовали на форуме аж с 2008 года. Это я прекрасно помню, т.к. сам искал нечто подобное на старом форуме. Но старый форум благополучно закрыли с 15 февраля 2016 года, что бы не было возможности тыкнуть носом в обещания разработчиков. Обецанки-цацанки
Подскажите что может быть за проблема с квиком. 9.2.1.4 Работает-работает, потом в какой-то момент выскакивает вот такое окно
А потом просто закрывается терминал и пишет:
Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: info.exe Версия приложения: 9.2.1.4 Отметка времени приложения: 6139a32d Имя модуля с ошибкой: lua53.dll Версия модуля с ошибкой: 4.1.2.2 Отметка времени модуля с ошибкой: 611c762b Код исключения: c000041d Смещение исключения: 0000000000004e3f Версия ОС: 6.1.7601.2.1.0.256.1 Код языка: 1049 Дополнительные сведения 1: 4b5e Дополнительные сведения 2: 4b5ee4caeddd37c4f1bc798c7b28542b Дополнительные сведения 3: 2c54 Дополнительные сведения 4: 2c54aa6f0734972f8d13121d4bfcf266
Nikolay написал: Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.
вообще-то пересчет графиков взад - это бессмысленная затея. --------------------------------------------------- "После драки -кулаками не машут"
А если профиль из линий рассчитывать и отрисовывать только последний час, на начало нового часа убрать линии профиля и оставить только maxVol сформированный (TYPET_BAR), кога начинается новый час расчет начать проводить заново. Получится ежечасный maxVol и один профиль. Я нечто похожее видел в NT-7 вот ссылка Индикатор POC уровней .
Вы имеете ввиду столбик числе у свечки? Если да, то так можно сделать.
Нет, я не про столбик чисел профиля у свечки. Скорее про уровень максимального объёма в течении заданного промежутка времени (часа), а так же про уровень максимальной консолидации интереса POC, они бывают не совпадают Нашлядно это вот как-то так Объём часа и пок часа
Nikolay написал: Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.
вообще-то пересчет графиков взад - это бессмысленная затея. --------------------------------------------------- "После драки -кулаками не машут"
А если профиль из линий рассчитывать и отрисовывать только последний час, на начало нового часа убрать линии профиля и оставить только maxVol сформированный (TYPET_BAR), кога начинается новый час расчет начать проводить заново. Получится ежечасный maxVol и один профиль. Я нечто похожее видел в NT-7 вот ссылка Индикатор POC уровней.
Сделать можно. Но для этого необходимо сразу инициализировать столько линий, сколько будет отрисовано для всех интервалов.
А если производить расчёт без линий, а выводить только maxVol ? Или расчёт обязательно подразумевает отображение линии как результат расчёта? Если расчёты проводятся в течении часа и отрисовываются линии, час закончился, результаты остались начинается новый час и новые расчёты. Разве будут задействоваться старые линии и старые расчёты?
Nikolay написал: А вот сделав такие изменения в цикл вывода строк, все работает.
Код
for i = 1 ,lines do
outlines[i] = {index = index - shift + bars, val = maxPrice}
if sortedProfile[i]~ = nil then
sortedProfile[i].vol = math.floor (sortedProfile[i].vol/MAXV * bars)
if sortedProfile[i].vol > 0 then
outlines[i].index = index - shift + sortedProfile[i].vol
outlines[i].val = sortedProfile[i].price
end
end
SetValue (index - shift, i + 1 , outlines[i].val)
SetValue (outlines[i].index, i + 1 , outlines[i].val)
--WriteLog('line '..tostring(i).." price "..tostring(GetValue(index-shift, i)).." - "..tostring(GetValue(outlines[i].index, i)).." vol "..tostring(outlines[i].index-index+shift))
end
Код
--logfile=io.open(getWorkingFolder().."\\LuaIndicators\\priceAvgProfile.txt", "w")
Settings -----------------------------------------
end
Николай, а как можно сделать, что бы 'maxVol' формировался в процессе, за некий промежуток времени и оставался неизменным, а не расчитывался по уже полученным данным. Я тут пытался поэксперементировать меняя период и отступ, с разными периодами и разными отступами, но результат получился так себе. График в процессе торгов движется и данные постоянно меняются и пересчитываются, так что такое представление наверное не особо подходит для торговли и анализа. maxVol, это я так понимаю нечто вроде point of control? Было бы здорово, скажем чтобы maxVol, отрисовывался в течении часа, а потом так и оставался на графике. Может вы знаете как это реализовать в коде? Смотрел на гитхабе, у вас там много интересных вещей, но подобного нет.
А разве на первом скрине уровни на графике...? Я про уровни, которые остаются от собственных выставленных заявок. Цвет я задаю в настройках свой. И потом эти уровни входа в стакане висят до тех пор, пока цена не пройдёт пару раз по этому уровню. А могут вообще остаться если цена улетела.
Сцыкотно ваши обновления сразу ставить. Кучу народу, кто юзает QUIK знают о том, что это чревато не тут, так там вылезет костыль разработчиков. Если пересоздать таблицы в 8.13.0.106 то её можно создать нормальной, правда неизвестно как долго это продлиться. Мне просто интересно неужели никто не отвечает за такие косяки? Постоянные обновления несколько раз в год и такая херня постоянно. Может рук состав поменять, тогда будет толк...?
Добрый день. Разработчики, подскажите когда уберёте свои косяки в работе терминала??? Если выставить свои заявки в стакан и в настройках указать подсветку своим цветом, то когда они будут отработаны остаются линии на тех же уровнях. уровни висят до тех пор пока цена не пройдёт ещё пару раз по этим уровням.
А таблицы, это вообще отдельная тема. Как такое вообще можно было допустить...? Складывается впечатление, что что разработчики за дорма получают свою зарплату. Сделали какую нибудь херню и запулили с обновлениями в терминал. А потом у всех пользователей проблемы в работе и отображении. И похер что доработки не прошли отладку, тестировщик не протестировал работу терминала. И так сойдёт. Вот поэтому постоянная хрень и вылазит с этого терминала. На западе вас бы просто засудили, за такое отношение к работе.
Ладно, нечего вам расписывать вы и так всё сами прекрасно знаете. Вообще, когда будет исправлен этот косяк, у меня сейчас 8.13.0.106.
жаль конечно... хотя опять же, если такой анализ сделают, то программа может стать платной... ибо платформы где всё это реализовано - платные и не дешевые.... опять же конкуренция. атас, тигр, волфикс, там это достойно реализовано. видимо поэтому не хотят внедрять за спасибо. тогда можно было бы сделать модуль платным
Quik и так платный, многие брокеры ежемесячно снимают со счёта определённую сумму за совершение сделок через терминал...
Нет, не пятый, а на много больше. Я помню разные подобные пожелания были ещё на старом форуме, который просто удалили. А там и профили просили, и объёмное накопление в баре, и нормальный стакан, и автоматическое выставление TP/SL, и нормальные алерты, и пр. и пр. И как всегда ответ был один: "Мы рассмотрели Ваши пожелания. По итогам их анализа сообщаем Вам, что реализация пожеланий признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваши пожелания в план доработок при выпуске одной из следующих версий нашего ПО."
Michael Bulychev, путь в скрипте похоже указал правильно dofile(getScriptPath() .. "\\dop_bot.lua") но всё равно, выдаёт вот такую ошибку lua:4: attempt to call global 'getScriptPath' (a nil value). Не могу понять что он от меня хочет?
Данные пожелания, о реализации автоматического выставления тейк профита и стоп-лоса при создании заявки, существовали на форуме аж с 2008 года. Это я прекрасно помню, т.к. сам искал нечто подобное на старом форуме. Но старый форум благополучно закрыли с 15 февраля 2016 года, что бы не было возможности тыкнуть носом в обещания разработчиков. Обецанки-цацанки
Дмитрий написал: Если вас устроит вертикальная линия, идущая от самого низа графика до уровня, заданного определенным значением цены, то можно обойтись без меток и нарисовать ее с помощью индикатора, пример которого приведен ниже:
Код
Settings =
{
Name = "v_line" ,
line =
{
{
Name = "vertical_line" ,
Color = RGB ( 0 , 255 , 255 ), --
Type = TYPE_HISTOGRAM -- важно задать тип "гистограмма", тогда получатся вертикальные линии
}
}
}
function Init ()
return 1
end
function OnCalculate (index)
if (T(index).hour = = 10 ) and (T(index).min = = 0 ) then
return H(index) + (H(index) - L(index)) -- линия идет от самого низа графика и оканчивается немного выше нужной нам свечи
end
end
Этот индикатор будет рисовать вертикальную линию на свече, которая была в 10:00.
Чтобы вертикальная линия не перекрывала тени свечи, можно после наложения на график индикатора поменять "Порядок графиков (индикаторов)" с помощью пункта контекстное меню "Параметры текущего окна".
Доброго дня. Подскажите, а есть возможность настраивать время отображения индикатора.? Скажем нужно отметить новости в 15:30, 16:30, 21:00. как это сделать что бы прописать сразу?
Мы рассмотрели Ваши пожелания. По итогам их анализа сообщаем Вам, что реализация пожеланий признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваши пожелания в план доработок при выпуске одной из следующих версий нашего ПО.
А воз и ныне там. Как и многие другие ваши обещания, на которые периодически натыкаешься на форуме...
Добрый день. В новых версиях квика есть возможность рисовать фигуры, в частности прямоугольник. Меня интересует такой вопрос, как рисуется прямоугольник..? Это некие элементы рисунка, которые добавляются на график или это просто соединённые линии которые по сути есть код? Подскажите как правильно написать код, который будет добавлять на график ежечасно прямоугольник, размером от хая до лоя, ограниченный начальной и конечной свечкой часа. Если открылся на хаях и закрылся на лоях, то отрисовывается красным, если открылся на лоях и закрылся на хаях, то соответственно зелёный.
Sergey Gorokhov написал: Здравствуйте, Сам скрипт составлен некорректно. Индикатор фракталов предполагает установку значений на предыдущей свечке а не на текущей. В связи с чем, рекомендуется устанавливать значения функцией SetValue На нашем сайте Вы можете найти готовые примеры индикаторов на LUA рекомендуем использовать скрипт из примера.
Да, я знаю что он написан не корректно. Но в том, который сбросилы вы, не удаётся начертить линию, пускай даже точками, что бы построить фрактальный уровень.
Settings = { Name = "*FRACTALS (Fractals)", Period = 5, line = {{ Name = "Horizontal line", Type = TYPE_LINE, Color = RGB(140, 140, 140) }, { Name = "FRACTALS - Up", Type = TYPE_TRIANGLE_UP, Color = RGB(0, 206, 0) }, { Name = "FRACTALS - Down", Type = TYPE_TRIANGLE_DOWN, Color = RGB(221, 44, 44) } }, Round = "off", Multiply = 1, Horizontal_line="off" }
function Init() func = FRACTALS() return #Settings.line end
function OnCalculate(Index) local Out1,Out2 = func(Index, Settings) SetValue(Out1, 2, ConvertValue(Settings,H(Out1))) SetValue(Out2, 3, ConvertValue(Settings,L(Out2))) return tonumber(Settings.Horizontal_line),nil,nil end
function FRACTALS() --Fractals ("FRACTALS") local H_tmp={} local L_tmp={} local it = {[1]=0, l=0} return function (I, Fsettings, ds) local Fsettings=(Fsettings or {}) local P = (Fsettings.Period or 5) if (P>0) then if I == 1 then H_tmp={} L_tmp={} it = {[1]=0, l=0} end if CandleExist(I,ds) then if I~=it[Squeeze(it.l,P)] then it.l = it.l + 1 it[Squeeze(it.l,P)] = I end local Ip,Ipppp = Squeeze(it.l,P),Squeeze(it.l,P-1)+1 local nP = math.floor(P/2)*2+1 H_tmp[Ipppp] = GetValueEX(it[Ip],HIGH,ds) L_tmp[Ipppp] = GetValueEX(it[Ip],LOW,ds) if it.l >= nP then local S = it[Squeeze(it.l-nP+1+math.floor(nP/2),P)] local val_h=math.max(unpack(H_tmp)) local val_l=math.min(unpack(L_tmp)) local L = GetValueEX(S,LOW,ds) local H = GetValueEX(S,HIGH,ds) if (val_h == H) and (val_h >0) and (val_l == L) and (val_l > 0) then return S,S else if (val_h == H) and (val_h > 0) then return S,nil end if (val_l == L) and (val_l > 0) then return nil,S end end end end end return nil,nil end end
function Squeeze(I,P) return math.fmod(I-1,P+1) end
function ConvertValue(T,...) local function r(V, R) if R and string.upper®== "ON" then R=0 end if V and tonumber® then if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R else return math.ceil(V * 10^R - 0.5) / 10^R end else return V end end if arg.n > 0 then for i = 1, arg.n do arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off") end return unpack(arg) else return nil end end
function GetValueEX(I,VT,ds) VT=(VT and string.upper(string.sub(VT,1,1))) or ANY if VT == OPEN then --Open return (O and O(I)) or (ds and ds:O(I)) elseif VT == HIGH then --High return (H and H(I)) or (ds and ds:H(I)) elseif VT == LOW then --Low return (L and L(I)) or (ds and ds:L(I)) elseif VT == CLOSE then --Close return (C and C(I)) or (ds and ds:C(I)) elseif VT == VOLUME then --Volume return (V and V(I)) or (ds and ds:V(I)) elseif VT == MEDIAN then --Median return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2) elseif VT == TYPICAL then --Typical return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3) elseif VT == WEIGHTED then --Weighted return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) elseif VT == DIFFERENCE then --Difference return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds)) else --Any return (ds and ds[I]) end return nil end
С чем это связано...? Или это странность самого языка Lua?
Добрый день . Народ, очень нужна ваша помощь по данному индикатору. А если кто поделится готовым, буду очень благодарен. Намедни решил поколдовать с фрактальным индикатором, так что бы фракталы растянуть по уровню. В итоге вот что у меня получилось. Не ахти, сразу скажу. Я конечно не спец в программировании, только учусь, поэтому и обращаюсь сюда за помощью. Как его исправить, что бы фрактальный уровень рисовался с самого начала (там где треугольники на картинке, это обычный индикатор фрактала) и заканчивался в том случае когда цена пересечёт этот уровень выше или ниже. Вот сам индикатор:
Settings = {Name = "Fracta_l", period=21, line = {{ Name = "Level_High", Color = RGB(0,255,0), Type = TYPE_POINT, Width = 1 },{ Name = "Level_Low", Color = RGB(255,0,0), Type = TYPE_POINT, Width = 1 }}} idx_prosl=0
function Init() return #Settings.line end function OnCalculate(idx) if idx==1 then P = math.floor(Settings.period/2)*2+1 t_H,t_L={},{} end if idx~=nil and idx>P then if idx_prosl~=idx then local l=idx-P for l=l,idx-1 do t_H[l]=H(l) t_L[l]=L(l) end if t_H[#t_H-(P-1)/2]==math.max(unpack(t_H,#t_H-P+1,#t_H)) then H_ind_value=t_H[#t_H-(P-1)/2] end if t_L[#t_L-(P-1)/2]==math.min(unpack(t_L,#t_L-P+1,#t_L)) then L_ind_value=t_L[#t_L-(P-1)/2] end end else H_ind_value=nil L_ind_value=nil end idx_prosl=idx return H_ind_value, L_ind_value end
Добрый день. Может кто знает что за глюк выдаёт Quik 7.19.0.51 Делаю копию окна или таблицы, через Ctrl+N и выскакивает вот такая хрень General Protection Fault. Internal exception happend. Please send/dmp/"info_20180810_102645.dmp" file to quiksupport@arqatech.com Sorry for inconvenience.
Нажимаешь окей и всё квик закрывается, приходится открывать заново. Может кто знает что за хрень и как её лечить...?
А возможно ли на Lua нарисовать динамический POC, который будет отрисовывать максимальный объём. Например на 1,3240 прошёл объём 300, индикатор рисует линию и рисует её до тех пор пока на определенном уровне не появиться больший объём, например 1,3250 400. Вот пример. И не будет ли после добавления индикатора тормозить график...?
Доброго времени суток. У меня такой вопрос. Очень часто слышал в сети о том, что можно подключить quik в nt-7 для анализа торговых инструментов FORTS, в режиме онлайн, текущей торговой сессии. В NinjaTrader 7 более мощная аналитическая база и набор индикаторов которыми QUIK на данный момент не обладает и я так полагаю обладать не будет.По этому хотелось бы узнать возможна ли такая операция. Если да, то буду очень признателен за подробное описание как это сделать.