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

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

Страницы: 1 2 3 4 След.
Поиск заявки в стакане
 
Цитата
Сергей написал:
Подскажите, как найти в стакане заявку с заданным объемом? Предполагаю, что обращение к стакану можно было бы организовать через функцию  OnQuote,  затем функция  getQuoteLevel2. Дальше застрял.  
Я хоть и новичок, но постараюсь помочь. Если что, профи поправят.
Дальше запускаете цикл перебора строк по бидам и аскам. В нем добавляете условие по нужному вам объему (если речь идет об объеме конечно).
Сам делал примерно так:
Код
function OnQuote(class, sec )
   
   if class == CLASSCODE and sec == SECCODE then
 
      tb = getQuoteLevel2(CLASSCODE, SECCODE )
        
      for i=1,tb.bid_count,1 do
            if tb.bid[i].quantity > "Здесь ваше условие, например если в строке нужный вам объем" then
                --то что нужно сделать
               break -- прерываем цикл
           end
        end
      
        for i=1,tb.offer_count,1 do
            if tb.offer[i] > "Здесь ваше условие, например если в строке нужный вам объем" then
                --то что нужно сделать
                break -- прерываем цикл
            end
        end
 
       end
 
end
От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
SDL написал:
Да, это является самым корректным способом при сравнении отметок времени. Всё зависит от конкретных условий, можно использовать упрощенный подход или нет. Вот, например, на срочном рынке в текущую сессию включаются сделки за вчерашнюю вечернюю сессию, т.е. перед сделкой сегодня за 10:00:00 в ТВС будет читаться запись за вчера за 23:49:59. Смотрите сами, чтобы не было некорректной работы вашего алгоритма.
Спасибо за отклик. Предложенный Вами вариант взял на вооружение!
От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
Sergey Gorokhov написал:
Только добавить текущую дату.Хотя как сказал  SDL ,  это явно лишнее.
Если так, то да. Спасибо.
От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
SDL написал:
Ваш расчет time_sdelki - это путь воина, который Вы сами себе избрали. Можно делать и так, но кто мешает сделать немного по-другому:
Вот ваш ответ мне сразу понятен! Спасибо, но тут дело принципа уже)) Как мое время "10:00:50" в этот формат перевести. Без иронии, сделаю как Вы советовали, просто нужно для себя разобраться.
Исполнение тейк-профита с отступом 0 и защитным спредом 0
 
Цитата
Zoya Skvorcova написал:
При таких условиях- отступ ноль, спред ноль- заявка выставляется по цене, которая идет за ценой, которая пробила отступ
Реальный пример. Сегодня, инструмент BRZ8. Лонг. Тейк 59,66, отсуп 0.00, спред 0,00 Исполнение 59,64
Как???
От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
Sergey Gorokhov написал:
Опять не понятно. Ощущение что мы про разные вещи говорим.Что значит с привязкой к дате?Вы боитесь что время 10:00:50 может дать результат не сегодняшней сделки а вчерашней? Или как?Если боитесь, то просто отфильтровывайте все сделки, у которых дата сделки не равна дате торгов (так фильтруются сделки вечерней сессии фортс).Все остальные сделки и так только за текущую сессию, и нет смысла проверять дату.
Давайте попробуем иначе. Вот кусочек кода:
Код
for i = getNumberOf('all_trades') - 1,0,-1 do  
local t = getItem("all_trades", i);        
if t.sec_code == SECCODE and t.class_code == CLASSCODE then          
time_sdelki = os.time(t.datetime)           
if  time_sdelki > "ЗДЕСЬ ДОЛЖНЫ БЫТЬ МОИ 10:00:50 только в секундах, т.к. к примеру time_sdelki = 1543578360 (это 14:46 текущего дня)" then   …… 

Путем умножения, как вы предлагали часов на 3600 + минут на 60 + секунды мы не придем к формату time_sdelki. Сергей, Вы профи, а я начинающий поэтому могу не уловить с полуслова.

