BlaZed (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 След.
Путь к скриптам Lua
 
Цитата
TGB написал:
Функция опреlеления папки запускаемого скрипта:
Аа чем getScriptPath() не устраивает?
Путь к скриптам Lua
 
Цитата
Sergey написал:
Такое впечатление, что сразу после добавления скрипта к путям, по которым происходит поиск подключаемых скриптов добавляется папка из которой запускается скрипт, а после перезагрузки QUIK в этой папке уже не ищет.
Именно так и происходит, вот ответ поддержки на подобную проблему с путями к скриптам.

И этой проблеме, кстати, уже очень много лет... а воз и ныне там.
Путь к скриптам Lua
 
Sergey, Такая проблема возникает, если загружаемый модуль расположен не в стандартных для скриптов папках, а пути к модулям не прописаны явно, либо прописаны по относительным путям.

Надо корректно прописать package.cpath и/или package.path

Вот вам для примера мой код подгрузки модуля из нестандартного места
Код
package.cpath=""
package.path=getScriptPath().."\\. .\\Modules\\?.lua"
require("mod_trading")
Получение признака "Субординированный инструмент" в lua
 
Цитата
Anton написал:
Ссылка протухла,  перезалил , пару недель проживет
Огромное спасибо.
Очень полезная либа
Если вам не сложно может откомпилите ее еще и под lua 5.4
Значение индикатора на графике
 
Цитата
Sergey написал:
Может есть обходное решение чтобы смотреть значение индикатора на графике?
Первая ссылка что я привел, пост №4.
Но это именно что "обходное" решение
Значение индикатора на графике
 
Недавно создавал подобную тему https://forum.quik.ru/messages/forum1/message56278/topic6543/#message56278 ответили что проблема изучается и т.д.
Но как оказалось проблеме уже 6 лет https://forum.quik.ru/messages/forum8/message8821/topic954/#message8821 и про нее толи забыли, толи забили.
Работа функций OnStop() и SetCell(), Подвисает скрипт
 
Так же присоединяюсь ко всему этому негодованию.

Еще раз приведу цитату из документации (которую уже тут приводили)
Цитата
Также необходимо иметь в виду, что функция OnStop() выполняется в основном потоке РМ QUIK, и,
так как в момент ожидания завершения скрипта (5 секунд) он занимает основной поток РМ QUIK, то
другие обработчики событий уже не вызываются, а само РМ QUIK может некоторое время
находиться в «подвисшем» состоянии.
Зачем OnStop() вообще занимает основной поток пока ожидается завершение скрипта и не дает выполняться другим функциям в основном потоке?
Вот реально зачем это надо??

Достаточно чтобы OnStop() выполнился и передал в QUIK сигнал, что через столько-то миллисекунд требуется завершить принудительно скрипт, если он еще вдруг не завершен. Все.
А как корректно завершить свой скрипт, пользователь сам разберется.
Не надо нам мешать в этом.

Прошу разработчиков либо объяснить, зачем OnStop() делает то, что от него совершенно не требуется, либо зарегистрировать пожелание на приведение OnStop() к адекватному поведению.
Разрыв соединения Quik
 
Тут что угодно может быть начиная от проблем с провайдером до пережатого ножкой стула сетевого кабеля.
Причем все же больше похоже на проблемы с интернетом, чем с брокерами.
Обрывы соединения с интернетом могут быстро восстанавливаться роутером, что вы даже не заметите, а вот связь с брокером успеет разорваться.

Раз у вас входящий кабель приходит сначала в роутер, а уже с него на комп, то роутер никак нельзя исключать из виноватых.
Если есть логин и пароль к роутеру, то смотрите в первую очередь логи роутера во время разрыва соединения.
Да и сами роутеры бывают глючными.

Так же логи винды посмотрите (уровни предупреждения и ошибки), вдруг что интересное увидите типа отрубания сетевухи

Так же запустите в трех разных окнах вечные пинги на роутер, на брокера и на какой-нибудь стабильно работающий сервер
1) ping -t ip_роутера
2) ping -t ip_брокера
3) ping -t google.comи смотрите что будет в момент разрыва

