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

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

Страницы: Пред. 1 ... 53 54 55 56 57 58 59 60 61 62 63 ... 79 След.
Ошибка 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, возникло условие выставление лимит заявки по стоп-лимит.
-------------------------------
Вопрос к знатокам:
По какому из этих двух условий сервер выставит лимитированную заявку.
или иначе сформулирую:
какое из условий проверится раньше и будет ли проверятся второе, если первое истина.
--------------------
Зная ответ , можно написать скрипт для однозначного определения что сработало.
======================
Вообще-то, можно просто при срабатывании найти максимум цены и просчитать данную ситуацию, т е получить ответ на вопрос - что сработало.
-------------------
спасибо
Срочно! Исправтье логическую ошибку при вводе заявки, Потерял на этом деньги
 
А вопреки какой логики?
Дайте ссылку на документацию квика с описанием этой логики.
Спасибо
Время изменения стакана получаемого через 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
Страницы: Пред. 1 ... 53 54 55 56 57 58 59 60 61 62 63 ... 79 След.
Наверх