От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
Sergey Gorokhov написал:
Совершенно не понятно зачем это?Будет проще если Вы приведете конкретный пример, и поясните чем не устраивает предложенный вариант.
Если в ленте сделок просто время в секундах без привязки к дате, то этот вариант самый простой и меня устраивает.
Исполнение тейк-профита с отступом 0 и защитным спредом 0
 
Добрый день. Скрипт выставляет заявку типа стоп-лимит и тейк-профит с параметрами для тейк-профита отступ - 0 и спред -0. Исполнение по тейку бывает на 1-2 пункта хуже. Не совсем понимаю почему, т.к при достижении условия выставляется лимитированная заявка с нулевым отступом от условия. Это можно победить? Параметры выставляемой заявки проверял, все выставлено верно.
От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
Sergey Gorokhov написал:
Простая математикачасы умножаем на 3600 + минуты умножаем на 60 + секунды
Сергей, мне это понятно, с математикой все хорошо. Просто время в ленте сделок, а сравнивать я буду именно с ним, насколько я понимаю не просто время в секундах, а время в секундах от какой-то древней даты))) Вот я подумал, что нужно переводить мои "10.00.50" в тот формат каким-то образом. Возможно я что-то опять не так понял))
От какого времени вести отчет для создания своего таймфрейма?
 
Цитата
Sergey Gorokhov написал:
А почему просто не перевести время в количество секунд, и потом нормально сравнивать?
Наверное не правильно изложил свою мысль. Мне это и нужно. Как это сделать?
От какого времени вести отчет для создания своего таймфрейма?
 
В данный момент делаю так:
Из OnAllTrade получаю время последнего трейда. Если оно к примеру больше чем 10.00.50, то сканирую ленту сделок от 10.00.50 до 10.00.00. Далее делаю расчет и т.д.
В этом случае мне не нужно ни время сервера ни системное время. Вопрос в том, как стартовое время 10.00.50 текущего дня перевести в формат POSIX.
От какого времени вести отчет для создания своего таймфрейма?
 
Добрый день. Есть необходимость создания своего таймфрейма, а точнее сформировать 5 последних 10-секундных свечей. Каждые 10 секунд скрипт будет перебирать ленту сделок и производить расчет максимума, минимума, открытия и закрытия 5 последних свечей. Проблема в том, что не знаю, какое время взять за точку отсчета. Время сервера, время системы или еще что-нибудь.  
Выставление стоп-заявки со связанной заявкой, Если не трудно скиньте пример
 
Вопрос снимается. В соседней теме есть информация о том где можно найти примеры.
https://forum.quik.ru/forum10/topic4090/
До создания темы пытался найти самостоятельно, но увы не нашел.
Выставление стоп-заявки со связанной заявкой, Если не трудно скиньте пример
 
Если не трудно скиньте пример выставления стоп-заявки со связанной лимитированной заявкой. Параметр trans_id лимитированной заявки и стоп-заявки будет одинаковый?
Обновление пользовательской таблицы/окна
 
На другом компе со sleep 100 работает, а с SetWindowCaption также нет.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Хотя есть идея попросить повторить на другом компьютере, если это возможно.
Да, конечно. Попробую минут через 40.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
message("begin")sleep(100500)message("end")что произойдет?
Работает. Второе сообщение получил с нужной задержкой.
Цитата
Sergey Gorokhov написал:
И уточните версию терминала.
7.19.3.1
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Возможно терминал чем-то нагружен?
Нет ничего лишнего. Один инструмент и один график. Скрипт тоже один.
Цитата
Sergey Gorokhov написал:
Лечится это как уже говорили другие пользователи принудительной перерисовкой окна
Это вариант работает, только окно постоянно активно и соответственно невозможно сделать активными другие окна.
Цитата
Sergey Gorokhov написал:
увеличением sleep до значений больше 50
Блин, ставил и 100 и 200 - в моем случае нет результата. В данный момент выделяю 2 строки поочередно и все обновляется каждый тик. Мигание правда достает, а так результат достигнут.
Да и забыл сказать стоит в main добавить строку обращения к графику по идентификатору т.е. чуть подгружаем скрипт и все сразу работает. Почему со sleep не прокатывает сам не пойму.
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
Запустил ваш код - также на работает. Каждый тик данные не обновляются.
Даже больше скажу, чередовал наименования
SetWindowCaption(t_id, "ООО")
SetWindowCaption(t_id, "ОGО")
результата нет.
Обновление пользовательской таблицы/окна
 
