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

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

Страницы: Пред. 1 ... 55 56 57 58 59 60 61 62 63 64 65 ... 80 След.
Collision выводил название переменной массива
 
Сергей Орлов,
Если я понял правильно, то пишите Вы в corona , а здесь совсем другой огород.
Collision выводил название переменной массива
 
Правильно я понял, что пишите игрушки и сюда попали по cлову "lua" в поисковике ?
Подробнее напишите задачу, а то ответ получается такой Yy="y".
Не срабатывает while Run and trans_Status == nil do sleep(1); end;
 
Цитата
kvazar1988 написал:
Я ее частично позаимствовал. И где то она зацикливается при покупке и начинает бесконечно  покупать...
Тогда Вы не совсем правильно задали вопрос в теме.
--------------------------------
Правильно получается так:
-------------------------
"Почему эта программа где то зацикливается при покупке и начинает бесконечно  покупать."
----------------------------
Чтобы ответить на этот вопрос надо сделать следующее:
1) восстановить алгоритм по тексту
2) поставить отладочную печать
3) сравнить результаты в файле отладки с алгоритмом и найти ошибку, а может быть и не одну.
--------------------
Как думаете, кто-нибудь, кроме Вас, будет это делать?
=========================
Не срабатывает while Run and trans_Status == nil do sleep(1); end;
 
kvazar1988
Правильно ли я понял, что эту программу написали  не Вы?
версия 7.10
 
Спасибо за ответ.
Я решил проблему (даже если ее нет) отказавшись от обнаружения конкретного номера свечи.
Сейчас работаю с 7.5, когда снова возникнет желание обновить, то проверю.
Получить заново таблицу обезличенных сделок
 
проверить факт обновления без увеличения звгрузки очень просто
Надо запоминать текущий номер записи и при следующем входе сравнивать его с новым значением
Если новое значение существенно меньше (существенно - это для защиты от дозаписи) то есть факт обновления.
------------------------
Все гениальное - просто.
Ссылка на графики и условие покупки
 
Цитата
kvazar1988 написал:
Как указать ссылку на график цены?
Как указать ссылку на индикатор Parabolic SAR?
Как указать условие покупки или продажи - пересечения Parabolic SAR с ценой?
откройте окно редактирования графика.  В "Дополнительно" запишите Идентификатор для графика цены и для Parabolic SAR. Это будут их tag.
после этого используйте эти функции.
Функции для работы с графиками
Получить заново таблицу обезличенных сделок
 
полагаю, что можно отследить факт обновления таблицы.
версия 7.10
 
Цитата
Sergey Gorokhov написал:
Николай,
В 7.10 в этом месте ничего не менялось. Изменения были, но в 7.7:
Цитата
Изменен вывод информации функциями O, H, L, C, V, T по свечкам, сформированным
на пустых интервалах. Теперь, для таких свечек, функция T возвращает время
интервала, а функции O, H, L, C, V возвращают nil. Для корректной проверки
существования свечи на графике добавлена новая функция CandleExist().
Собственно, у нас на 7.10 ситуация не воспроизводится.
Если требуется анализ, опишите подробней при каких обстоятельствах проявляется проблема.
Добрый день,
Просто я пропустил все предыдущие серии и перешел с 7.5 сразу на 7.10.
------------------------
Проблема следующая. Если в одном В одном окне несколько областей, то, при разной длине истории, на более коротких графиках будут пропущены начальные значения.
В результате эти графики будут начинаться не с 1 , а с других в общем случае произвольных значений.
Т е в скриптах индикаторов на этих графиках никогда не появится индекс равный единицы.
Это усложняет обнаружение момента, когда индикатор перерисовывается при изменении его параметров.
--------
. Вот пример.
Во второй области на графике отсутствуют начальные значения. В версии 7.10( очевидно и в 7.7)  индекс начинается с 93.
Индикатор читает файл
 
s=_G["table_"..Settings.letter][20000101]
версия 7.10
 
