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

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

Страницы: Пред. 1 ... 46 47 48 49 50 51 52 53 54 55 56 ... 72 След.
Не работает функция считывания значений с графика индикатора и графика цены
 
Возможно этих  свечей нет на графике.
Подсчёт проскальзывания
 
можно так:
local x="12345" -- присваиваем номер заявки
_G["_"..x]={}  --создаем таблицу с именем _номер заявки
_12345.order_price=65 --пишем цену в таблицу _12345  под именем order_price
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
и еще посмотрите свободное место на диске, на котором файл подкачки.
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
Еще можно сделать следующее.
1) Попробуйте еще не загружать никаких приложений, в том числе и браузер, кроме квик.
2) Если умеете, то попробуйте оптимизировать службы винды, уберите, которые не нужны, чтобы освободить память.
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
и еще, самое главное:
Уберите свои скрипты и посмотрите как будет работать. С этого надо было начинать. Но можно и закончить этим.
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
еще могу предложить сделать следующее.
установить квик в новый каталог и заново настроить окна (ничего из старого, кроме своих скриптов не брать)
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
сделайте это (из предыдущих советов):
5) Попробуйте работать с включенным флагом "Только данные, отражающие текущее состояние" (Настройки клиентского места)
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
Цитата
Иван Ру написал:
Я все же неверно определил источник проблемы, которая, к сожалению сохраняется. Теперь уже в самом терминале появляется сообщение "Операция не может быть выполнена т.к. недостаточно памяти". При этом объем памяти используемый двумя скриптами  составляет порядка 2х150 = 300 мб, а совокупный объем памяти занятой терминалом (в тот же момент смотрел через диспетчер задач) -- 1,5 Гб. Вообще последний показатель никогда не превышает 2,5 Гб, т.е. ресурс не выбран.
Что у меня включено:
- трансляция обезличенных сделок (около 5 полей по 160 инструментам - все фьючи).
- 2 окна "Текущие торги" - все фьючи и все акции, порядка 10 полей в каждом.
- 2 тиковых графика
- 2 стакана
- около 15 окон с графиками
- 2 окна с портфелями Т2 и Т0.

Отключение тиковых графиков проблему не решает, а вот отключение трансляции обезличенных сделок -- по первым ощущения ее устраняет. Мне они категорически нужны, не понимаю что делать.
Могу дать следующие советы.
1) Удалите из ТТП те акции, которыми не торгуете и фьючерсы которыми не торгуете.  Но удалять надо из заказа данных.
2) Удалите параметры, которые не используете.
3) Проверьте отключены ли у Вас опционы.
4) Посмотрите сколько в действительности у Вас выбрано инструментов и параметров (В окне выбор принимаемых параметров и инструментов)
5) Попробуйте работать с включенным флагом "Только данные, отражающие текущее состояние" (Настройки клиентского места)
-----------------------------------
Пишите, какой результат.
Возвращаемые данные для отрисовки индикатора
 
Цитата
s_mike@rambler.ru написал:
Совет про unpack плохой.

если одну из линий вам выводить в свече не нужно, то и остальные свечи могут быть не выведены. А могут быть выведены

a={}
a[4] = 4
a[1] = 1
f=function() return unpack(a) end
print(f())
------------
1

