Alex Green, В данной теме обсуждается Lua индикатор фракталов, там такая возможность есть. Во встроенном индикаторе такой возможности не предусмотренно.
nero333 написал: _sk_, спасибо, это хорошая идея, думаю реализовать что-то подобное. Вопрос был к разработчикам относительно кнопки "Остановить", аварийный выход - это всё-таки когда скрипт падает с выводом ошибки в поле "Ошибки выполнения скрипта".
Кнопка "Остановить" это не аварийный выход, а просто остановка скрипта. Принудительная (в Вашем термине "аварийная") остановка происходит не по нажатию кнопки, а по истечении таймаута 5 сек. И это не зависит от того что в это время делает main, что-бы Вы туда не написали скрипт принудительно завершится. Таймаут можно изменить, это делается в return события OnStop (см документацию QLUA.chm) Если Вам что-то нужно снять заявки перед остановкой скрипта, делайте это в самом OnStop
Максим написал: Мне это нужно чтобы я мог видеть так называемый "горизоотальный объем" но выраженый не графически а в табличной форме. Поэтому мне нужно как то сделать так чтобы на каждую свечу у меня выпадала табличка в файл вот в таком виде:
т.е. каждые 10 минут Вам нужно видеть сделки за последние 10 минут. это решается через ту же getItem. в main делаем цикл, который через getItem будет перебирать сделки за последние 10 минут. т.к. getItem берет данные из таблиц по номеру строки, то оптимальней всего будет реализовать цикл начиная с конца таблицы. с каждой строки, берем код инструмента, время сделки, количество и цену. ПО коду инструмента отфильтровываем не нужные инструменты. По времени смотрим входит ли сделка в нужный промежуток 10 минут. Если да, то сохраняем данные или показываем в таблице. Если нет то прерываем цикл. Прошу понять что задачей поддержки не является написание кода на заказ. Мы можем только посоветовать алгоритм, либо помочь найти причины возникшей ошибки. Если у Вас недостаточно опыта в программировании, наверное лучше найти человека который сможет реализовать Ваш алгоритм за вознаграждение, на нашем форуме такие есть.
т.е. грубо говоря Вам нужно из тиковых данных сделать 10 минутные, как на графике? Тогда можно обойтись вообще без OnAllTrade, ведь уже готовые данные можно получить через CreateDataSource с параметром INTERVAL_M10 она выдаст нужные данные в уже готовом виде.
Егор Масалкин, getCandlesByIndex работает с графиком а не с источником данных. А значит она будет реагировать на изменения с графиком. Если Вам нужно работать с исходными данными, для этого есть CreateDataSource
OnAllTrade срабатывает по событию, а не по таймеру. Если нужно по таймеру, то нужно избавиться от OnAllTrade и вместо нее использовать функцию getItem (см. документацию, раздел "Функции для обращения к строкам произвольных таблиц QUIK") Эту функцию, нужно вызывать внутри main, там же где и sleep. В самом sleep установить нужное значение паузы
Максим написал: А таблица после вывода будет иметь вид как ч описывал или нет?
вопрос не понятен. Если нужно узнать "что будет если" проще всего запустить код и самостоятельно увидеть результат.
Цитата
Максим написал: И еще вопрос. Код который вы прислали там есть sleep(1000) то есть запись будет производиться каждую секунду?
Нет. sleep вообще никак не влияет на OnAllTrade т.к. он в функции main которая живет в отдельном потоке. Данная конструкция нужна чтобы скрипт не завершал работку сразу после запуска а висел пока его не остановят.
Цитата
Максим написал: и в вашем коде цикл стоит помле описания переменных и функции - это принципиальный момент или этт дело вкуса?
Во первых, всё что вне функции mail крутится в основном потоке терминала. А значит если Вы опишите бесконечный цикл, то терминал просто зависнет. Во вторых, Ваша конструкция абсолютно лишена смысла и логики, зачем описывать функцию внутри цикла? Если хотите можно функцию main написать в верху, а OnAllTrade внизу, разницы никакой нет.
Максим, В коде очень много ошибок, проще показать как оно должно быть
Код
IsRan=true
function OnAllTrade(alltrade)
if alltrade.sec_code=="xxx" then
cena=tostring(alltrade.price)
data=tostring(alltrade.datetime.year)..tostring(alltrade.datetime.month)..tostring(alltrade.datetime.day)
kolvo=tostring(alltrade.qty)
a={}
a["cena"]=cena
a["data"]=data
a["kolvo"]=kolvo
end
end
function main()
while IsRun do
sleep(1000)
end
end
функция getFuturesHolding вызывается внутри функции obnov(), которая нигде в коде не используется. Либо в этом и есть причина, либо Вы опять привели не полный код скрипта. И Вы так и не представили скриншот таблицы позиций по клиентским счетам, на котором видно что данные которые Вы запрашиваете, действительно существуют.
Егор Масалкин, Алигатор показывает данные в будущее, в результате, в окне даграммы справа добавляются свечки. Пусть хоть и пустые, но они есть: А значит правильно и логично что getNumCandles реагирует на эти самые свечки.
sav 312, Прошу понять что написание кода на заказ не является нашей задачей. Если есть проблема, готовы помочь ее решить. Но если проблемы нет, а надо написать код то увы. Что именно не получается?
sav 312, Можно, для этого достаточно переделать условие "if Up and Down then" так чтобы оно срабатывало в нужный для Ваших целей момент. например добавить счетчик, который при нужном количестве 2 вызовет break
t, n, l = getCandlesByIndex("qwe", 0, 0, getNumCandles("qwe")-1)
Up=false
Down=false
for i=0,n-1 do
num=n-1-i
if (t[num].high)>0 then
Up=true
message("Up=".. t[num].datetime.hour..":"..t[num].datetime.min)
end
if (t[num].low)>0 then
Down=true
message("Down=".. t[num].datetime.hour..":"..t[num].datetime.min)
end
if Up and Down then
break
end
end
Здравствуйте, Также через функцию getCandlesByIndex нужно написать цикл, который будет перебирать свечки начиная с текущей и в прошлое, пока не найдет свечки фрактала.
Здравствуйте, QPILE признан устаревшим и более не развивается. Рекомендуем сразу же начать изучение альтернативного языка QLUA как более современного и перспективного. Документация и примеры доступны по ссылке https://arqatech.com/upload/iblock/194/quik_lua.zip
DP написал: Я не нашел ответ в документации, к сожалению.
Для начала нужно определиться какой стоп Вы хотите, при каких обстоятельствах он выставляется, и при каких условиях он будет покупать. Документация на терминал QUIK: -Раздел 5. Торговые операции клиента --Условные (стоп-) заявки
И только после этого, следует обратиться к документации за поиском параметров транзакции -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций
DP написал: Пытаюсь всю схему в голове уложить. Стоп заявки используются для ограничения убытков и получения прибыли и всегда идут в паре с заявкой, которая осуществляет вход в рынок. Я правильно понял Вашу фразу "На срочном рынке такой возможности нет. Как вариант, можно использовать стоп заявки"?
Вы задали конкретный вопрос
Цитата
DP написал: А есть возможность выставить заявку так, чтобы она исполнилась, когда цена достигнет определенного значения вне зависимости от того есть ли предложения по лучшей цене?
На него был конкретный ответ:
Цитата
Sergey Gorokhov написал: На срочном рынке такой возможности нет. Как вариант, можно использовать стоп заявки
Зачем Вы ищите скрытый смысл там где его нет? Если надо ставить стоп для ограничения убытков, то пожалуйста ставьте. Если хотите поставить стоп для покупки или продажи, никто не запрещает.
Алексей написал: Есть еще вопрос, существует ли параметр что бы считать минимум и максимум пред идущей свечи на графике
для доступа к свечкам можно использовать функцию getCandlesByIndex Что касается минимумов и максимумов, то чтобы их найти нужно с чем-то сравнивать, не совсем понятно, с чем нужно сравнивать значения
Nikolay Pavlov написал: возможно функция не возвращает значения, т.к. были указаны некорректный код класса или инструмента, также можно смотреть на поле getParamEx(...).result
Let_it_go, Боюсь что в случае FRACTALS просто так решать задачу не получится т.к. он смотрит на Hight и Low источника, а у индикаторов, само собой никакого Hight и Low нет. Варианты решения есть, но они не простые. Либо брать данные через getCandlesByIndex (что сложно), либо переписать код индикатора, так чтобы вместо Hight и Low был Any (что по проще) Кроме того, следует иметь ввиду что в последней редакции FRACTALS возвращает номера свечек, значит, чтобы увидеть их на графике, следует установить значения через функцию SetValue.
И последнее, в QLUA есть встроенная функция GetValue в связи с чем в индикаторах она переименована в GetValueEX, обновите индикаторы
DP, Вчера по RIZ7 цена опускалась ниже 111700 Если на рынке есть цена лучше чем Вы указали, то заявка исполнится по лучшей цене. т.е. Вы купили дешевле чем хотели вот и все.
Let_it_go написал: Снятая заявка имеет параметр flags=30 Исполненная заявка имеет параметр flags=28
некорректно проверять флаги в десятичном виде, проверять следует в шестнадцатеричном. Для этого есть функции bit Например как указано выше
Цитата
Let_it_go написал: является ли это исчерпывающей характеристикой снятости-неснятости? ну например если hour==0, то заявка НЕ снятая, а если hour>0, то она снята? Спасибо.
нет т.к. заявка может быть снята в полночь. правильней проверять флаги
c3po написал: Спасибо за ответ. Имелся в виду открытый интерес по страйкам. В текущей версии квика данная колонка названа открытыми позициями.
Прошу прощения, изначально вопрос был понят не правильно. Открытый интерес из таблицы текущих торгов можно получить функцией getParamEx с параметром NUMCONTRACTS
c3po написал: Добрый день! Какие способы есть прочитать значения открытых позиций из доски опционов?
На всякий случай:
Цитата
Egor Zaytsev написал: В текущей версии доступа к таблицы "Доска опционов" нет.
Но выход есть. Доска опционов берет данные об открытых позициях из таблицы Позиции по клиентским счетам. А значит, чтобы получить нужную цифру, Вам достаточно обратиться к этой таблице через функцию getItem
Let_it_go, 1) В QUIK нельзя накладывать индикаторы на индикаторы. 2) только если формулы обоих индикаторов уместить в одном скрипте. Или делать через привязку к идентификатору (см функцию getCandlesByIndex)