Кабели очень внимательно осмотрите на предмет повреждений, деформаций и перегибов.
А то бывало, что кабель был проложен под полом, и когда наступали в определенном месте на пол, кратковременно сеть пропадала.

Коннекторы на кабелях тоже надо проверить, бывает и плохое обжатие и нестабильно держащиеся в гнездах.

В общем есть что проверить для начала.
getParamEx "last" Возвращает 0 для фьючерсов
 
Цитата
Roman Azarov написал:
В некоторых случаях, его значение может отличаться от цены действительно последней (крайней) сделки по инструменту. Это связано с особенностью трансляции параметров.
Тут проблема в том, что в этих "некоторых случаях", прилетает LAST=0, что неправильно, т.к. имеются инструменты у которых цена может быть нулевой.
Можно как-то сделать, чтобы в упомянутых вами "некоторых случаях" прилетал бы не 0, а например nil или пустая строка
Чтобы можно было корректно фильтровать входящие данные.

Цитата
Roman Azarov написал:
Уточните, пожалуйста, при наблюдении описанного поведения, какое значение имеет параметр в таблице текущих торгов
В ТТТ так же наблюдается "Цена послед." = 0.
Очень часто такое поведение наблюдается во время вечернего клиринга, и продолжается буквально несколько секунд.
getParamEx "last" Возвращает 0 для фьючерсов
 
Бывает что от брокера некорректные данные приходят.
Обычно такое происходит во время вечернего клиринга, что в принципе не критично

Но на всякий случай делаю пару проверок
1) Проверка получаемых данных из ТТТ на корректность
Коррктность LAST проверяю так
Код
local param=getParamEx2(class_code,sec_code,"LAST")
if(param.result=="1")and(param.param_image~="")and(param.param_type=="1")then last=tonumber(param.param_value) end
2) Разрешать роботу торговать только если last~=0
Но надо быть предельно аккуратным, ибо на некоторых фьючерсах цена может быть нулевая, и такую проверку делать будет не желательно.
Как расшифровать "flags" в OnTrade?
 
Переводим 29 в двоичный формат, получаем 00000000 00011101
Биты в полученном двоичном числе читаются справа налево начиная с нуля
Далее смотрим документацию по флагам
Получение позиций по инструментам
 
Цитата
Andrey Bezrukov написал:
Если позиция ещё не загружена с сервера - функции вернёт "nil" вместо LUA-таблицы по этой позиции.Неоднозначности здесь нет.
Неа, например getFuturesHolding вернет nil для любого инструмента которого нет в таблице "Позиции по клиентским счетам (фьючерсы)"
А вот в вышеупомянутой таблице инструмент может отсутствовать по двум причинам
1) Либо он еще не получен с сервера
2) Либо позиции нулевые и им не торговали в последнюю сессию.
И достоверно определить причину нет возможности.
Получить текущие биды и аски по всем инструментам из потока, Как получить текущие котировки по всем инструментам, на которые подписан терминал, не дожидаясь OnQuote?
 
Цитата
kauyon1306 написал:
Спасибо. Натолкнулся на следующую проблему - даже после подписки Subscribe_Level_II_Quotes(class, sec) функция обратного вызова OnParam не срабатывает. В терминале отписался от всех потоков данных, чтобы вручную подписываться на них через скрипт. В чем может быть проблема.
Так Subscribe_Level_II_Quotes это подписка на стакан, а OnParam колбек на изменения ТТТ.
Как бы совершенно разные вещи.

OnInit() не стоит нагружать сильно, он же в основном потоке выполняется, подвесите quik такими издевательствами, лучше засунуть все в main()
Из квика вы не выдерните список инструментов с оформленной подпиской.
Определять его через OnQuote() весьма не надежно, если например инструмент малоликвидный, то можете и не дождаться колбека.
Правильнее в скрипте задать список нужных инструментов и из скрипта подписаться на них, вам Egor Zaytsev и подсказал целых 2 варианта