Добрый день,
Если я правильно понял, то  в версии 7.10 при отсутствии свечей OnCalculate не вызывается.
При этом индекс считается и OnCalculate будет вызван первый раз при произвольном индексе больше  1.
--------------------------------------------
Вопрос к разработчикам:
1) Каким образом можно определить,
что данная свеча первая в индикаторе, если ее номер может быть любым?
Раньше это определялось до безобразия проста по индексу равному 1.
--------------------------------
2) Каким образом определять тот факт, что индикатор строится заново?
-------------------------
Спасибо.
-----------------------
P.S.: откатился на 7.5.
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
Вот еще информация к размышлению.
Результаты тестирования серверов биржи в 2015 году показали следующее:
Максимальная производительность серверов Центрального Звена ТКС в ТЦ Space.
Скорость обработки в сек:
Транзакции 18884; Заявки 10782; Cделки 1775.
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
Цитата
PFelix написал:
И третье.
Если Вы, конечно, правы относительно протокола UDP.
Биржа, ЧТО, разными протоколами данные шлет?
Ленту - одним (TCP, БЕЗ пропусков), остальное - другим?
посмотрите эту статью
https://habrahabr.ru/company/itinvest/blog/243657/
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
Для особо настойчивых хочу сообщить, что синхронизацизировать эти потоки вообще невозможно.
Если я правильно понял протокол биржи то эти потоки биржа выплевывает по протоколу UDP.
если кто-то из брокеров что-то не получил, то это проблема брокера.
Он конечно может запросить пропуски по протоколы TCP, но это ему нужно?
Кроме того, полагаю, что сервер брокера делает парсинг потоков чтобы раздать их клиентам.
Период раздачи информации биржей для срочного рынка от 10 мс и более.
Делают даже специальные задержки чтобы жизнь не казалась медом.
OnTrade(trade) шалит, выполняется больше одного раза для сделки
 
данный вопрос уже обсуждался.
Если не ошибаюсь, то это связано с какими-то параметрами сделки, которые теперь изменяются позже.
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
Иван Ру,
Возможно я не понял Вашу задачу, но хочу обратить внимание на неточность в Ваших рассуждениях.
------------------------------------------
Во-первых, тот факт что пакеты в TCP соединении  приходят последовательно  не может знать пользователь винды.
Речь идет о пакетах протокола TCP и они собираются стеком TCP, что пользователем не доступно.
---------------------------------------------
Во-вторых, интернет построен на маршрутизаторах - а это и есть разное время движение пакетов и возможность их прихода как раньше так и позже.
--------------------------------------------------------
В-третьих, время сервера брокера - это время когда в терминал пришла последняя партия данных с сервера. Это может быть и не стакан.
----------------------------------------------------
В-четвертых, поток сделок тоже идет блоками. В одном блоке, который придет в одно время сервера будут сделки с различным временем биржи.
-----------------------------------------------------
В итоге,
сделкам совершенным в разное время будет соответствовать одно и тоже время сервера брокера, а это значит,
сделки могут опередить заявки в стакане, по которым они совершены.
---------------------------------------
Поэтому в терминале QUIK и на обычных каналах интернет возможна синхронизация сделок и заявок лишь очень примерно.
----------------------
На это я и пытался обратить Ваше внимание.
Как узнать по какой цене сработал TAKE_PROFIT_AND_STOP_LIMIT_ORDER?
 
Цитата
Sergey Gorokhov написал:

-Раздел 5. Торговые операции клиента
--Условные (стоп-) заявки
пункт 5.
благодарю,
очевидно пропустил читая.
Как узнать по какой цене сработал TAKE_PROFIT_AND_STOP_LIMIT_ORDER?
 
Возник вопрос по этой теме.
----------------------
Предположим:
1) цена превысила уровень активации и включился механизм отсчета
2) В следующий момент цена последней сделки ушла вниз на величину большую чем защитный спред, т е возникли условия выставления лимитированной заявки по тейк-профит .
3)  эта цена также  ниже, чем STOPPRICE2, возникло условие выставление лимит заявки по стоп-лимит.
-------------------------------
Вопрос к знатокам:
По какому из этих двух условий сервер выставит лимитированную заявку.
или иначе сформулирую:
какое из условий проверится раньше и будет ли проверятся второе, если первое истина.
--------------------
Зная ответ , можно написать скрипт для однозначного определения что сработало.
======================
Вообще-то, можно просто при срабатывании найти максимум цены и просчитать данную ситуацию, т е получить ответ на вопрос - что сработало.
-------------------
спасибо
Срочно! Исправтье логическую ошибку при вводе заявки, Потерял на этом деньги
 