Запустил ваш код - также на работает. Каждый тик данные не обновляются.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
или SetWindowCaption
Только что запускал. Не работает. Меня бы устроил это вариант, но что-то не получается. Вы в main или PasteTable() SetWindowCaption добавляли? Хотя разницы как я понимаю никакой.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Возможно кроме него что то еще запущено?
Нет, ничего. Проблема воспроизводится именно на коде, который я выкладывал выше. Тестировал на 3 разных и чистых квиках у 2 разных брокеров. Один из пользователей (выше найдете) запускал мой код, проблема подтвердилась.
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
Все работает. Сам затупил, слетел идентификатор.
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
Цитата
Sergey Gorokhov написал:
Да можно.
Почему-то nil получаю. Пошел искать ошибку.
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
Подскажите, можно ли получить "open" текущей свечи, не дожидаясь ее закрытия?
Обновление пользовательской таблицы/окна
 
Проверил.
SetWindowCaption не работает даже если чередовать название.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Это не единственный способ, можно также использовать SetWindowCaption
Вчера проводил эксперимент - не сработал этот вариант. Только выделение строк по очереди или изменение размера окна. Проверю еще раз сейчас.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
К сожалению других вариантов предложить не можем.
Очень жаль.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Нет, это не так.Проверьте еще раз внимательней.
Повторяю, проверено!
Цитата
Sergey Gorokhov написал:
Вариант уже был предложен.
Ну, что вот за поддержка??? Рядовые пользователи дают реальные полезные советы, стараются оказать помощь друг-другу, а тут отписки одни. Выше человеку написали, что проблем нет в ваших квиках все летает и не лагает! Проверено с задержкой 1000 на трех чистых квиках у двух брокеров! Да и не в этом дело даже! Внимательно читайте вопрос.... Как заставить обновлять данные в таблице каждый тик НЕ ТОРМОЗЯ СКРИПТ!!! Если это не возможно - так и напишите, оставлю свое решение - это когда по очереди выделяются две строки.
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
И SERVERTIME тут не причем
Я и не утверждал, что проблема в SERVERTIME
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Сделайте sleep(100) тогда проблемы не будет.
Проблема будет даже при  sleep (1000), проверено до обращения к вам.
У меня вопрос не в том, как затормозить скрипт, а как сделать так, чтобы данные в таблице обновлялись с каждым тиком.
Обновление пользовательской таблицы/окна
 
Хотелось бы услышать комментарии поддержки.
Обновление пользовательской таблицы/окна
 
Цитата
BlackBoar написал:
Мне это кажется скорее неправильным, вам же может потребоваться и правда перенести окно. А скрипт не дасть.
Вы правы, к тому же окно скрипта всегда активно, невозможно сделать активным другое окно.
Обновление пользовательской таблицы/окна
 
Кстати, приятная плюшка от добавления пары строк с SetWindowPos.
Теперь окно скрипта всегда поверх всех окон и ему также не страшно случайное перемещение. Окно сразу появится на своем законном месте))))))))))  
Обновление пользовательской таблицы/окна
 
Цитата
Nikolay написал:
Я плюнул искать причины. Перенес отрисовку части вещей в колбеки, хоть это и не самый лучший вариант.
В строках с SetWindowPos сделал рзброс в 1 пиксель по вертикали. Не раздражает, небольшое мерцание нижней границы таблицы.
Один вопрос к поддержке:
Неужели это нормальное решение вопроса?)))
Обновление пользовательской таблицы/окна
 