1) Стакан
Подписка на стакан  через Subscribe_Level_II_Quotes, ловить изменения стакана через OnQuote и получать значения getQuoteLevel2
2) Таблица текущих торгов
Подписка на параметры ТТТ через ParamRequest, ловить изменения ТТТ через OnParam и получать значения getParamEx

Только не надо мешать все в кучу, выберите один из этих вариантов и реализуйте.

PS: Через ТТТ будет и проще и надежней
При снятии заявки перемерт account пустой
 
Sergey Gorokhov, спасибо за пояснение.
Цитата
Sergey Gorokhov написал:
В транзакции на снятие заявки нет такого параметра ACCOUNT
Действительно, убрал параметр ACCOUNT ничего не изменилось, все снимается.

PS: Ради интереса сейчас поочередно убирал разные параметры при снятии заявок и наблюдал снимется ли заявка.
Оказывалось что SECCODE тоже не нужен, а вот CLASSCODE обязателен.
Я искренне удивлен.
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
 
Но если спрятать индикатор ЗА свечи

то наведением мышки можно увидеть подсказку со значением.

Должно быть НАОБОРОТ!
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
 
Поддержка, ответьте что-нибудь.

Ведь неудобство очень сильное.
Если индикатор проходит через тело свечи, то значение индикатора на данной свече не увидеть без танцев с бубном.

Наглядный пример
График SiU1 (часовик 21.06.2021) и индикатор EMA9

Как мне узнать значения индикатора на свечах где я стрелки нарисовал?
При снятии заявки перемерт account пустой
 
Имеется заявка, снимаю ее скриптом
Код
function main()
  local transaction={
    ["TRANS_ID"]  = "12345",
    ["ACCOUNT"]   = "4103YEK",
    ["CLASSCODE"] = "SPBFUT",
    ["SECCODE"]   = "SiU1",
    ["ACTION"]    = "KILL_ORDER",
    ["ORDER_KEY"] = "1892946353983939919"
  }
  sendTransaction(transaction)
  sleep(1000)
end

function OnTransReply(trans_reply)
  local str="OnTransReply\n"
  for k,v in pairs(trans_reply) do
    str=str..tostring(k).."="..tostring(v).."\n"
  end
  message(str)
end
Вывод скрипта
Код
OnTransReply
result_msg=Заявка 1892946353983939919 снята. Неисполненный остаток: 8.
quantity=0,0
class_code=SPBFUT
firm_id=MC0139600000
server_trans_id=1841
error_code=0
brokerref=
uid=160707
client_code=4103YEK
trans_id=12345
sec_code=SiU1
date_time=table: 000001AAA41E6A70
price=0,0
balance=8,0
gate_reply_time=table: 000001AAA41E6CB0
status=3
first_ordernum=0
flags=2359297
error_source=0
exchange_code=
time=102038
account=
order_num=1892946353983939919
Все отлично снимается, но один момент мне не нравится.

Почему при получении ответа на заявку параметр account пустой, я же задал его в таблице transaction?
Ну и главный вопрос, что мне исправить, чтобы при получении ответа на транзакцию параметр account был заполнен правитьно (ожидаю там увидеть "4103YEK")?

PS: На всякий случай сразу упомяну, что в снимаемой заявке поле account было заполнено правильно.



QUIK 8.13.1.16
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
 
Заметил одну неприятную особенность.
1) Берем любой график и накладываем на него индикатор (пускай будет MA)
2) В окне редактирования графика ставим Moving Average выше чем Price
3) На тех свечах где MA проходит через тело свечи (линия MA перед свечой), при наведении на MA не отображается подсказка со значением MA
4) В окне редактирования графика ставим Moving Average нише чем Price
5) MA "прячется" за телами свеч, зато если MA проходит через тело свечи, то при наведении мышкой на предполагаемое место нахождения MA видим подсказку со значениями.
По-моему такое поведение крайне не логично, надо наоборот чтобы подсказка отображалась если MA перед свечой, а если сзади то не отображалась бы.