А вопреки какой логики?
Дайте ссылку на документацию квика с описанием этой логики.
Спасибо
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
Цитата
PFelix написал:
Такой сложный вопросили раскрыл САКРАЛЬНОЕ ЗНАНИЕ?
Ответ на свой вопрос Вы найдете изучив следующее:
1) Особенности обмена информацией при использовании Интернет
2) Особенности протокола TCP. Понятие пакетной передачи, маршрутизации.
3) Алгоритм Нейгла(Нагла)
Успехов
Экспорт в Metastock из своей программы на C#, C++ ...
 
Цитата
Дмитрий написал:
Добрый день. Вопрос не совсем по quik, но буду благодарен, если кто-нибудь мне поможет.
Для анализа данных хочу написать свою программу, которая по нажатию кнопки будет отправлять свечу OHLC в metastock. При каждом нажатии кнопки должна появляться следующая свеча. Так сказать имитация онлайн торгов.

Ну и вопрос, как подключиться к metastock из своей программы ? Как это делает Quik ? Может можно как-то задействовать файлы winros.exe и iwr.dll из своей программы ? Может есть где-то какая-нибудь документация ? Направьте, пожалуйста меня в нужном направлении.
Эта задача сложная так как Вам надо изучить формат метастока, что не очень доступно.
кроме того метасток очень ограниченная программа и древняя.
Посмотрите в сторону амиброкера.
Для него  есть и хорошее API и документация и найдете примеры решения в инете и программа развивается.
Где лучше всего брать Демо для тестирования FORTS?
 
Цитата
DARK написал:
Здравствуйте, подскажите у кого регать демо акк forts, что бы не было ограничений (типо можно на демо торговать только в лонг и тд) + что бы данные графика были идентичные как на реал акке(данные графика интересуют, а не стакана), Скиньте пожалуйста линк.
На демо невозможно ничего реального тестировать и не мечтайте.
Демо исключительно для вылавливания ошибок в коде программы,
а не для отладки торговых алгоритмов.
--------------------------------
торговые алгоритмы отлаживаются либо в программа тех анализа например амиброкер,
либо в квике на реальных торгах,
без выставления реальных заявок а с эмуляцией их.
Как узнать по какой цене сработал TAKE_PROFIT_AND_STOP_LIMIT_ORDER?
 
Цитата
PFelix написал:
Здравствуйте.
Однако, я правильно понимаю, (возвращаясь к ПЕРВОНАЧАЛЬНОЙ теме обсуждения):
Что, если ПРЕЖДЕ пришел калбек с флагом "расчет", то сохранив "данное знание в переменной",
"по исполнении" мы можем ОДНОЗНАЧНО понимать "в какую сторону" выполнилась стоп-заявка?
Т.е. если с таким флагом калбек был, значит, - в тейк, иначе - в лосс.
Так как тейк-профит по смыслу это ограничение прибыли, а стоп-лосс - ограничение убытков,
то рекомендую определять факт закрытия позиции так:
Если вышли с прибылью - то сработал тейк, а если с убытком - то стоп.
Как экономнее написать код
 
Цитата
Let_it_go написал:
Спасибо, Николай.
Я хочу получить таблицу-контейнер, в которой будут храниться цены за последние how_many_candles свечей (how_many_candles-пользовательская переменная, например равная 50). В контейнер будет записываться типическая цена (Typical).
Всё это нужно для создания синтетических инструментов и их анализа. Я хочу получить значение пары GAZP/SBER: сколько сберов надо отдать за 1 Газпром, получить по GAZP/SBER цены за  how_many_candles свечей и эти данные загнать в индикаторы Сергея Горохова INDICATORS.ZIP. Например посчитать RSI по паре GAZP/SBER
Вопрос о финальной стадии "запихивания" я задал в этой ветке.
https://forum.quik.ru/forum10/topic2733/
Что то не клеится при расчёте RSI. Вот весь код, который на данный момент сырой и глючный.
Код
 
Про контейнер
В приведенном мною варианте Вы получите
таблицу container[sec] в которй будут все ваши цены
далее вы просто берете от конца этой таблицы нужное вам число значений
т е
делаем так

Код
local t=container[sec]; --это таблица цен по данному инструменту
local len=#t -- это текущее количество цен в контейнере
local n=len-N; if n<1 then n=1; end -- это номер первого из N значений цен т е Ваши цены в t[n] до t[len]