а четверки нет.
Надо делать так:
a={nil,nil,nil,nil}
a[4] = 4
a[1] = 1
f=function() return unpack(a) end
print(f())
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
Цитата
Иван Ру написал:
Цитата
Николай  Камынин   написал:
Это пример очень плохого скрипта.
Зачем Вы храните все bid, ask с шагом 0.5 в таблице?
Вы что обрабатываете всю таблицу от начал каждую секунду?
Если нет, но хотите сохранить ( аля плюшкин, выбросить жалко, а нести тяжко), то пишите в файл.
Я не думаю, что опыт позволяет написать мне качественный код, однако, не стал бы столь решительно судить о нем по отдельным по внешним признакам :-)
Конечно определенный смысл именно в таком подходе для меня есть. В определенные "критические", скажем так, моменты времени, мне надо подсчитывать разнопериодные средние (не по барам, а в привязке к критической точке), при этом делать это надо максимально быстро. По последней причине запись в файл для меня неприемлема, т.к. процедура открытия/чтения занимает время. Единственный выход - работать на укороченной истории.  Если Вы предложите лучшее и более качественное решение моей задачи -- буду только признателен :-)
Есть два способа написать хороший скрипт.
Первый - Вы знаете.
Второй -  изучать существующие технологии разработки подобного класса алгоритмов.
------------------------
Есть два вида программ.
один из них - это программы реального времени. К ним относятся торговые роботы, работающие в реале.
Они имеют одну особенность - их скорость работы в реале определяется временем выполнения наиболее длинной операции.
У Вас - это подсчитывать разнопериодные средние.
Для вычисления средней в правильном алгоритме надо три арифм операции на тик вне зависимости от длины истории (N).
В вашем алгоритме надо N операций.
Можете посчитать время исполнения.
------------------------
Кроме того, за восемь часов торгов вы получаете примерно 60 тысяч пар  bid, ask .
Что-то я сомневаюсь, что Вы считаете среднее с N=60000.
Но тогда зачем это все хранить?
Надо делать скользящее окно по максимальному N.
А еще более эффективнее это переходить от средней к скользящей или к медиане.
--------------------------------
Успехов
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
Цитата
Иван Ру написал:
Спасибо всем, в особенности  _sk_ , за советы!
Сообщаю предварительные выводы.
Особых событий перед падением скриптов нет, обычно крашу случается по истечение нескольких часов после их запуска, что наводит на мысль о постепенном заполнении памяти в ходе работы скриптов.
Логгирование это подтвердило -- происходит плавный рост использования памяти с течение времени в обоих моих основных скриптах, в особенности в последнем сварганенном.
Собственно, я получил то что и должен был получить -- он сохраняет в таблицу последние bid, ask два раза в секунду и данные по сделкам по ВСЕМ фьючерсам. Каждый час объем памяти используемый этим скриптом растет приблизительно на 150 мегабайт. Падает чаще всего второй скрипт, который сохраняет меньше данных, но, по-видимому, делает это (т.е. обращается к памяти) чаще.
Я полагаю что ручной запуск сборщика мусора мне мало чем поможет, т.к. проблема не в большом объеме мусорных данных, а в огромных таблицах (за 10 часов набирается порядка 70 тысяч элементов). Старые куски этих таблиц надо периодически удалять ограничивая их общий объем 1- 10 тысячами элементов. Это, между прочем, оказывается определенной проблемой, -- я не вижу стандартного  инструмента. Многократное удаление отдельных элементов с использование table.remove и перенумерацией массива занимает много времени. В частности, удаление половины первых элементов из массива длинной 10000 у меня заняло 6 секунд! Косые способы решения этой проблемы обсужу в новой теме.
Это пример очень плохого скрипта.
Зачем Вы храните все bid, ask с шагом 0.5 в таблице?
Вы что обрабатываете всю таблицу от начал каждую секунду?
Если нет, но хотите сохранить ( аля плюшкин, выбросить жалко, а нести тяжко), то пишите в файл.
в результате у Вас освободится 90% занятой памяти.
----------------------------
Хороший алгоритм реального времени - это тот, в котором нет обработка данных в цикле.
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
Цитата
_sk_ написал:
Стандартная схема работы виртуальных машин:
1) выделяем какой-то объём памяти для работы;
2) работаем, периодически вызывая сборщик мусора (мелкая гребёнка);
3) если после сборки мусора осталось мало свободной памяти, выделяем больше памяти (периодическое повышение объёма) и продолжаем работать с пункта 2).
Продвинутые виртуальные машины умеют уменьшать объём выделенной памяти, если потребность в ней снизилась. Похоже, что виртуальная машина lua к таким не относится.
Вы не правильно понимаете работу VMLua.
Память выделяется при создании таблиц и их заполнении.
Сборщик мусора запускается по времени.
Время его запуска можно установить (можно вообще отключить сборщик).
сборщик проверяет ссылки и если на данную область ссылок нет то отправляет эту область в кучу.
таким образом уменьшается область занятой памяти.
----------------------
Если желаете экономить память и при этом существенно ускорить работу скриптов, то используйте всюду где можно local.
Как для метода OnAllTrade создать глобальную блокировку?
 