Цитата
BlackBoar написал:
Приходит в голову попробовать SetWindowPos
Это ппц)))
SetWindowPos работает)))))
добавил 2 строки с разными параметрами, теперь моя таблица не только мигает, но и танцует, точнее подпрыгивает)))))
Обновление пользовательской таблицы/окна
 
После PasteTable()
добавил выделение строк 1 и 2
SetSelectedRow(t_id,1)
SetSelectedRow(t_id,2)
Все работает, данные обновляются с каждым тиком, точнее с каждой имитацией тыканья мышкой)) правда таблица стала похожа на цветомузыку)))
Интересная особенность в том, что при "тыкании", строки нужно чередовать. Если "тыкать" в одну строку данные обновятся 1 раз и больше обновляться не будут.
Можно ли иным путем решить вопрос? Не очень мне нравится мой креативный подход)))
Обновление пользовательской таблицы/окна
 
Цитата
BlackBoar написал:
Вы уж простите, я невеликий "писатель" на луа, предпочитаю делать все что можно на С++. Я поэтому попросту не знаю правильный ответ для луа. Скорее всего проще дождаться пока завтра поддержка придет, как-то наверняка можно.
В любом случае спасибо, что откликнулись.
Обновление пользовательской таблицы/окна
 
Цитата
BlackBoar написал:
Чтобы окно перерисовалось оно должно получить сообщение WM_PAINT. Вот если в окно мышой ткнуть, оно такое сообщение точно получает.
Это действие можно имитировать путем добавления какой-либо команды в main?
Обновление пользовательской таблицы/окна
 
Цитата
Александр написал:
добавь задержку. мне помогло при перерисовывании таблицы.
Ваша логика мне ясна, но хочу понять, почему есть команда, которая не выполняется. Есть ошибка в скрипте или в LUA???
Самое интересное, что после оптимизации ранее написанного мною скрипта появились эти лаги. Сутки потратил на поиск ошибки, допущенной при оптимизации. Выкинул все, оставив время сервера - лагает)))) Т.е. пока скрипт был кривой и сильно загружен данные обновлялись исправно. После разгрузки - пока не ткнешь в таблицу данные не обновятся или обновятся с большой задержкой.
Принципиально хочу не тормозить скрипт, а сделать так чтобы команда SetCell добавляла данные каждый тик.
какие будут предложения?
Обновление пользовательской таблицы/окна
 