Теперь про индикатор
Я бы не использовал функции из INDICATORS.ZIP, по той причине, что они слишком универсальны и следовательно громоздкие.
Я использую обычно один из следующих вариантов:
1) использую встроенную RSI и читаю значения с графика, когда лень или нет надобности в 2).
2) беру  формулу и пишу функцию под задачу без излишеств.
Как узнать по какой цене сработал TAKE_PROFIT_AND_STOP_LIMIT_ORDER?
 
Цитата
PFelix написал:
Здравствуйте.
Полагаю, не стоит создавать тему для аналогично однозначного ответа на мой вопрос.
Поэтому пишу сюда.
Подскажите пожалуйста, как будет реагировать "система" в случае "несколько нестандартном".
Допустим я разработал ТС, в которой ожидаю повторных "ударов рынка в уровень".
Для этого я использую стоп-заявку TAKE_PROFIT_AND_STOP_LIMIT_ORDER,
в которой защитный спред равен по величине отступу, но отрицателен.
Вопрос в том, останется ли стоп-лосс-половинка этой заявки в активном состоянии после того, как
условия по стоп-цене 1 выполнились (фаза расчета прошла), отступ тоже "сработал".
Если мы рассчитывали на рост (поставили продажу), стоп-заявка должна выставить лимитную по хаю в сделке. Это - ВСЁ?
После того, как срабатывает фаза расчета, защитная часть стоп-заявки снимается?
Спасибо.
эту стоп заявку исполняет сервер.
Сначала заявка вне расчета.
следующий шаг - расчет.
Следующий - сработала стоп-заявка и сервер выставил заявку на биржу.
Все закончилась стоп-заявка и сервер ее удалил.
Поэтому ничего не останется. все стандартно.
Функция фракталы
 
Цитата
Pavel написал:
Спасибо.
Первый вариант не подойдет по причине движения графика и когда образуется фрактал заранее не узнать.
Попробую через массив...
Хотя вроде эти же фракталы определены стандартным индикатором и наверное можно вытащить значения цены на этих свечах.
Вот сделал функцию которая выбирает все фракталы
https://yadi.sk/d/0eUVB7mC3HFpmH
скапируйте этот файл в каталог индикаторов "LuaIndicators" который в каталоге QUIK
Вот пример индикатора в котором используется эта функция
В окне сообщений покажет все номера выбранных фракталов
Код
--title="<Nikolay Kamynin> kamnik@mail.ru"
Settings={
f1 ="fractals",  -- это идентификатор индикатора фрактал его надо записать в дополнительные параметры индикатора
Name = "*nk_fr_get", --имя этого индикатора
mline=0, --номер линии с графиком фрактал
}
-- выбираем фракталы в результате будет создана таблица tf
-- tf - таблица номеров свечей с фракталами
path = "./LuaIndicators/"
package.path =package.path..";"..path.."?.luac;"
require "nk_get_fr";
----------------
function Init()
 Settings.line={}; Settings.line[1]={Name = "A",Color = RGB(0,255,0),Type =1,Width = 2   };
return #Settings.line;
end
---------------
function OnCalculate(i)
  nk_get_fr.get_fractals(i);
  if i==Size() then
   local m=1; while #tf>m do  message(tostring(tf[m]),1);    m=m+1; end
  end
end

Функция фракталы
 
Начинаете с 1 и ищите до текущей свечи.
Когда найдете, то запомните номер свечи в таблице и начнете с этого номера
В результате получите таблицу, в которой будут номера свечей фракталов слева направо.
Последний фрактал всегда будет последним в таблице.  
Т е то, что Вы хотите.
Функция фракталы
 
Цитата
Pavel написал:
Спасибо.
Первый вариант не подойдет по причине движения графика и когда образуется фрактал заранее не узнать.
Попробую через массив...
Хотя вроде эти же фракталы определены стандартным индикатором и наверное можно вытащить значения цены на этих свечах.
Вам не надо знать когда образуется фрактал, Вам надо его найти
Вы ищите от последнего найденного до текущей свечи.
Начинаете с 1 и ищите до текущей свечи.
Когда найдете, то запомните номер свечи в таблице и начнете с этого номера
В результате получите таблицу, в которой будут номера свечей фракталов слева на права.
Последний всегда будет последним в таблице потом слева предпоследний и так все существующие.
Т е то, что Вы хотите.
Как экономнее написать код
 
Цитата
Let_it_go написал:

Цитата
function mycallbackforallstocks(class,sec,index)

   local num_candles=ds[sec]:Size()
   if index==num_candles then        
   container[sec]={}
       for i=0, how_many_candles do
           local close_price=ds[sec]:C(num_candles-i)
           local open_price=ds[sec]:O(num_candles-i)
           local high_price=ds[sec]:H(num_candles-i)
           local low_price=ds[sec]:L(num_candles-i)
           local typical_price=(close_price+open_price+high_price+low_price)/4
             container[sec].=typical_price      
       end            
   end
end
Можно как-то так:
Код
function mycallbackforallstocks(class,sec,index) 
  if container==nil then container={} end
  if container[sec]==nil then container[sec]={} end
-----------------------------
  local close=ds[sec]:C(index)
  local open=ds[sec]:O(index)
  local high=ds[sec]:H(index)
  local low=ds[sec]:L(index)
  container[sec][index]=(close+open+high+low)/4
end
Как экономнее написать код
 
А что в итоге хотите получить?
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
Выкладываю байт код для создания индикатора арбитража как на предыдущей картинке
https://yadi.sk/d/BsGPAXPn3HFfyY
его надо поместить в каталог ...\QUIK\LuaIndicators
параметры индикатора:
Settings={
sec ="SBERP",  -- идентификатор  для первого графика
Name = "*ar_nkx", --имя индикатора
mline=0, --номер линии с графиком цены на первом графике
}

Чтобы открыть индикатор, надо встать мышью на второй график и добавить график *ar_nkx
В результате будет создан график по разности close второго и первого графиков.
Функция фракталы
 
Цитата
Pavel написал:
Спасибо за ответ.
Попытаюсь объяснить по другому. Мне нужно вывести 4 значения максимумов или минимумов свечей последних фракталов. На настоящем этапе я не могу получить значение даже одного. Каким образом это можно сделать?
Что за индикатор дает такую картину?
Есть два варианта.
1) Читаете график с экрана и ищите не нулевое значение (не помню точно в каком из параметров )  это значение будет всегда на несколько свечей назад. Так двигаясь справа налево ищите ненулевые значения сколько надо .
-----------------------------------------------
2) Строите сами экстремумы функции цены ( это и есть "фракталы",  но это название математически безграмотное , поэтому правильно их называть экстремумами )  Как определить экстремум можно найти в любом справочнике по математике или в интернете.
Эти экстремумы строите слева направо и пишите их в массив.
В результате получите все экстремумы (я их называю экстремумы первого уровня).
Ну и так далее...
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
Сейчас нарисовал алгоритм арбитража
Вроде бы перерисовывается при смене масштабов в реале посмотрим в понедельник.
Суть алгоритма следующая
Поясняю на примере арбитража сбербанка
На 1 графике помещаем себрбанк -П и он его метим меткой т е его будет читать по getCandlesByIndex
На втором графике размещаем сбербанк обычка
На третьем графике размещаем разность цен (арибтраж) который связывается со сбербанком обычкой.
-------------------
в результате получается следующее:
арбитраж строится по обычке,
прием графиков в окне идет последовательно поэтому первым принимаются данные по префам.
вот такая картинка в итоге:

 
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
нашел в архиве эту задачу.
У меня для нее была написана специально dll колбека для обмена информацией между графиками.
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
Я решал подобную задачу для арбитража.
Давно это было, поэтому пишу примерно.
Способ решения примерно такой.
На каждом тике проверяется количество свечей на графиках и если оно изменилось то перерисовывается график до последней свечи с минимальным номером.
Функция фракталы
 
В качестве пример привожу картинку правильного индикатора, который не заглядывает в будущее и строит все возможные уровни сопротивления и поддержки для имеющейся истории.
Функция фракталы
 
Объясняю про фрактал.
Эта функция написана плохо по следующей причине, так как она заглядывает в будущее.
В ней как можно заметить используется поиск максимума и минимума на некотором интервале истории. т е функция работает назад.
А значения на график выставляет задним числом тоже назад.
-------------------------------
Т е например на графике 10 свечек.  фрактал нарисован над 5- той.
Но когда было 6 свечей фрактала над 5-ой не было и когда 7 и когда 8 и вот когда стало 9 фрактал появился над пятой свечой.
-----------------------------------
Т е функция найдет этот максимум после того как на графике нарисуются , например,  8 свечей и поставит фрактал на 5 свечу, когда нарисует уже 9-ю.
-----------------------------
Поэтому такие индикаторы называются - индикаторы заглядывающие в будущие.
Обычно на таких индикаторах очень хорошо работают торговые роботы на истории и потом плохо работают такие роботы в реале.
Поэтому и фрактал надо искать назад в прошлое.
Время сервера сильно отстает от эталонного
 