Проблема Вашего алгоритма в том, что Вы не контролируете состояние робота.
Чтобы не открывать кучу позиций надо реализовать контроль .
Например, если Вы послали заявку на открытие позиции,
то надо отслеживать это состояние и блокировать дальнейшую работу робота,
пока не поступит сигнал о выставлении либо отклонении вашей заявки.
и т д. Все состояния (события) надо контролировать.
------------------------
относительно  OnAllTrade
Это колбек событий. Но события (сделки) приходят пакетом т е сделки с различным временем в одном пакете поступят одновременно.
Если хотите синхронизировать их возникновение то надо обрабатывать время сделки.
Ошибка not enough memory, сегодня скрипт впервые упал с такой ошибкой -- как выявить причину?
 
Цитата
Imersio Arrigo написал:
Цитата
Иван Ру   написал:
П.С. Версия quik - 7.12 Windows 10 64 бит 32 гб RAM.
Цитата
_sk_   написал:
У меня компьютер аналогичный, только памяти 16 Гб
Ребят, вы поймите, квик - 32х битный процесс, он не может использовать больше 4гб от слова никак.
И ему без разницы 16 у тебя или 32 гб рам.

Надо уменьшать кол-во данных внутри квика, и оптимизировать луа-скрипты.
1) посмотрите диспетчером задач используемый объем памяти.
2) Посмотрите объем используемой скриптом памяти сборщиком мусора
----------------------------------------------
Чтобы исчерпать всю память надо написать очень плохой скрипт .
Как определить время вечерней сессии, Как определить время начала вечерней сессии на срочном рынке используя средства луа
 
Цитата
Иван Ру написал:
Любопытно... Я так понимаю картинка именно со срочного рынка?

Увы, у себя в меню "Доступные параметры" для инструментов срочного рынка я не вижу такого параметра "Начало вечерней сессии" и ничего аналогичного. Скажите какую версию терминала и какого брокера используете? (У меня 7911 финам)

В луа я (безуспешно) использовал такие параметры:

local STARTTIME =    getParamEx('SPBFUT',value.sec, 'STARTTIME').param_value              -- STRING   Начало основной сессии
local ENDTIME = getParamEx('SPBFUT',value.sec, 'ENDTIME').param_value                 -- STRING   Окончание основной сессии
local EVNSTARTTIME = getParamEx('SPBFUT',value.sec, 'EVNSTARTTIME').param_value           -- STRING   Начало вечерней сессии
local EVNENDTIME = getParamEx('SPBFUT',value.sec, 'EVNENDTIME').param_value             -- STRING   Окончание вечерней сессии
local MONSTARTTIME = getParamEx('SPBFUT',value.sec, 'MONSTARTTIME').param_value           -- STRING   Начало утренней сессии
local MONENDTIME   = getParamEx('SPBFUT',value.sec, 'MONENDTIME').param_value             -- STRING   Окончание утренней сессии


имена параметров надо задавать по англицки.
Для этого делаете DDE вывод таблицы параметров с именами столбцов в excel и смотрите имя.
Как определить время вечерней сессии, Как определить время начала вечерней сессии на срочном рынке используя средства луа
 
Цитата
Иван Ру написал:
Цитата
Николай  Камынин   написал:






#4
12.06.2017 15:54:43