Такая беда со всеми индикаторами, MA взял просто для примера.

Прошу исправить.
Написание автономного бота
 
Цитата
Mixa написал:
ПОЛНОСТЬЮ заполнена?
Да
Цитата
Mixa написал:
А если getNumberOf('FUTURES_CLIENT_HOLDING') = 0?
Значит либо таблица еще не загрузилась, либо таблица пустая и позиции нулевые.
Оба варианта учтены в алгоритме.
Написание автономного бота
 
Mixa, дело в том, что иногда таблица с позициями не успевает загрузиться, а скрипт уже работает, этот момент надо просто учесть в работе скрипта
Делаю вот так
Код
function FuturesClientHolding() -- Первоначальное заполнение позиций по срочному рынку
  local n=0
  while (n<try_count)and(getNumberOf('FUTURES_CLIENT_HOLDING')==0) do -- Ждем заполнения таблицы "Позиции по клиентским счетам (фьючерсы)"
    sleep(100)
    n=n+1
  end
  if getNumberOf('FUTURES_CLIENT_HOLDING')>0 then -- Таблица "Позиции по клиентским счетам (фьючерсы)" заполнена
    for i=0,getNumberOf('FUTURES_CLIENT_HOLDING')-1 do
      local tbl=getItem('FUTURES_CLIENT_HOLDING', i)
      if(type(tbl)=="table")and(tbl['firmid']==firmid)and(tbl['trdaccid']==account)and(tbl['sec_code']==sec_code)and(tbl['type']==0)then
        holding["TOTALNET"]  = tbl['totalnet']  -- Текушие позиции
        holding["OPENBUYS"]  = tbl['openbuys']  -- Активная покупка
        holding["OPENSELLS"] = tbl['opensells'] -- Активная продажа
        return true
      end
    end
  end
  -- Таблица "Позиции по клиентским счетам (фьючерсы)" пустая, либо в ней отсутствует искомый инструмент
  holding["TOTALNET"]  = 0
  holding["OPENBUYS"]  = 0
  holding["OPENSELLS"] = 0
  return false
end
В дальнейшем обновляю позиции через колбек OnFuturesClientHolding
повторный Init() без OnDestroy() в индикаторе, При смене инструмента графика в Lua индикаторе перечитывается файл без предварительного срабатывания OnDestroy()
 
Извиняюсь, что влезаю в тему, но вроде как это касается обсуждаемого вопроса.

Вызывать OnDestroy() еще и при смене интервала инструмента надо бы, график же меняется.
И соответственно, после смены интервала OnInit() заново вызывать.

Собственно, нужно это для того, чтобы скрипт индикатора понимал, что параметры графика изменили, и надо бы пересчитывать весь индикатор заново.
Сейчас выкручиваюсь тем, что в OnCalculate(), отслеживаю не изменился ли инструмент или интервал графика, но это как-то "неправильно" по моему.
QUIK не видит индикаторы
 
Цитата
Ami написал:
А чем разработчикам помешали скрипты в подпапках? у меня, например, все они так лежат — по авторам отсортированы. пришлось Квик 8,13 удалить! верните, как было!!!
Я решил проблему так.
В папку LuaIndicators помещаем только файлы (с расширением lua) загружающие сами индикаторы, такого содержания:
Код
dofile("C:\\Путь\\До\\Индикатора\\индикатор.lua")
В результате в папке LuaIndicators держим только загрузчики индикаторов, а сами индикаторы располагаем где душа пожелает.
Попробуйте, очень удобно.
простейший робот на Луа, Где взять простейший работающий робот на Луа в качестве заготовки?
 
Да не бывает простейшего робота, такой работать не будет ибо слишком много моментов надо учесть, чтобы косяки квика обойти.
Своего робота даже без стратеги показывать жалко, слишком много трудов вложено.
Не думаю, что хоть кто-нибудь тут вам своего покажет, сильно удивлюсь если ошибся.

Так что вам лучше писать самостоятельно и спрашивать уже конкретно то, что у вас не получается.