Цитата
Алексей написал:
Цитата
Sergey Gorokhov   написал:
Алексей  ,
Время сервера это время сервера брокера. А время на сервере брокера совершенно не обязано совпадать со временем на Вашем компьютере и временем в торговой системе. Тем более что разных торговых систем великое множество, а не только МБ.
Если время отставания всегда примерно одинаковое, можно судить о том что где-то часты отстают, либо на оборот спешат.
И что такое "эталонные часы"? Какой-то супер NTP сервер? Если так, то никто обещал, что все биржевые площадки и все брокера и все компьютеры мира синхронизируются именно с ним и добиться этого, при нынешнем уровне технологического развития, не представляется возможным.
Вопрос был не о том, почему Сбербанк не выставляет время на своих серверах по моему компьютеру , а о том, что, похоже, данные на клиентский QUIK поступают с задержкой в более 3 секунды?

"Эталонные часы" я действительно забыл взять в кавычки. Разумеется - это время какого-либо популярного NTP сервера (timeserver.ru, time.windows.com, time.nist.gov, *.vniiftri.ru или случайного из ru.pool.ntp.org и т.д.) Только вот друг от друга они не отличаются более, чем на 1 с, а часы 2-х серверов Сбера всегда отстают на 3-5 с.
На активно торгующихся инструментах видно, что свечки обновляются явно по часам "SERVERTIME".
Кроме того, насколько я понимаю, getInfoParam("SERVERTIME") ЭТО ВОВСЕ НЕ ВРЕМЯ НА СЕРВЕРЕ БРОКЕРА!
Это время заключения последней обезличенной сделки по часам БИРЖЕВОГО сервера (время торговой системы), информация о которой дошла наконец до клиентского терминала QUIK.
Другими словами, это getInfoParam("LASTRECORDTIME"), только без "отмотки" времени назад из-за запоздавших данных.

Отсюда и вопрос:
Клиентский терминал QUIK получает биржевую информацию с запаздыванием на 3-5 секунд от времени фактического заключения сделок на бирже или часы сервера брокера синхронизированы с часами серверов биржи и, значит, запаздывания нет, а просто они все скопом отстают от тех NTP серверов, которыми я пользуюсь?

P.S.
    Скрытый текст        Sergey Gorokhov   написал:
Если так, то никто обещал, что все биржевые площадки и все брокера и все компьютеры мира синхронизируются именно с ним и добиться этого, при нынешнем уровне технологического развития, не представляется возможным.
Цитата
Binary protocol TWIME for derivatives market specification:
2.1.4. Date and time
<type name="DeltaMillisecs" description="Milliseconds per one timeout" maxValue="60000" minValue="1000" presence="required" primitiveType="uint32"/>
<type name="TimeStamp" description="Time in number of nanoseconds since Unix epoch, UTC timezone" maxValue="18446744073709551614" minValue="0" nullValue="18446744073709551615"
presence="optional" primitiveType="uint64"/>
Если биржа на срочном рынке использует в протоколах выставления заявок Timestamp такой точности (10e-9 с), то я сильно сомневаюсь, что часы торговой системы выставлены "от балды". Уверен, что они действительно отклоняются от Эталонного (без кавычек) UTC не более, чем на 10мс.
Нынешний уровень технологического развития позволяет получить через интернет от Российских Stratum-1 ntp серверов (тот же vniiftri.ru) эталонное время с точностью не ниже +-1мс, а по специальным каналам связи на 1-2 порядка точнее.
При этом все мировые Stratum-1 серверы синхронизируются друг с другом с точностью до 1 мкс, иначе никакой GPS или Глонас не работали бы.
В действительности все немного иначе.
На основе собственных экспериментов могу сказать следующее:
----------------------------
1)  при синхронизации часов на компе с эталоном, ошибка удаляется постепенно.
На это порою уходит несколько часов (в винде для этого есть специальный алгоритм) , чтобы ошибка стала в пределах 100 ms.
-----------------------
2) реально ошибка часов компа с эталоном составить от 10 до 100 ms после нескольких часов работы после включения компа.
-----------------------
3) Отставание часто наблюдается при сильной загрузке компа
Проверить это можно посмотрев в диспетчере задач % использования ЦП
---------------------------
4) Отставание возможно при большом числе графиков на экране (будет большой процент ЦП)
------------------------
5) Отставание возможно при вялотекущем трафике (особо в вечернюю сессию)
-----------------------------
6) Отставание возможно при резком движении рынка и фактической перегрузке  сервера брокера
----------------------------
7) Есть отставание в формировании свечей как правило это 1-3 секунды,
полагаю это так работает сервер брокера при формировании свечей.
-------------------
Если указанных выше причин не наблюдается, то отставания практически нет.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
Sergey Gorokhov написал:
Николай  Камынин  ,
Ваш пример не работает на пустых интервалах.
Собственно это есть цель данной ветки форума, о чем и был мой пример выше, а не о том как считать SMA.
Ваш же пример на пустых  интервалах сразу же ломается.
Не говоря уже о том что Ваш индикатор рисует нулевую свечку в начале, да и вообще значения индикатора от чего-то больше оригинальных (сравните со встроенном SMA).
В общем не то.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Код
Settings = {
   Name = "nk_SMA",
   Period = 9,
   line = {{Name = "SMA",Type = TYPE_LINE, Color = RGB(255, 255, 0)}}
}