ЦитатаИван Ру написал:
Сабж. Как известно иногда она начинается в 19.00, иногда - в 19.05
Пробовал разные средства - поля STATUS и TRAIDSTATUS всегда имеют значения 0.
Данные о последней сделке и стакане заявок в период клиринга прекрасно выдаются, по ним судить о времени начала и окончания этого периода нельзя :-(getParamEx
----------------------------------
Параметр
Начало вечерней сессии


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

Очевидно у Вас не выбран этот параметр
Посмотрите его в ТТП.
Картинка выше. Если есть то должно читаться в луа.
Как определяться таймфрейм автоматически?
 
Напишите какой-нибудь индикатор для начала
В нем можете сделать так:
local    tinfo=getDataSourceInfo();
local     interval=tinfo.interval;  -- интервал графика
Как определить время вечерней сессии, Как определить время начала вечерней сессии на срочном рынке используя средства луа
 
Цитата
Иван Ру написал:
Сабж. Как известно иногда она начинается в 19.00, иногда - в 19.05
Пробовал разные средства - поля STATUS и TRAIDSTATUS всегда имеют значения 0.
Данные о последней сделке и стакане заявок в период клиринга прекрасно выдаются, по ним судить о времени начала и окончания этого периода нельзя :-(
getParamEx
----------------------------------
Параметр
Начало вечерней сессии
KILL_ALL_ORDERS на ММВБ
 
Цитата
Eskra написал:
Добрый день!

При попытке снять все заявки на ммвб приходит ошибка Отправка транзакций данного типа из QPILE-скрипта не поддерживается.

Код:

 trans_id = trans_id + 1
 local Transaction={
   ['TRANS_ID']  = tostring(trans_id),  
   ['CLASSCODE'] = 'TQBR',          
   ['ACTION']    = 'KILL_ALL_ORDERS',          
   ['CLIENT_CODE'] = 'xxxxx',  
 }

 local Res = sendTransaction(Transaction)
Какой у Вас вопрос?
Вы не верите данному сообщению?
Или у Вас претензия к разработчикам, что "нельзя", а Вам хочется.
Очередность срабатывания OnTransReply, OnOrder, OnTrade
 
Цитата
Nikolay Pavlov написал:
Я уже выше описан, что шлюзы учитывают порядок полученных транзакций на снятие заявок только в момент отправки на Биржу запроса на снятие заявки, но если сама Биржа решит ответить сначала на 2 запрос, а после на 1, шлюз НЕ БУДЕТ ждать пока биржа пришлет ответ на запрос снятия заявки №1, он сразу отправит сообщение о снятии заявки №2 на сервер Quik и соответственно в терминале Вы увидите, что заявка №2 снялась раньше.
Вообще-то,шлюз ничего не может решать. Он работает по правилу FIFO.
-----------------------------
Решать могут, например,  маршрутизаторы.
-----------------------------
Вы уж старайтесь не фантазировать,
а придерживаться реальной схемы каналов.
Очередность срабатывания OnTransReply, OnOrder, OnTrade
 
Andrei2016,
Суть в том , что Вы в своих вопросах хотите получить 100% гарантии синхронного прихода сообщений при асинхронной передаче потоков от биржи  и асинхронной передачи пакетов по интернет.
Т е ответ на Ваши вопросы один - гарантий никаких нет.
Потоки не синхронизированы.
Интернет  допускает опережение  пакетов, их потерю, повторный запрос. Это же допускают и потоки с биржи. т е можно терять сообщения и повторно их запрашивать т е нарушать последовательность.
Очередность срабатывания OnTransReply, OnOrder, OnTrade
 
что-то тема анекдот напомнила.
------------------------------
сидит группа зеков в тюрьме ,
все анекдоты давно рассказали и поэтому называют лишь номера анекдотов.
Один зек кричит - номер  102.
Вся камера - ну это уже не смешно,
сколько можно этот анекдот рассказывать.
Через пять минут, в дальнем углу раздается смех .
Ты что, это? -удивленно спрашивает смотрящий.
Так я этот анекдот первый раз слышу - отвечает смеющийся.
-------------------------------------------
Разграничение функции колбэка OnFuturesClientHolding
 
Цитата
Василий Артёмов написал:
Здравствуйте. Необходимо получать callback только после изменение позиции, без различных других вызовов данного колбэка. Как можно реализовать, подскажите пожалуйста?
Без различных других вызовов данного колбека нельзя.
колбек на то и колбек, что вызывается по любому изменению FuturesClientHoldin (так оно задумано изначально).
тоже самое касается и других колбеков.
-------------------------------
Поэтому Вам надо внутри колбека поставить Ваше условие условие и по true совершать действия.
Получение данных индикатора со множества инструментов
 
Цитата
Егор Масалкин написал:
Всем добрый день.

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

Разобрался, что через CreateDataSource можно получить данные со свечей любого инструмента... но можно ли это применить для индикаторов? Для аллигатора или хотя бы обычной скользящей средней?
Или есть какие-то другие альтернативы для решения данной задачи?
CreateDataSource получает данные с сервера. Поэтому с помощью этой функции можно получить лишь те индикаторы которые рассчитываются на сервере. Например, свечи. Встроенные индикаторы рассчитываются в терминале, поэтому их невозможно заказать с свервера т е надо считать либо в скрипте либо в терминале. В последнем случае надо открывать окна с графиками и ставить идентификаторы.
Это совсем не страшно, так как очевидно делается один раз.
Робот читает интернет-страницу
 
Let_it_go,
Выкладываю вариант решения на луа указанной страницы сайта.

Код
require "socket"
http = require 'socket.http'
local address = 'http://smart-lab.ru/dividends/index/order_by_t2_date/desc/'
local ts={"tr","strong","span"}
local lMax=91 --число строк в таблице
--------------------
function nkdelspace(s)
   local len=string.len(s); local z=""; local x1=32;
   for i=1,len do local x=string.byte(s,i); if x<32 then x=32 end
      if (x~=32 or x1~=32) then
         if z=="" then z=string.char(x) else z=z..string.char(x) end
         x1=x; end
   end    --убираем проблелы
return z;
end
----------------------
local body = http.request(address)
----------------------
for i=1,#ts do
   body = string.gsub (body,"(<%s*"..ts[i].."[^>]*>)","")
   body = string.gsub (body,"(<%s*/"..ts[i].."[^>]*>)","")
end
body = string.gsub (body," "," ")
local t={}  -- результат
local j=0; local k=0; local text=0;
local m=1; 
local n=string.find(body,"td>",m,#body,true);
local x=string.byte(body,n-1); 
m=m+3;
-----------------
 while #body>m do
    n=string.find(body, "td>",m,#body,true);
   if n then  local n1=n;
      if x~=47 then
         x=string.byte(body,n-1); if x==47 then n=n-1; end
         text = string.sub(body, m,n-2); text = nkdelspace(text);
         local len=string.len(text);
         if len<20 then
            j=j+1; if j==1 then k=k+1; t[k]={} end
            local tt=t[k]; tt[#tt+1]=text;
            if j==8 then     if k==lMax then break end
            j=0 end
         end
      else
         x=string.byte(body,n-1);
      end
   m=n1+3;
   else break;
   end
end
Результат - таблица t . 91 элемент ( это переменная lMax).
каждый элемент - таблица из 8 элементов:
--------------------
1>table
....1 PHOR
....2 08.08.2017
....3 10.08.2017
....4 2016
....5 н/расп
....6 21
....7 2345
....8 0,9%
--------------------
..2>table
....1 GAZP
....2 18.07.2017
....3 20.07.2017
....4 2016
....5 год
....6 8,0397
....7 122,28
....8 6,6%
-----------------
и т д
Робот читает интернет-страницу
 
посмотрел внимательно http://smart-lab.ru/dividends/index/order_by_t2_date/desc/'
оказалось что таблица статическая
поэтому можно прочитать ее
так
-----------------

http = require 'socket.http'
local address = 'http://smart-lab.ru/dividends/index/order_by_t2_date/desc/'
htmls = http.request(address)
------------------------
а потом
вытащить данные используя ручной способ из приведенного примера El El переписав его на луа.
Робот читает интернет-страницу
 
Цитата
El El написал:
Цитата
Николай  Камынин   написал:
 Let_it_go  ,
Ваша задача немного сложнее, чем пример который я написал.
Дело в том,страница, которую вы хотите читать не содержит готовой таблицы.
Поэтому кроме парсера Вам придется исполнять джава скрипты.
-------------------
Поэтому более правильно решать вашу задачу через использование браузера в качестве ком объекта.
Эта страница - статический html. Пример выше именно ее и достает и парсит. По крайней мере, так было месяц назад, когда пример писался.
Пример очевидно хороший для тех, кто знает CPP и и работу c make.
Полагаю, что 99% посетителей этого форума и не знают как с этим работать.
Эти особенности и есть недостатки примера.
--------------------------------------
Кроме того, пример содержит еще две особенности.
1) Скорректированная библиотека, т е недокументированная поделка.
2) Как сказано в примере: "Преобразование данных из HTML будет осуществляться для простоты "ручным" поиском строк и регулярными выражениями. В более серьезной архитектуре может применен XML-парсер и др., такой вариант оставляется читателю ручной способ поиска."
-----------------------------
Следовательно, это скорее всего - готовое частное решение, а не пример для подражания.
---------------------------------------
Полагаю, что более универсальное решение , может быть на luacom и InternetExplorer.Application.
Т е решении исключительно в рамках стандартов Майкрософт  и языка луа.
-------------------------------
Робот читает интернет-страницу
 
Let_it_go,
Ваша задача немного сложнее, чем пример который я написал.
Дело в том,страница, которую вы хотите читать не содержит готовой таблицы.
Поэтому кроме парсера Вам придется исполнять джава скрипты.
-------------------
Поэтому более правильно решать вашу задачу через использование браузера в качестве ком объекта.
Робот читает интернет-страницу
 
Цитата
Let_it_go написал:
Господа, подскажите пожалуйста как реализовать такую задачу на Луа.
1. Робот заходит на страничку с дивидендами:
http://smart-lab.ru/dividends/
   
2. Читает её
3. Формирует Луа-таблицу с полями
Тикер - дата отсечки Т+2
Тикер - дата отсечки Т+2
4. В последний день перед дивидендым гэпом посылает сообщение в КВИК.

Мои роботы на Луа никогда не читали интернет-странички и не брали из них данных. Даже не знаю с чего начать.
Спасибо за помощь.
Как вариант.
Вот так получите страницу,
Код
require "socket"

http = require 'socket.http'
html = http.request 'http://smart-lab.ru/dividends/'

print(html)
потом сделайте парсер .
Collision выводил название переменной массива
 
Вам сюда:
https://forums.coronalabs.com/
Collision выводил название переменной массива
 
Цитата
Сергей Орлов написал:
но что у меня с таймером
Код
   local   function   off (events)
    display.remove (events);
 end 
 local   function  onGlobal (event )
    if  (floor  =  =  event.object1)  then 
       if  ( event.phase  =  =   "began"  )  then 
          if  (event.object2.myName  >   0 )  then 
            mas  =  event.object2.myName
             timer.performWithDelay (  5000 , off(event.object2))
          end 
       end 
    end 
 end 
  
А что у Вас с таймером?
Это же Вы написали и только Вы знаете, что у вас с таймером.
Collision выводил название переменной массива
 
Возможно, Вам сюда:
https://docs.coronalabs.com/
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, возникло условие выставление лимит заявки по стоп-лимит.
-------------------------------
Вопрос к знатокам:
По какому из этих двух условий сервер выставит лимитированную заявку.
или иначе сформулирую:
какое из условий проверится раньше и будет ли проверятся второе, если первое истина.
--------------------
Зная ответ , можно написать скрипт для однозначного определения что сработало.
======================
Вообще-то, можно просто при срабатывании найти максимум цены и просчитать данную ситуацию, т е получить ответ на вопрос - что сработало.
-------------------
спасибо
Страницы: Пред. 1 ... 46 47 48 49 50 51 52 53 54 55 56 ... 72 След.
Наверх