А в целом самая простая структура примерно такая.
Определили инструмент, убедились что торговля идет, получили свои позиции, получили свечки, прогнали по стратегии, если требуется сформировали заявку, и все по кругу.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Цитата
TGB написал:
Вы меня заинтриговали своей версией QUIK
Тоже сначала удивлялся что это за версия такая 8.13.3, так как в некоторых темах пишут о данной версии раз два три
Похоже что таким образом арка тестирует бета-версии квика, так сказать до официального релиза.

Сирануш, ну и по теме топика хотел бы добавить немного мыслей.
Я бы дополнительно через коллбек OnDepoLimit попытался точнее определить проблему.
Смотрите зачем это надо.
Если через коллбек будут прилетать расхождения, тогда проблема не в квике, а в брокере, который шлет левые данные.
Либо же через коллбек расхождений не будет наблюдаться, а через функцию getDepoEx будут расхождения, тогда косяк явно квика.

Просто на данный момент получается так, что проблема есть, а кто виновник пока не ясно.
Не получается создать новую заявку
 
Хотелось бы услышать комментарии от разработчиков, ведь приведенный Alt_Dev код из документации "Использование Lua в Рабочем месте QUIK.pdf" (с небольшими изменениями, но не принципиальными).
И данный код не работает на свежем, только установленном QUIK Junior
Не получается создать новую заявку
 
В квике есть два типа формата транзакций, названные "специальный" и "универсальный"

Вы написали в "универсальном" формате, у которого от универсальности только название, и будет или нет работать зависит от кучи причин.
Лучше писать в "специальном" формате, вот он действительно универсален.

Такой вот парадокс от разработчиков.

Вот это удалите
Код
transaction['TRANS_ID'] =  tostring(TRANS_ID)
transaction['ACTION'] = 'Ввод заявки'
transaction['CLASSCODE'] = 'QJSIM'
transaction['Торговый счет'] = 'NL0011100043'
transaction['Инструмент'] = 'SBER'
transaction['К/П'] = 'Купля'
transaction['Цена'] = '0'
transaction['Лоты'] = '1'
transaction['Тип'] = 'Рыночная'
а это вставьте
Код
transaction['TRANS_ID'] =  tostring(TRANS_ID)
transaction['ACTION'] = "NEW_ORDER"
transaction['QUANTITY'] = '1'
transaction['CLASSCODE'] = 'QJSIM'
transaction['ACCOUNT'] = 'NL0011100043'
transaction['SECCODE'] = 'SBER'
transaction['OPERATION'] = 'B'
transaction['PRICE'] = '0'
transaction['TYPE'] = 'M'
это то же самое, только еще и работать будет
Индикаторы, документация
 
Цитата
Angy написал:
А как можно ознакомится с документацией, в которой описываются как рассчитываются индикаторы в квике
Официальной документации от разработчика по индикаторам не встречал, но информации с описаниями и формулами расчета в интернете легко ищется.
Ну или скачайте с сайта арки архив с индикаторами и посмотрите код.
Цитата
Angy написал:
какие единицы измерения (рубли, доллары, штуки, кол-во акций, количество сделок и т.д.)  у ненормированных индикаторов? Например,  цена акции - стоимость в валюте актива (рубли, доллары) за 1 акцию, цена фьючерса - стоимость в рублях одного стандартного фьючерса, скользящая средняя - измеряется в валюте актива, а  индикатор объема volume в чем измеряется (количество сделок за период времени, количество проданных акций, объем денежных средств или еще в чем то) для рынка акций, для рынка фьючерсов?  
Объем измеряется в лотах.
Цена это стоимость в валюте инструмента за лот.
Количество ценных бумаг в лоте и валюту инструмента смотрите на сайте биржи, находите нужный инструмент и изучаете пункт параметры инструмента.
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
 
Dr Wed, у вас источник данных не успевает загрузиться.
Добавьте после
Код
 ds = CreateDataSource("TQBR", "LKOH", INTERVAL_M1)