function Init() return #Settings.line  end

local P,i1=0,999;  local SMA,SUM=0,0

function jget(Y,i)
local m=i;  while(m>1 and Y(m)==0) do m=m-1; end;  return m;
 end

 --расчет скользящей средней на закрытой свече
 --- расчет выполняется один раз в момент открытия новой свечи
function OnCalculate(i)
   if i~=i1 then
      if i1>i then
         SUM=C(i); i1=0; SMA=0; P=Settings.Period;
      else
         x=C(jget(C,i1)); SUM=SUM+x;
         if P>=i1 then    SMA=SUM/i1;
         else
            SUM=SUM-C(jget(C,i1-P)); SMA=SUM/P;
         end
      end
   i1=i;
   end
    return SMA;
end


После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Пардон, действительно, что-то не то загрузил.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
s_mike@rambler.ru,
хочу обратить Ваше внимание на то, что "внутри свечи" находится невозможно, так как нет алгоритма расчета свечи (есть лишь картинка на графике четырех индикаторов).
Правильно говорить о количестве интервале времени от начала  истории (или сессии) и моменте времени внутри текущего интервала.
Если Вы будете придерживаться такой системы координат, то нет никакой разницы для вычислений, сколько свечей на графике нарисовано.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
Sergey Gorokhov написал:
Цитата
Николай  Камынин   написал:
что скажите о таком решении:
Слишком много ошибок
На каком инструменте Вы проверяли.
Я на сбербанке. ошибок нет график совпадает со встроенным индикатором.
Правда в отличии от Вашего решения ресурсов на порядки надо меньше.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
s_mike@rambler.ru написал:
Цитата
Николай  Камынин   написал:
Тут что-то не так.
При смене интервала или еще чего-то и повторной инициализации на первом индексе уже не будет тиков, поэтому ничто не умрет.
Для надежности можно поставить флаг и тем более ничего не умрет.
по-моему проблема больше недодуманная, т е надуманная.
Вы просто не поняли суть проблемы. Если количество свечей на графике == 1, то все приходящие тики имеют номер свечи == 1 в случае продолжения торгов в пределах этой же свечи.