Добрый день!
Неужели некому помочь?
С каждым тиком из main вызывается функция PasteTable(), в которой, строка
SetCell(t_id, 1, 1, tostring(SERVERTIME)
добавляет данные в таблицу. Почему они не добавляются пока не ткнешь в таблицу мышкой???
Ради интереса воткнул в эту функцию строку записи в лог времени сервера
to_log(tostring(SERVERTIME)). Все пишется с каждым тиком. т.е. проблем с получением времени сервера нет.
Почему в текстовый файл данные пишутся с каждым тиком, а в таблицу нет?
Что нужно сделать чтобы таблица обновлялась с каждым тиком?
Обновление пользовательской таблицы/окна
 

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

Код
Run = true;
 
function main()

 CreateTable();
  
 while Run do
 
  SERVERTIME = tostring(getInfoParam('SERVERTIME'));
  
  PasteTable();
    
  sleep(10)
 
 end;
 
end;
-- Функция создает таблицу
function CreateTable()
   t_id = AllocTable();
  
   AddColumn(t_id, 0, "1", true, QTABLE_INT_TYPE, 15);
   AddColumn(t_id, 1, "2", true, QTABLE_INT_TYPE, 10);
   t = CreateWindow(t_id);
 
   SetWindowCaption(t_id,tostring("ООО"));
   SetWindowPos(t_id, 0, 0, 302, 864);
   InsertRow(t_id, -1);
   InsertRow(t_id, 0);
   InsertRow(t_id, 2);
   
end;
  
-- Функция заполняет таблицу
function PasteTable()
   SetCell(t_id, 1, 0, "Время:");
   SetCell(t_id, 1, 1, tostring(SERVERTIME)); 
end
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
Suntor написал:
Оно и не получится логически. Если удалите индексный элемент, индекс которого время в секундах, то остальные элементы сдвинутся и поменяют свои индексы, а значит и время. Поэтому, последующие обращения по времени вернут данные не для тех свечей... собственно, поэтому, как я и написал в первом сообщении, просто присваивайте nil элементу таблицы с соответствующим индексом.
Я понял. Спасибо!
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
Suntor написал:
Первая ячейка есть только для индексированных таблиц, то-есть для массивов. Для них же работают ф-ции table.insert и table.remove, которые понимают этот индекс, и умеют сдвигать остальные элементы таблицы при вставке и удалении элемента, что занимает время и ресурсы, особенно для больших таблиц. Поэтому сама идея, удалить первый элемент таблицы, а потом ждать, пока вся таблица перестроится, не слишком удачная, где она не является самоцелью... так сказать. Когда же вы присваиваете nil, элементу таблицы, то вне зависимости от того, индексная эта таблица или нет, никакого перестроения таблицы не происходит.

Поскольку в качестве ключа вы используете number возвращаемый ф-цией os.time, то ваша таблица индексная, но начинается не с первого элемента, а с 1,5 млрд.-ого... поэтому, особого смысла удалять 1,5 млрд.-ый элемент через table.remove, чтобы 1,5 млрд.+1 элемент и все остальные сдвинулись на его место нет. Заведите переменные хранящие начало и конец вашего массива, и сдвигайте их вперёд по мере удаления старых через nil сначала таблицы и добавления новых к концу вашей таблицы.
Мысль понятна. Не буду заморачиваться с удалением 1-го элемента.
Поскольку данных за торговую сессию будет немного, буду обнулять массив в начале следующего дня. Всем спасибо за советы.
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Возможно я не правильно объяснил задачу... Мне нужно удалить именно первую ячейку не ссылаясь на ее ключ.
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
Suntor написал:
Присвоить ему значение nil:
Array3Min[os.time(t[N-2].datetime)] = nil
Спасибо.
А как удалить первое значение? Дело в том, что ключом каждого значения, в моем случае, является время бара в секундах, т.е. данные идут не строго одни за другими (как например Array3Min[1] = KF, потом  Array3Min[2] = KF и т.д.).  
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Поступил следующим образом:
При выполнении ряда условий производится расчет который записывается в массив. Ключом является время бара в формате posix.
Array3Min[os.time(t[N-2].datetime)] = KF
По этому ключу, т.е. по времени бара легко достаю нужный мне, ранее сохраненный расчет.
Подскажите каким образом удалять все данные из массива (это я буду делать ежедневно по времени).
Как удалить первый элемент? Я так понимаю, что table.remove(Array3Min, 1) здесь не прокатит?
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
Александр написал:
Создать в скрипте таблицу candleInfo = {}, записывать туда время бара и своё расчётное значение table.insert(candleInfo, {currentCandle["datetime"] ,calcValue}), ну а потом сделать функцию для поиска по таблице. Перебирать бары, брать их datetime и через SearchItems искать в таблице candleInfo.
зы. На практике не проверял, но вроде как годный алгоритм и без всяких индикаторов
Смысл понятен. Начинаю лепить)) Спасибо за совет.
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Необходимо при выполнении нескольких условий произвести расчет и присвоить результат конкретной свече так, чтобы потом обращаясь к номеру свечи эту информацию получить. Это можно реализовать в скрипте или обязательно делать через написание индикатора?
Вычитание из числа округленного до сотых числа округленного до сотых, В скрипте две переменных, округленные до сотых. Из одной вычитается другая. Результаты математической операции ниже:
 
Цитата
Suntor написал:
Вывод:Код0.15
0.14999999999999999Потому что десятичные дроби не раскладываются точно на двоичные по законам математики.
Вас понял. В моем случае все решается самописной функцией, которая округляет результат до сотых по "законам математики". Ссылка на решение выше. Спасибо всем кто откликнулся.
Страницы: 1 2 3 4 След.
Наверх