ожидание загрузки источника данных
Код
  local n=0
  while(ds:Size()==0)and(n<100)do sleep(100) n=n+1 end
должно помочь
как загрузить поток данных инструмента, после обновления не ясен способ добавления нового инструмента в таблицу "Текущие торги""
 
Котировки инструментов перенесли
Система->Настройки->Основные настройки->Программа->Получение данных->Котировки
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Сирануш, непонятно. Как будто и правда в таблице значения прыгали.
Проверьте для гарантии еще через коллбек OnDepoLimit какие значения прилетают в таблицу
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Артем, и правда надо nil использовать

Старатель, а если приведением к числу проверять корректность?
Код
test = tonumber(getParamEx(class_code,sec_code,"LAST").param_value) -- test=число
test = tonumber(getParamEx("", "", "")).param_value)                -- test=nil
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Старатель, офигеть, я даже и не подумал о спредах.
Благодарю, учту такой момент.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Цитата
Сирануш написал:
BlaZed  запусти скрипт в цикл и создай переменную в которую сохрани значение полученное кол-во бумаг по инструменты, а если переменная и получаемые данные из терминала будут различаться то выведи  сообщение, просто ради спортивного интереса у меня одного такой косяк
Предлагаю вам следующее.
Напишите сами вышеупомянутый код.
Только не теоретический, а тот что реально запустите и он покажет что есть расхождения.

Только учтите один момент, что в нерабочее время и во времена клирингов, брокер может транслировать некорректные данные.
Поэтому скрипт должен это либо учитывать, либо пускай время расхождения так же фиксирует.

А потом покажите код и вывод скрипта.
И мы посмотрим где в нем ошибка, потому как ну просто не могу поверить, что у вас цифры в таблице своей жизнью живут.
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
 
Цитата
Артем написал:
то что вы описали это стандартный SMA индикатор.
По-моему это больше похоже на LWMA

LWMA = SUM (CLOSE (i) * i, N) / SUM (i, N)
где,
SUM — сумма;
CLOSE(i) — текущая цена закрытия;
SUM (i, N) — сумма весовых коэффициентов;
N — период сглаживания.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Сирануш, не могу, у меня позиции по бумагам пустые, я на фьючерсах работаю
Программный разрыв соединения
 
Цитата
Юрий Волошин написал:
Цитата
BlaZed написал:
 
Код
    local   w32  =   require (  "w32"  )
  local   hWnd  =   w32.FindWindow (  "InfoClass"  ,"")
 w32.PostMessage (hWnd,w32.WM_COMMAND,  101  ,  0  )    
 
Я не понимаю этот код (поэтому не могу его использовать в программе биржевого робота Lua QUIK -- по завету Уоррена Баффета).
Могли бы Вы чуть подробней объяснить что это за код и как он работает?
У всех ли он будет работать?
Какие подводные камни?
На сколько это кашерный код?
Это использование библиотеки w32.dll - функции winAPI адаптированные для работы из LUA
Поддерживает библиотеку swerg

Ссылка выше в теме есть, там и сама библиотека и ее описание и примеры.

Этот код загружает библиотеку, потом ищет хандл окна квика и тыкает кнопку разорвать соединение. Все.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Сирануш, откройте в квике таблицу "Позиции по инструментам", и определите какие данные оттуда вы все же хотите видеть.
Потом прочитайте http://luaq.ru/getDepoEx.html чтобы понять какой столбец таблицы какому параметру getDepoEx соответствует
Программный разрыв соединения
 
Цитата
Юрий Волошин написал:
А таки "Разорвать соединение с информационным сервером" можно программно из Lua QUIK? Отключиться от сервера на ночь.
С помощью библиотеки w32 (ссылка есть выше в теме) буквально в три строчки
Код
local w32=require("w32")
local hWnd=w32.FindWindow("InfoClass","")
w32.PostMessage(hWnd,w32.WM_COMMAND,101,0)
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
 