Подумайте.
Понятно.
----------------
Я реально так не изгалялся, но для решения такой задачи могу предложить следующее.
В этой ситуации необходимо ввести некоторую систему координат,
которая позволяет нам определять место нахождения внутри этой свечи.
------------------------------
Например, можно определить начальную инициализацию и все остальные.
--------------------------
Т е инициализация при загрузки скрипта отличается от инициализации при пересчете.
-----------------------
Кроме того, при пересчете мы имеем  информацию о количестве тиков от начала свечи.
Это значение может быть системой координат внутри свечи.
Таким образом, каждый пересчет будет отличаться от предыдущего и поэтому будет управляемым.
Полагаю, что лишних телодвижений можно полностью избежать.
Примерно так.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Пока видится рабочим такой вариант:
Код
  Settings  =  {
   Name  =   "*SMA Example" , 
   Period  =   9 , 
   line  =  {{Name  =   "SMA" ,Type  =  TYPE_LINE, Color  =   RGB ( 255 ,  0 ,  0 )}}
}

 local  Index_tbl  =  {}
 local  SUM_TMP = {}

 function   Init () 
    return   # Settings.line
 end 

 function   OnCalculate (I)
    if  I  =  =   1   then 
      SUM_TMP  =  {}
      Index_tbl  =  {}
    end 
    if  CandleExist(I)  then 
       if  (Index_tbl[ # Index_tbl]~ = I)  then  Index_tbl[ # Index_tbl +  1 ] = I  end 
    else   return   nil   end 
   I  =   # Index_tbl
   SUM_TMP[I] = (SUM_TMP[I -  1 ]  or   0 ) + C(Index_tbl[I])
    if  I  >  =  Settings.Period  then 
       return  (SUM_TMP[I] - (SUM_TMP[I - Settings.Period]  or   0 ))/Settings.Period
    end 
    return   nil 
 end   
что скажите о таком решении:
Код
Settings = {
   Name = "*nk_SMA",
   Period = 9,
   line = {{Name = "SMA",Type = TYPE_LINE, Color = RGB(255, 0, 0)}}
}

local SUM,i_,SMA,m=0,0,0,0;
function Init() return #Settings.line  end

function OnCalculate(I)
   if I == 1 then SUM=0; i_=0; SMA=C(I);m=0; end
   if I~=i_ then
      if m>Settings.Period then  m=Settings.Period;
         if C(i_-m) then SUM-C(i_-m) end
      end
      if C(I) then SUM_TMP=SUM +C(I); m=m+1; SMA=SUM/m; end
   end
      i_o=I;
   end
   return SMA;
end

После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
s_mike@rambler.ru написал:

Например, для того чтобы проинициализировать индикатор, показывающий отдельно объем покупок и объем продаж, необходимо скинуть указатели на таблицу обезличенных сделок и начать сбор информации по ней с самого начала. Это необходимо, так как (в частности) необходимо строить внутренние таблицы исходя их установленного таймфрейма графика. Поскольку при проверке на равенство единице номера текущей свечи мы будем считать, что начат полный перерасчет всех свечей индикатора - мы будем как подорванные сканировать всю таблицу обезличенных сделок на каждом тике. Скрипт не умрет, а вот терминал - непременно )

Тут что-то не так.
При смене интервала или еще чего-то и повторной инициализации на первом индексе уже не будет тиков, поэтому ничто не умрет.
Для надежности можно поставить флаг и тем более ничего не умрет.
по-моему проблема больше недодуманная, т е надуманная.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Позвольте пару слов :
Формализуем задачу в общем виде.
-----------------------------------
Имеем исходные данные Y на множестве независимой переменной X.
Множества Y,,X имеют пропуски значений.
По исходному множеству Y рассчитываем дискретную функцию Z=f(Y,X);
Задача:
На новое множество  X1 ,  которое имеет пропуски Y1,  отобразить Z.
При этом начало множеств X и X1 совмещаются линейным сдвигом на X0.
---------------------------------
Решение в общем виде состоит в том,
чтобы  сравнивать X и X1
и либо считать новое значение Z, если его не было, либо не отображать Z на X1 если нет X1.
-------------------------------
Поправьте, если не так.
CreateDataSource только из main?, а вне main можно корректно подписаться?
 
Хотел помочь.
Все что Вы написали делается в индикаторах
Квик вообще многопоточный ( даже больше двух)
А вот надобности в  колбеках  в индикаторах вообще нет.
Но чувствую,
Вы любите создать трудности, чтобы потом их преодолевать , задавая кучу вопросов, вместо чтения документации.
Успехов в мечтаниях.
CreateDataSource только из main?, а вне main можно корректно подписаться?
 
green_X5,
Судя по вашим вопросам, Вы не очень понимаете назначение скриптов и индикаторов для задач создания роботов.
попробую пояснить.
Если Вы торгуете одним инструментом, то проще всего написать робота в виде индикатора.
При этом, не надо ничего заказывать и не надо использовать колбеки.
Т е программа получается безобразно простая и соответствует на 99% запросам начинающих биржевых миллионеров.
После того, как Ваш робот заработает (либо сольет первый миллион) можно смело приступать к созданию робота на скрипте.
Страницы: Пред. 1 ... 55 56 57 58 59 60 61 62 63 64 65 ... 80 След.
Наверх