Владимир, не перестаю с вас удивляться
Цитата
Владимир написал:
И не надо никаких индикаторов!
и тут же
Цитата
Владимир написал:
Тупое мат. ожидание, то бишь среднее арифметическое. Ну, можно ещё и дисперсию дать - есть там какая-то мышиная возня вокруг него или нет. Заодно и гонки курса малыми объёмами будут затруднены. Короче, примерно так:
M=(n1*p1+n2*p2+n3*p3+...)/(n1+n2+n3+...)
Вы понимаете, что то что вы описываете, по сути и есть индикатор, и даже формулу его расчета дали.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
В коде у вас ищется текущий остаток
Код
    local tblTotalLot =     getDepoEx(FIRM_ID, CLIENT_CODE, SEC_CODE, ACCOUNT ,LIMIT_KIND)    
    if tblTotalLot==nil     then TotalLots=0    else TotalLots=tonumber(tblTotalLot.currentbal)         end   
а тут вы пишете про входящий остаток.
Цитата
Сирануш написал:
меня волнует в основном входящий остаток по бумаге
не в этом ли дело?
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
 
Цитата
Владимир написал:
BlaZed, Лучше бы она выкладывала нормальные свечки и простой доступ к ним. И не надо никаких индикаторов! Кстати, и свечки желательно без этих дурацких "японских" штучек, а нормальные, куда более информативные.
А что такое "нормальные" свечи?
Дайте ссылочку на описание.

Я вот только японские знаю.
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
 
Цитата
Dr Wed написал:
Hola

Можно ли в скриптах вызывать индикаторы теханализа для использования их значений при обработке свечей?
Естественно, хочется обойтись без открытого графика по инструменту.
Легко, в скрипте рассчитываем самостоятельно нужный индикатор.
Благо арка даже выложила архив с индикаторами написанными на lua https://arqatech.com/upload/iblock/398/INDICATORS.zip
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Цитата
Владимир написал:
BlaZed,  Прям уж "такого значения быть не может". У меня "вот прям ща" у одного брокера два таких значения и у другого ещё одно. А перед началом торгов на Мосбирже там и ваще одни нули. А в СПб все данные с виду нормальные, но торгов-то всё равно нет. ::  
Владимир, а разве может, вот прям торгуется по нулевой цене?

Вы же понимаете, что если на каком-либо инструменте вдруг видим цену 0, то это либо торгов нет, либо косяк какой с данными.
В любом случае таким инструментом не торгуем, пока не увидим ненулевую цену.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
 
Цитата
Сирануш написал:
Если я не правильно получаю эти данные поправьте меня, чтоб было правильно. Потому как время от времени в переменные транслируются сосвсем левые данные, из-за чего робот начинает тупо набирать или продавать. Тема уже была такая(  https://forum.quik.ru/messages/forum10/message45769/topic5506/#message45769 ) и видимо ниче не поменялось.  
Вам же в прошлой теме подсказывали как лучше сделать, год как прошел, а вы так ничего и не исправили.

Я, например, подобные проверки делаю так:
Код
    params["LAST"] = tonumber(getParamEx2(class_code,sec_code,"LAST").param_value) or 0 -- Последняя цена
В результате, либо правильное число у меня в таблицу запишется, либо в случае каких проблем с данными, записываем 0, а такого значения быть не может.
Ну и тупо проверку в код добавляю, если у меня вдруг в таблице обнаружится 0, то не торгуем.
Код
    if(Тут_мои_условия)and(Тут_мои_условия)and(params["LAST"]~=0)then Trading(trading_lots,i) end
И так по всем параметрам, которые критичны для работы робота.
w32.dll, FindWindow
 
Так тут только один вариант - ClassName не верен.

Не знаю что такое Robo, но это и не важно. Вам надо указать правильный ClassName нужного вам окна.
Узнать ClassName можно разными утилитами, я смотрю через Window Detective
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Цитата
Артем написал:
Dr Wed, я инструкцию проштудировал, вроде как других способов нет. Единственная альтернатива которую я вижу это брать данные из открытого графика внутри скрипта индикатора, который к этому графику подцеплен.
Так вот тут же Владимир, он считает свечи самостоятельно. Спросите как именно лучше считать, если интересно.

Я например сходу вижу пару вариантов.
1) Из таблицы обезличенных сделок
2) Из таблицы текущих торгов параметр LAST
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Цитата
Владимир написал:
BlaZed, Вот и плохо, что "не при созревании". Надо бы дать пожелание разработчикам на доработку софта.
Кстати хорошая идея, мне тоже по стратегии приходится ловить момент появления новой свечи, а так бы коллбек словил и готово.
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Владимир, В самостоятельном расчете свеч я вижу только один существенный плюс, это построение свеч любого таймфрейма.
Думаю степени двоек должны интересный результат давать. Но я ленивый, хотя может когда и созрею реализовать..

Как по вашему, какие еще плюсы имеются по сравнению со стандартным способом получения свеч через CreateDataSource?
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Цитата
Владимир написал:
BlaZed, А как я ещё должен писать? Мне и в голову не приходило, что они могут давать незакрытые свечи! А так всё просто: свеча созрела, пришла - прерывание.
Ну если у нас все еще разговор про SetUpdateCallback (мы же с этого начали разговор), то данный коллбек срабатывает именно при получении новых данных по свечам, а не при созревании свечи.
Цитата
Владимир написал:
Нет, мы и говорим о разном: у меня незакрытая (накапливаемая) свеча существует лишь потому, что я сам её считаю, как сервер. А вот отдаю её "клиенту" лишь тогда, когда она будет закрыта. Фактически в прерывании и отдаю (15-секундном). А накапливается она в полуторасекундном, то есть обработчик свечей и знать не знает о её существовании: раз он вообще получил управления, значит, пришла новая свеча.
Ну так и через источник данных ничего не мешает такую же незакрытую(накапливаемую) свечу хоть отдавать в свой обработчик, хоть подождать пока закроется, запрограммировать можно что угодно.
Тут кроме того, что вы свечи самостоятельно рассчитываете разницы как бы и нету.
Цитата
Владимир написал:
А зачем тогда этот форум, если "разработчики менять все равно ничего не будут"?   Это же бесплатный набор тестирующих их софт, причём крайне заинтересованных в его качестве!
Смотрите, вот вам, как я понял, не нравится логика работы данных функций, а меня, например, она устраивает.
Но дело в том что существующая логика, хоть и не без косяков, но она работает.
Тут люди исправления проблем по несколько лет ждут, так что даже если вы все распишите как должно работать, и предложение признают целесообразным, то по приоритету задача на разработку явно где-нибудь в конце очереди затеряется.
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Цитата
Владимир написал:
BlaZed, А какие же ещё могут поступать новые данные в источник, если не свечи? ::
Так данные по свечам и поступают, кто ж спорит. Только вы почему-то пишете "пришла новая свеча", а же говорю, что "поступили новые данные" по свечам.
На мой взгляд разница существенная.
Цитата
Владимир написал:
ЧАВО???!!! Они что, НЕЗАКРЫТЫЕ свечи присылают?! Совсем шизанулись... Я, как уже говорил, считаю свечи сам, так у меня только три свечи на каждый таймфрейм: две рабочие и одна накапливаемая. И только когда она накопится, последняя свеча становится предпоследней, предпоследняя выбрасывается (меня не интересуют "преданья старины глубокой"), а накапливаемая обнуляется. И пока она снова не накопится и не станет последней, её данные не используются вообще никак. Чего и всем остальным желаю. Это ж ДОДУМАТЬСЯ надо! Я в ауте!  
Владимир, мы говорим об одном и том же, только терминология разная.
Под незакрытой свечой я подразумеваю то, что вы называете накапливаемой, а под закрытой, то что для вас последняя/предпоследняя и более ранние.

PS: а про логику работы всего этого спорить просто не хочу, это все же вопросы к разработчикам, а менять они все равно ничего не будут.
Страницы: Пред. 1 2 3 4 5 6 7 След.
Наверх