<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Дата и время позиции]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Дата и время позиции форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 01:33:23 +0300</pubDate>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77319/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Коллбек как источник данных, для асинхронной обработки данных. <br />Довел вариант до рабочего, в качестве источника данных OnAllTrade, получаем таблицу и переносим расчеты, не в маин, в сопрограмму. Такой подход не блокирует выполнение других операций программы, если количество сделок большое, или сделка обрабатывается долго, которые запущены в процессе. Производительность и нагрузки просто супер. Задание паузы между итерациями обработки позволяет контролировать частоту обработки данных, что полезно для предотвращения перегрузки системы, а также задает временные промежутки для накопления данных в очередь. &nbsp; &nbsp;<br />Этот подход позволяет не только улучшить структуру кода, но и легко расширять систему с новыми метриками и функциональностью. Каждый компонент изолирован и отвечает только за свою часть. Легко добавлять или менять логику внутри каждого модуля, не влияя на другие части системы. А также, можно добавлять новые метрики или алгоритмы, расширяя существующие возможности самой программы. Собраны метрики и алгоритмы в отдельные модули. Каждый модуль может экспортировать только необходимые функции и данные, позволяя другим частям системы использовать их через интерфейсы, что должно помочь избежать излишней зависимости между компонентами. Метрики можно групировать по стратегиям. Система принятия решений будет интегрировать метрики, анализировать их с использованием различных стратегий и на основе результатов принимать решение о торговых действиях. <br />Основными компонентами такой системы принятия решений будут:<br />1. Метрики – используем различные метрики для анализа данных.<br />2. Стратегии – каждая стратегия (скальпинг, трендовая торговля, арбитраж) будет использовать различные метрики для принятия решений.<br />3. Алгоритм принятия решений – будет выбирать, какая стратегия должна быть использована в текущих условиях рынка и какое действие (купить/продать) должно быть выполнено.<br />4. Система обработки данных – будет собирать данные (например, цены и объемы), передавать их в соответствующие стратегии и использовать метрики для анализа.<br />В моем случае придется, переосмыслить архитектуру основной программы - добавить универсальности, но и наконец то, выхожу на однотипную структуру данных для такой программы, под гордым названием с большой буквы Робот.<br />Пока, Всем хорошей торговли! <br />
			<i>21.01.2025 16:49:38, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77319/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77319/topic8859/</guid>
			<pubDate>Tue, 21 Jan 2025 16:49:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77308/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Не знаю почему не получается сворачивать окно у меня. Подскажите последовательность нажатия конок?<br /> Хотел предложить на обсуждение еще один вариант, обработки сделок уже т. всех сделок с использованием очереди. По факту даже два варианта. 1) обрабатываем в маин. 2) асинхронный. Как раз перерабатываю, чтобы модуль добавить в программу. <br />
			<i>20.01.2025 12:33:43, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77308/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77308/topic8859/</guid>
			<pubDate>Mon, 20 Jan 2025 12:33:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77301/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Касаемо обработки собственных сделок, была а возможно и есть программа написана на qpl, называется Калькулятор уровней позиции: (q_calc) автор Николай Морошкин. На ней учился переписывая на луа логику. Выкладываю как возможный пример обработки сделок, просто в нем есть четкая логика, на ошибки нужно проверять.<br />
====code====
<pre>function detect_position()

&nbsp;&nbsp;&nbsp;&nbsp;--&#91;&#91; Проверки статуса заявок (1-й и 2-й биты flags):
&nbsp;&nbsp;&nbsp;&nbsp;"Активна": bit.band(order.flags, 1) &#62; 0
&nbsp;&nbsp;&nbsp;&nbsp;"Неактивна" (исполнена либо снята): bit.band(order.flags, 1) == 0
&nbsp;&nbsp;&nbsp;&nbsp;"Исполнена": bit.band(order.flags, 1) == 0 и bit.band(order.flags, 2) == 0
&nbsp;&nbsp;&nbsp;&nbsp;"Снята": bit.band(order.flags, 1) == 0 и bit.band(order.flags, 2) &#62; 0

&nbsp;&nbsp;&nbsp;&nbsp;Нас интересуют два флага:
&nbsp;&nbsp;&nbsp;&nbsp;OF_ACTIVE = 0x01
&nbsp;&nbsp;&nbsp;&nbsp;OF_KILL = 0x02
&nbsp;&nbsp;&nbsp;&nbsp;--&#93;&#93;

&nbsp;&nbsp;&nbsp;&nbsp;local ord = "orders"
&nbsp;&nbsp;&nbsp;&nbsp;local max_numorder = getNumberOf("orders")
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Отслеживаем количество ордеров
&nbsp;&nbsp;&nbsp;&nbsp;Log:trace('detect_position: отслеживаю размер массива ' 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' getNumberOf =' .. tostring(max_numorder) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' index =' .. tostring(max_numorder-1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' / o_index = ' .. tostring(o_index) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' save_needed =' .. tostring(save_needed))

&nbsp;&nbsp;&nbsp;&nbsp;-- Функция для поиска ордеров
&nbsp;&nbsp;&nbsp;&nbsp;local function myFind(A, C, S, F)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (A == ACCOUNT and C == CLASSCODE and S == SECCODE 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and bit.band(F, 0x2) == 0 and bit.band(F, 0x1) == 0)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Поиск ордеров с нужными фильтрами
&nbsp;&nbsp;&nbsp;&nbsp;local iItems = SearchItems("orders", 0, max_numorder - 1, myFind, "account,class_code,sec_code,flags")

&nbsp;&nbsp;&nbsp;&nbsp;-- Проверка на пустой результат
&nbsp;&nbsp;&nbsp;&nbsp;if not iItems or #iItems == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace('ERROR: SearchItems вернул пустой результат')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;Log:trace('detect_position: всего элементов ' .. tostring(#iItems) .. ' последний ордер: ' .. tostring(iItems&#91;#iItems&#93;))

&nbsp;&nbsp;&nbsp;&nbsp;-- Если еще не инициализировано
&nbsp;&nbsp;&nbsp;&nbsp;if initialized == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialized = -1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;-- Обработка ордеров
&nbsp;&nbsp;&nbsp;&nbsp;for i = o_index, #iItems do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order = getItem("orders", iItems&#91;i&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not order or type(order) ~= "table" then return false end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Определение флагов состояния ордера
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local OF_ACTIVE = bit.band(order.flags, 1) &#62; 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local NOT_ACTIVE = bit.band(order.flags, 1) == 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local OF_FILL = bit.band(order.flags, 1) == 0 and bit.band(order.flags, 2) == 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local OF_KILL = bit.band(order.flags, 1) == 0 and bit.band(order.flags, 2) &#62; 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if order.account == ACCOUNT and order.class_code == CLASSCODE and order.sec_code == SECCODE 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and (OF_FILL or OF_ACTIVE) and not Orders&#91;order.order_num&#93; then

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Orders&#91;order.order_num&#93; = os.time() -- Запоминаем время

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Получаем информацию о заказе
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_n = order.order_num
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_dt = order.datetime
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_d = get_date(order_dt) -- Дата
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_t = get_time(order_dt) -- Время
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_tradedate = order_d

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_b = order.balance
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_q = order.qty - order_b
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_p = order.price
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local order_op = bit.band(order.flags, 0x4) == 0 and 'BUY' or 'SELL'

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Логирование активных ордеров
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if OF_ACTIVE then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace(NAME_OF_STRATEGY .. ' ' .. i .. ' ACTIVE лимитная заявка по ' .. order.sec_code
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' number: ' .. tostring(order_n)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_d)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_t)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_op)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_q) .. ' (' .. tostring(order_b) .. ')'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_p))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Обработка исполненных ордеров
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if OF_FILL then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace(NAME_OF_STRATEGY .. ' ' .. i .. ' Исполнена лимитная заявка по ' .. order.sec_code
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_d)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_t)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_op)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_q) .. ' (' .. tostring(order_b) .. ')'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(order_p)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' number: ' .. tostring(order_n))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trade_q = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trade_p = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local exchange_comission = 0

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Поиск сделок, соответствующих ордеру
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for trades_i = 0, getNumberOf("trades") - 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trade = getItem("trades", trades_i)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trade.order_num == order_n then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_order_id = order_n

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trade_d = get_date(trade.datetime)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trade_t = get_time(trade.datetime)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local qq = trade.qty
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local pp = trade.price

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trade_q = trade_q + qq
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trade_p = trade_p + (qq * pp)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exchange_comission = exchange_comission + trade.exchange_comission
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trade_q ~= 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trade_p = trade_p / trade_q
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exchange_comission = exchange_comission / trade_q
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Проверка на рассинхронизацию заявок и сделок
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if order_q ~= trade_q then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace("Рассинхронизация заявок и сделок: " .. tostring(order_n) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ", " .. tostring(order_q) .. "/" .. tostring(trade_q))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Рассинхронизация заявок и сделок: " .. tostring(order_n) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ", " .. tostring(order_q) .. "/" .. tostring(trade_q))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Запись в журнал
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace('Получаю тек. позицию: ' 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. " " .. tostring(pos.dir) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(pos.qty)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(pos.op)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(pos.cap)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(pos.be))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace('Получаю изменения в позиции: '
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' ' .. tostring(qcap)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' order_op=' .. tostring(order_op)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' order_q=' .. tostring(order_q)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' order_b=' .. tostring(order_b)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' order_p=' .. tostring(order_p)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' / trade_q=' .. tostring(trade_q)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.. ' trade_p=' .. tostring(trade_p))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Управление позицией
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local log_action = ""
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if pos.dir == "n" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos.dir, pos.qty, pos.op, pos.cap, pos.be, pos.open = set_position(order_op, trade_q, trade_p)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_journal(order_op, qcap, trade_q, trade_p, trade_datetime)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_action = "Открытие позиции " .. tostring(pos.dir) .. ' ' .. tostring(pos.qty) .. ' ' .. tostring(pos.op)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace(i .. ' ' .. log_action)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save_needed = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif (pos.dir == "L" and order_op == "BUY") or (pos.dir == "S" and order_op == "SELL") then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos.op = pos.op * pos.qty + trade_p * trade_q
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos.qty = pos.qty + trade_q
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos.op = pos.op / pos.qty
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_journal(order_op, -1, trade_q, trade_p, trade_datetime)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_action = "Наращивание позиции " .. tostring(pos.dir) .. tostring(pos.qty)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace(i .. ' ' .. log_action)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save_needed = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trade_q == pos.qty then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos.dir, pos.qty, pos.op, pos.cap, pos.be, pos.open = "n", 0, 0, 0, 0, bar.open
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_journal(order_op, 0, trade_q, trade_p, trade_datetime)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_action = "Закрытие позиции " .. tostring(pos.dir) .. ' ' .. tostring(pos.qty)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log:trace(i .. ' ' .. log_action)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save_needed = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
end
</pre>
============= <br />
			<i>20.01.2025 09:21:01, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77301/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77301/topic8859/</guid>
			<pubDate>Mon, 20 Jan 2025 09:21:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77300/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_5g36CbOW" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Вы опять правы, мои предположения и понимание не есть &quot;истина в последней инстанции&quot;, и я не отношу себя к &quot;гуру&quot;, бывает ошибаюсь. Мне просто не понятно, что на специализированном форуме проходится рассуждать про объективные вещи. Да по мере присутствия на бирже учусь и набираюсь опыта, им делюсь и обсуждаю. <br />====quote====<br /><a class="blog-p-user-name" id="bp_B5phrYDY" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Вы полагаете что БКС гоняется за тиками и поэтому Вы его называете ММ?<br />=============<br />Вы зачем ставите все &quot;с ног на голову&quot;? &nbsp;Ведь это Ваше утверждение. <br />====quote====<br /><a class="blog-p-user-name" id="bp_TTsrFel3" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Я утверждаю, что &nbsp;понятие (кличка) &quot;MM&quot; &nbsp;связано лишь с оказанием платных услуг биржи. &nbsp;Это никак не связано ни со следами, ни с размером ни с чем другим . <br />=============<br />Вот мое утверждение <a class="blog-p-user-name" id="bp_Fxunkq91" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a><span class="bx-font" style="color:#333333"> написал:</span><br />====quote====<br />ММ это прежде всего коммерческий проект, целью которого является извлечение прибыли, как и любой другой &nbsp;коммерческой организации. Обладая значительными средствами, набирают большие позиции которые, оставляя следы на графике, а значить могут повести рынок за собой или держать его в диапазоне. Это интересует трейдера, отвечая на вопрос в какую сторону держать позицию, и уж совсем не интересно сколько заработал ММ. Именно это поведение как крупного игра их отличает. Вы можете даже конкретные алгоритмы найти в сети. Обладая дополнительной информацией они строят свои торговые стратегии, свой бизнес.<br />=============<br />&quot;Что написано пиром, то не вырубить топором&quot;. Касаемо моего подхода, читайте выше, там есть и формализация понятия о чем я рассуждаю, а рассуждаю я о контрагентах в сделках, как их можно формализовать в алгоритмических стратегиях. &nbsp; <br />
			<i>20.01.2025 09:10:01, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77300/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77300/topic8859/</guid>
			<pubDate>Mon, 20 Jan 2025 09:10:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77298/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_hQcOLPc1" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;Все я прекрасно понял. Смею предположить, Ваши торговые стратегии, видимо не выходят за пределы технологий &quot;скальпинга&quot;, отсюда и кругозор. Выше Вы опубликовали участников заключивших договора, Вам наименования организаций не о чем не говорят? Именно они гоняются за тиками? Вы просто посмотрите на ликвидность в стаканах, и на финансовые возможности компаний обеспечивающих эту ликвидность. &nbsp;Что делать с остальными финансами? Могу предположить, что под скапинг выделяется не большая доля активного капитала на котором и крутятся HFT-алгоритмы, &nbsp;выдели 1% а что делать с 99% средств? <br />Кстати, на эту же проблему эффективности, натолкнулся у себя в своих среднесрочных стратегиях, суть в следующем: есть 100% торговый капитал, по правилам риск менеджмента активный не более &lt; 25%, что означает &gt; 75% т. капитала лежит просто в обеспечении сделки, не плохо бы часть покрутить в скальперских стратегиях. <br />Касаемо придумок все за долго до меня, стратегии опубликованы, на классику жанра указал выше. И никаких кличек, терминология применяется разная но это для упрощения в пониманиях, сегодня модная есть &quot;смарт мани&quot;, &nbsp;там своя, у классиков своя, Суть одна. Касаемо следов не только на ценовых графиках отслеживаются, но часто в стакане, такой объем можно видеть, так как рассчитываемся по определенным правилам для данного эмитента то есть алгоритмический. Такие объемы определяются, и от них строятся разные стратегии. Платная услуга биржи, это не признак ММ, это один из источников дохода ММ. &nbsp;Даже мне раньше прилетало от &nbsp;биржи.<br />=============<br />Не надо переходить на личности. Вы не угадаете , какими стратегиями я занимаюсь. смею заверить Вас, что все что Вы написали на форуме, как некоторое открытие для вас я изучил примерно 20 лет назад и все это уже применял в своих стратегиях.<br />Я вам пытаюсь сказать что термин &quot;маркет-мейкер&quot; никак не связан ни со стратегиями ни с тиками ни с HFT &nbsp;Он связан лишь с оказанием услуг бирже. &nbsp;И ВСЕ<br />---------------------<br />В той таблице, которую я вам привел с сайта биржи есть брокер БКС . Вы полагаете что БКС гоняется за тиками и поэтому Вы его называете ММ?<br />---------------- <br />
			<i>20.01.2025 08:31:00, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77298/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77298/topic8859/</guid>
			<pubDate>Mon, 20 Jan 2025 08:31:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77297/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_I4xR1ehr" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Все я прекрасно понял. Смею предположить, Ваши торговые стратегии, видимо не выходят за пределы технологий &quot;скальпинга&quot;, отсюда и кругозор. Выше Вы опубликовали участников заключивших договора, Вам наименования организаций не о чем не говорят? Именно они гоняются за тиками? Вы просто посмотрите на ликвидность в стаканах, и на финансовые возможности компаний обеспечивающих эту ликвидность. &nbsp;Что делать с остальными финансами? Могу предположить, что под скапинг выделяется не большая доля активного капитала на котором и крутятся HFT-алгоритмы, &nbsp;выдели 1% а что делать с 99% средств? <br />Кстати, на эту же проблему эффективности, натолкнулся у себя в своих среднесрочных стратегиях, суть в следующем: есть 100% торговый капитал, по правилам риск менеджмента активный не более &lt; 25%, что означает &gt; 75% т. капитала лежит просто в обеспечении сделки, не плохо бы часть покрутить в скальперских стратегиях. <br />Касаемо придумок все за долго до меня, стратегии опубликованы, на классику жанра указал выше. И никаких кличек, терминология применяется разная но это для упрощения в пониманиях, сегодня модная есть &quot;смарт мани&quot;, &nbsp;там своя, у классиков своя, Суть одна. Касаемо следов не только на ценовых графиках отслеживаются, но часто в стакане, такой объем можно видеть, так как рассчитываемся по определенным правилам для данного эмитента то есть алгоритмический. Такие объемы определяются, и от них строятся разные стратегии. Платная услуга биржи, это не признак ММ, это один из источников дохода ММ. &nbsp;Даже мне раньше прилетало от &nbsp;биржи. <br />
			<i>20.01.2025 08:11:35, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77297/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77297/topic8859/</guid>
			<pubDate>Mon, 20 Jan 2025 08:11:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77295/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3dKi5tOI" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;Все это верно, это не предмет обсуждения. ММ это прежде всего коммерческий проект, целью которого является извлечение прибыли, как и любой другой &nbsp;коммерческой организации. Обладая значительными средствами, набирают большие позиции которые, оставляя следы на графике, а значить могут повести рынок за собой или держать его в диапазоне. Это интересует трейдера, отвечая на вопрос в какую сторону держать позицию, и уж совсем не интересно сколько заработал ММ. Именно это поведение как крупного игра их отличает. Вы можете даже конкретные алгоритмы найти в сети. Обладая дополнительной информацией они строят свои торговые стратегии, свой бизнес.<br />=============<br />Вы не поняли. <br />Я утверждаю, что &nbsp;понятие (кличка) &quot;MM&quot; &nbsp;связано лишь с оказанием платных услуг биржи. &nbsp;Это никак не связано ни со следами, ни с размером ни с чем другим . &nbsp;<br />Если игрок не оказывает платные услуги бирже, то он не ММ.<br />----------------<br />Вы напридумывали кучу признаков для ММ, а реально существует лишь один - платная услуга бирже. <br />
			<i>20.01.2025 07:01:51, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77295/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77295/topic8859/</guid>
			<pubDate>Mon, 20 Jan 2025 07:01:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77292/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_Z1nLniMm" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Все это верно, это не предмет обсуждения. ММ это прежде всего коммерческий проект, целью которого является извлечение прибыли, как и любой другой &nbsp;коммерческой организации. Обладая значительными средствами, набирают большие позиции которые, оставляя следы на графике, а значить могут повести рынок за собой или держать его в диапазоне. Это интересует трейдера, отвечая на вопрос в какую сторону держать позицию, и уж совсем не интересно сколько заработал ММ. Именно это поведение как крупного игра их отличает. Вы можете даже конкретные алгоритмы найти в сети. Обладая дополнительной информацией они строят свои торговые стратегии, свой бизнес. <br />
			<i>19.01.2025 17:49:02, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77292/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77292/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 17:49:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77291/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			nikolz, спасибо, отец! <br />
			<i>19.01.2025 17:41:53, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77291/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77291/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 17:41:53 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77290/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			[FILE ID=12381] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12381&" width="1036" height="760" /><br /><i>19.01.2025 17:22:45, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77290/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77290/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 17:22:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77289/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			[FILE ID=12380] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12380&" width="956" height="852" /><br /><i>19.01.2025 16:58:52, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77289/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77289/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 16:58:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77288/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_X4bBHzrg" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, На форуме существует некая путаница в понятиях, и Вы не первый кто рассуждая о Маркет - мейкерах, упрощает их деятельность или сравнивает их с некими злодеями Крупными игроками занимающихся манипуляциями рынков. На фондовых биржах это крупные инвестиционные банки (например, Goldman Sachs, Morgan Stanley) как Вы думаете их интересуют сделки в один тик? На разных рынках по разному, задачи и техники принципиально одни.<br />Отслеживая сделки на рынке в целях выявления крупных сделок для лучшего понимания ситуации и реализации в системах принятия решений, делю игроков условно на 3 категории:<br />1) Крупный игрок<br />2) Маркет-мейкер<br />3) Ретейл.<br />Различие в поведении в торгах! имелось в виду именно это, поэтому подробно подчернил технический аспект.<br />Касаемо ММ, хотя это специализированная участник, компания или и.банк, обязанные соблюдать строгие регуляторные требования, они тоже совершают ошибки. Давайте представим ситуацию набрана огромная позиция, а рынок пошел против, что на весах, штраф если заметят, или манипуляция во спасение добра. И таких ситуаций множество. <br />И это только моя точка зрения в основе которой, методологии Ричарда Вайкоффа (Wyckoff) &nbsp;с его композитным игроком, решения как считать каждый принимает сам.<br />=============<br />Я лишь рассказал кто такие ММ на московской бирже. <br />На сайте биржи есть все условия и тарифы сколько и за что биржа платит.<br />не имеет значение какой ММ крупный или мелкий.<br /><B>ММ - это тот, кому платит биржа за игру на бирже. &nbsp;ММ оказывает платную услугу бирже - это главное.<br /></B>Всем остальным биржа оказывает платную услугу.<B><br /></B>Все остальные признаки игроков -большие маленькие банки не банки , никакого отношения к понятию ММ не имеют <br />
			<i>19.01.2025 16:55:14, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77288/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77288/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 16:55:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77287/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_tkrBRrGB" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, На форуме существует некая путаница в понятиях, и Вы не первый кто рассуждая о Маркет - мейкерах, упрощает их деятельность или сравнивает их с некими злодеями Крупными игроками занимающихся манипуляциями рынков. На фондовых биржах это крупные инвестиционные банки (например, Goldman Sachs, Morgan Stanley) как Вы думаете их интересуют сделки в один тик? На разных рынках по разному, задачи и техники принципиально одни.<br />Отслеживая сделки на рынке в целях выявления крупных сделок для лучшего понимания ситуации и реализации в системах принятия решений, делю игроков условно на 3 категории:<br />1) Крупный игрок<br />2) Маркет-мейкер<br />3) Ретейл.<br />Различие в поведении в торгах! имелось в виду именно это, поэтому подробно подчернил технический аспект.<br />Касаемо ММ, хотя это специализированная участник, компания или и.банк, обязанные соблюдать строгие регуляторные требования, они тоже совершают ошибки. Давайте представим ситуацию набрана огромная позиция, а рынок пошел против, что на весах, штраф если заметят, или манипуляция во спасение добра. И таких ситуаций множество. <br />И это только моя точка зрения в основе которой, методологии Ричарда Вайкоффа (Wyckoff) &nbsp;с его композитным игроком, решения как считать каждый принимает сам. <br />
			<i>19.01.2025 15:43:33, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77287/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77287/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 15:43:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77285/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_7PW2hksh" href="/user/16642/" bx-tooltip-user-id="16642">Acaw</a> написал:<br />А есть где почитать и главное увидеть элементарный пример постановки коллбека в очередь, в интернете именно такого примера не нашел. Могу только предположить, что в коллбеке поступившие данные пишутся в массив, который обрабатывается в main.<br /><br />Куда же сохранять информацию о сделках, заявках, если не в файл. В терминале ее на следующий день нет, а мне важно понимать когда именно возникла позиция, от этой задачи все и пошло. Могу предположить, что в какую-нибудь базу данных, но это же тоже файл.<br /><br />Можно ли обойтись перебором таблиц если предположить, что в реальной ситуации более 1000 сделок в день не будет.<br /><br />И самое главное по поводу таблиц, &nbsp;запоминания и скорости. Пока я делаю так - в текстовый файл пишу номера ордеров сделок, затем когда перебираю таблицу сделок беру в рассмотрение те номера, которых нет в файле, но таблица сделок перебирается вся.<br />=============<br />Я писал на форуме элементарные колбеки, которые использую сам. <br />Использую лишь те колбеки, которые необходимы для данной задачи. <br /><br />примеры:<br />
====code====
<pre>function OnClose() fconnect=nil end
function OnConnected(flag) fconnect=1; end
function OnDisconnected() fconnect=1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
function OnStop(flag)&nbsp;&nbsp;fconnect=nil;return 2000 end</pre>
=============
 <br />
====code====
<pre>function OnTransReply(t)
&nbsp;&nbsp;&nbsp;local stat=t.status; if stat&#60;2 or stat==3 or sta==15 then&nbsp;&nbsp;return; end 
&nbsp;&nbsp;&nbsp;local c,s=t.class_code,t.sec_code;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if c~=c_old or s_old~=s then &nbsp;&nbsp;&nbsp;tc=Tclas&#91;c&#93; if tc then ts=tc&#91;s&#93; end&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;if ts then -
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local id=t.trans_id;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local tt=ts&#91;1&#93;; del_trans(tt,id,M); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt=ts&#91;2&#93;; del_trans(tt,id,M);&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;end
end</pre>
=============

====code====
<pre>function OnTrade(t)
&nbsp;&nbsp;&nbsp;local c,s=t.class_code,t.sec_code; if c~=clas or sec~=s then &nbsp;&nbsp;&nbsp;tc=Tclas&#91;c&#93; if tc then ts=tc&#91;s&#93; end&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;if ts then&nbsp;&nbsp;tpr&#91;Ntp&#93;={Trade,t,tc,ts} EvSet(event);&nbsp;&nbsp;end
end</pre>
=============

====code====
<pre>function OnOrder(t)
&nbsp;&nbsp;&nbsp;local c,s=t.class_code,t.sec_code;
&nbsp;&nbsp;&nbsp;if c~=c_old or S~=s_old then&nbsp;&nbsp;tc=Tclas&#91;c&#93; if tc then ts=tc&#91;s&#93; end&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;if ts then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local tt=ts&#91;1&#93;; &nbsp;&nbsp;&nbsp;local num=t.order_num;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local id=t.trans_id;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local M=tt&#91;0&#93;; if M&#60;0 then M=-M; end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local i=0 while M&#62;i do i=i+1; if tt&#91;i&#93;==id then break; end i=i+1 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if t.flags&#38;1==1 then if M==i then Nor=Nor+1; tt&#91;i&#93;=Nor; end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else tt&#91;i&#93;=nil; end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ntp=Ntp+1; tpr&#91;Ntp&#93;={Order,t,tc,ts} EvSet(event);
&nbsp;&nbsp;&nbsp;end
end
</pre>
=============

====code====
<pre>function OnQuote(c,s)
&nbsp;&nbsp;&nbsp;if c~=c_old or S~=s_old then&nbsp;&nbsp;tc=Tclas&#91;c&#93; if tc then ts=tc&#91;s&#93; end&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;if ts then&nbsp;&nbsp;local t={c,s}; Ntp=Ntp+1; tpr&#91;Ntp&#93;={Quote,t,tc,ts}
&nbsp;&nbsp;&nbsp;if 3&#62;Ntp then EvSet(event);&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end
</pre>
=============
Вообще колбеки все могут быть одинаковые. &nbsp;<br />Алгоритм такой:<br />Получаемые в колбеке параметры упаковываем в таблицу с ключом и &nbsp;помещаем в очередь.<br />вот пример:
====code====
<pre>function OnTrade(t)&nbsp;&nbsp;tpr&#91;#tpr+1&#93;={"trade",t} EvSet(event); end
function OnOrder(t) tpr&#91;#tpr+1&#93;={"order",t} EvSet(event);end
function OnAllTrade(t) tpr&#91;#tpr+1&#93;={"AllTrade",t}&nbsp;&nbsp;EvSet(event);end
</pre>
=============
<br />EvSet(event) - это функция установки события. Если используете sleep, то эту функцию убираете.<br /><br />В main извлекаем &nbsp;из очереди &nbsp;и по ключу вызываем функцию для обработки параметров<br />Вот и весь алгоритм. &nbsp;Хороший пример main и очереди есть в документации.<br />Но очевидно мало кто читает документацию. <br />
			<i>19.01.2025 13:47:19, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77285/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77285/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 13:47:19 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77284/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			О мифах про маркет мейкеров (MM).<br />------------------ &nbsp;<br />MM это любой проф участник рынка, с который заключил с биржей договор об оказании &nbsp;услуг ММ.<br />Задача MM - создание ликвидности, что фактически сводится к обеспечению минимального спреда.<br />Условия такого договора есть на бирже.<br />--------------------------------<br />Кратко, условие следующее. <br />Если сделка стукает в позицию &nbsp;ММ, то биржа платит ему за такую сделку.<br />Вот и все &quot;тайны&quot; &nbsp;ММ. &nbsp;Остальное - &quot;теория заговора&quot;<br />-------------- &nbsp;<br />После ухода многих иностранных игроков, биржа изменила правила на фьючерсах. <br />В итоге на фьючерсах все , кто ставит пассивную заявку выполняют фактически задачу ММ. <br />--------------------<br />В итоге на рынке стало меньше &nbsp;сделок по рыночной цене мелких игроков.<br />А на рынке их уже 70%. В итоге меньше шума от толпы . <br />
			<i>19.01.2025 13:25:51, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77284/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77284/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 13:25:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77283/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Да, использую в обработке &nbsp;собственных сделок комбинированный подход. Ну про это говорили. Вот коллбек которым пользуюсь, на форуме он широко обсуждался, сто лет пользуюсь не заглядывая.
====code====
<pre>--&#91;&#91; Trade CALLBACK &#93;&#93;-- -- Вызов колбэка OnTrade, который использует self для контроля и записи данных
--function OnTrade(trade)&nbsp;&nbsp;&nbsp;&nbsp;tradeManager:OnTrade(trade) end
function OnTrade(trade)

&nbsp;&nbsp;&nbsp;&nbsp;local key = trade.trans_id
&nbsp;&nbsp;&nbsp;&nbsp;local i=tonumber(sdelka&#91;0&#93;); 
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;if working 
&nbsp;&nbsp;and key and key&#62;0
&nbsp;&nbsp;and (i==0 and key~=sdelka.id) or (i&#62;0 and sdelka&#91;i&#93;&#91;1&#93;~=key)
&nbsp;&nbsp;--and trade.sec_code==symbol --and trade.class_code==class 
&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;i=i+1;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;0&#93;=i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;={};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;0&#93;=sdelka&#91;0&#93;;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;1&#93;=trade.trans_id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;2&#93;=get_date(trade.datetime)
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;3&#93;=get_time(trade.datetime)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;4&#93;="B"; if bit.band(trade.flags,4)~=0 then sdelka&#91;i&#93;&#91;4&#93;="S"; end;
&nbsp;&nbsp;&nbsp;&nbsp;local dir = sdelka&#91;i&#93;&#91;4&#93;=="B" and 1 or sdelka&#91;i&#93;&#91;4&#93;=="S" and -1 or 0;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;5&#93;=trade.qty*dir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;6&#93;=trade.price;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;----- comission 
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;7&#93;=trade.clearing_comission+trade.exchange_comission+trade.tech_center_comission;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;8&#93;=trade.order_num;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;9&#93;=trade.trade_num;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka&#91;i&#93;&#91;10&#93;=trade.sec_code;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sdelka.id=trade.trans_id;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;Log:info("OnTrade! sdelka "..i .."; "
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; trans_id="..sdelka&#91;i&#93;&#91;1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; "..sdelka&#91;i&#93;&#91;2&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; "..sdelka&#91;i&#93;&#91;3&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; "..sdelka&#91;i&#93;&#91;4&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; "..sdelka&#91;i&#93;&#91;5&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; "..sdelka&#91;i&#93;&#91;6&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; comission="..sdelka&#91;i&#93;&#91;7&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; onum="..sdelka&#91;i&#93;&#91;8&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; tnum="..sdelka&#91;i&#93;&#91;9&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."; "..sdelka&#91;i&#93;&#91;10&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.."&#92;n"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;--local a,v; for a,v in pairs(sdelka&#91;i) do Log:trace( 'OnTrade! sdelka&#91;'..i..'&#93;&#91;'..tostring(a)..'&#93; = '.. tostring(v) ) end;
&nbsp;&nbsp;end
end;</pre>
============= <br />
			<i>19.01.2025 11:33:15, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77283/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77283/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 11:33:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77282/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Всем добрый день, хочу просто добавить фундамент, в о сознание цели. Знание сила! <br /><br />Коллбеки (или обратные вызовы) — это механизм, при котором одна функция передается как параметр в другую функцию, и она вызывается (или &quot;вызвана&quot;) внутри этой функции, когда наступает определенное событие или условие. В контексте торгового алгоритма и работы с терминалом QUIK, коллбеки используются для получения данных (например, сделок) и их обработки в реальном времени. В очередь ставятся данные полученные от них, для уменьшения нагрузки. <br /><br />Кто выступает контрагентом в сделке, и что нужно учитывать в скальпинге и подобных стратегиях.<br /><br />1) Рынки МосБиржи, если рассматриваете ее, управляются маркет-мейкерами. Основные алгоритмы для обеспечения максимальной эффективности которые, можно даже сказать, обязан использовать маркет-мейкер:<br /> a) Алгоритмы выставления двустороних котировок;<br /> b) Алгоритмы управления позицией;<br /> c) Арбитражные алгоритмы;<br /> d) Алгоритмы управления рисками;<br /> e) Алгоритмы HFT (High-Frequency Trading).<br />Работают не со стаканом а с книгой ордеров. <br />Принцип работы HFT-алгоритмов (High-Frequency Trading): <br /> &nbsp; &nbsp; &nbsp; &nbsp;Осуществляют тысячи сделок в секунду.<br /> &nbsp; &nbsp; &nbsp; &nbsp;Мониторят микро изменения цен и мгновенно реагируют на рыночные дисбалансы.<br />Технически:<br /> &nbsp; &nbsp; &nbsp; &nbsp;Используются FPGA (платы программируемой логики) для минимизации задержек.<br /> &nbsp; &nbsp; &nbsp; &nbsp;Торговля осуществляется максимально близко к серверам биржи (co-location),<br /> &nbsp; &nbsp; &nbsp; &nbsp;используются прямые подключения к биржевым серверам через высокоскоростные сети.<br /> &nbsp; &nbsp; &nbsp; &nbsp;Современные алгоритмы маркет-мейкеров работают с задержкой менее 1 миллисекунды.<br />А в кризисных ситуациях может выйти из рынка.<br /><br />2) На российском рынке сейчас преобладают частные инвесторы (МосБиржа), и этому есть простые объяснения. <br />Вот из оценки брокера, доля частных инвесторов в объеме торгов акциями на ноябрь 2024г. - 76% за 2023г. -40%. <br /><br />Разрабатывая архитектуру своей алгоритмической торговой программы, на мой взгляд, это нужно учитывать, особенно если стратегии скальперские.<br />Луа в рамках QUIK, прекрасно справляется с торговыми задачами. Корутинный подход (асинхронность) прекрасно решает задачу Event и Wait озвученные <a class="blog-p-user-name" id="bp_0gSW0u0u" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;для этого, один из подходов создается своя таблица событий (Event). <br />
			<i>19.01.2025 11:27:31, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77282/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77282/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 11:27:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77281/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			А есть где почитать и главное увидеть элементарный пример постановки коллбека в очередь, в интернете именно такого примера не нашел. Могу только предположить, что в коллбеке поступившие данные пишутся в массив, который обрабатывается в main.<br /><br />Куда же сохранять информацию о сделках, заявках, если не в файл. В терминале ее на следующий день нет, а мне важно понимать когда именно возникла позиция, от этой задачи все и пошло. Могу предположить, что в какую-нибудь базу данных, но это же тоже файл.<br /><br />Можно ли обойтись перебором таблиц если предположить, что в реальной ситуации более 1000 сделок в день не будет.<br /><br />И самое главное по поводу таблиц, &nbsp;запоминания и скорости. Пока я делаю так - в текстовый файл пишу номера ордеров сделок, затем когда перебираю таблицу сделок беру в рассмотрение те номера, которых нет в файле, но таблица сделок перебирается вся. <br />
			<i>19.01.2025 08:14:21, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77281/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77281/topic8859/</guid>
			<pubDate>Sun, 19 Jan 2025 08:14:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77280/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_BZ9eizW7" href="/user/16642/" bx-tooltip-user-id="16642">Acaw</a> написал:<br /> <noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> , &nbsp;<noindex><a href="https://forum.quik.ru/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex> &nbsp;спасибо отцы! Буду грызть. <br />Но как же не использовать sleep в main? Разве тогда квик не зависнет от постоянных действий? Какой sleep можно считать долгм? 200-300 не долгий? Т.е. если коллбек приходит во время sleep, то он может быть проигнорирован main и то, что должно быть сделано в этом коллбеке сделано не будет?<br /><br />И еще простейший вопрос, который сложно проверить на практике. Если заявка исполняется частями, то у каждой сделки по этой заявке будет свой trade_num?<br /><br />Что касается таблиц, то с одной стороны проще, но с другой надо запоминать какие сделки уже учтены в позиции, какие новые, хоть это и не сложно сделать. Допустим скрипт остановился и нужно восстановить позиции. У меня в файле записаны позиции, потом я их обновляю через разбор таблицы сделок. Но если в течении дня потребуется несколько раз их восстановить, то без отдельной записи сделок дня невозможно будет понять, какие из них уже учтены в позиции, а какие нет. &nbsp;<br />=============<br />Если освоите Си, то можно использовать функции Event и Wait &nbsp;(я их использую) &nbsp;и очередь и еще пул потоков. На форуме уже рассказывал. В этом случае время реакции main на колбек составляет не более 0.1 ms.<br />-------------------------------------------<br />Если используете sleep, то меньше 10 ms не получится. Работает нормально. Но без очереди Вы обязательно пропустите кучу колбеков, так как они приходят пакетами &nbsp;т е практически одновременно деcятками.<br />------------------------------<br />По номеру сделки - это же номер сделки, а не заявки. Каждая сделка - это договор и у него уникальный номер.<br />------------------------------<br />Если делаете по таблицам,то надо запоминать что уже обрабатывали. Тогда все будет быстро.<br />Например, в тесте у меня размер таблицы заявок составил 200 тысяч. Если делать просты перебором то ждать придется до завтра. <br />-----------------------------.<br />Я не пишу ничего в файлы, кроме параметров настройки и логов. Не вижу смысла это делать. <br />Прошлое не исправишь и оно еще никого ничему не научило.<br />---------------------<br />Если требуется сохранить в файлах, то можно выгрузить все в конце дня. Но пока у меня такой надобности не было. <br />
			<i>18.01.2025 20:31:00, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77280/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77280/topic8859/</guid>
			<pubDate>Sat, 18 Jan 2025 20:31:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77279/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			sleep обычно небольшой от 10 до 60 млс. Зачем 200 сразу.<br />Сделки надо учитывать, да. Но их можно очищать уже через день. Даже на след. день, исключая те, что в вечернюю сессию на срочном рынке. Их и с колбеками необходимо учитывать, т.к. колбек может и приходит несколько раз на одно событие. А значит чтобы исключить повторный учёт, необходимо их запомнить. Особой проблемы в этом нет.<br /><br /><br />====quote====<br />каждой сделки по этой заявке будет свой trade_num<br />=============<br /><br />Да, будет. По одному ордеру может быть неограниченное число сделок, если представить такой ордер. <br />
			<i>18.01.2025 16:44:52, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77279/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77279/topic8859/</guid>
			<pubDate>Sat, 18 Jan 2025 16:44:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77274/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, <noindex><a href="https://forum.quik.ru/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex> спасибо отцы! Буду грызть. <br />Но как же не использовать sleep в main? Разве тогда квик не зависнет от постоянных действий? Какой sleep можно считать долгм? 200-300 не долгий? Т.е. если коллбек приходит во время sleep, то он может быть проигнорирован main и то, что должно быть сделано в этом коллбеке сделано не будет?<br /><br />И еще простейший вопрос, который сложно проверить на практике. Если заявка исполняется частями, то у каждой сделки по этой заявке будет свой trade_num?<br /><br />Что касается таблиц, то с одной стороны проще, но с другой надо запоминать какие сделки уже учтены в позиции, какие новые, хоть это и не сложно сделать. Допустим скрипт остановился и нужно восстановить позиции. У меня в файле записаны позиции, потом я их обновляю через разбор таблицы сделок. Но если в течении дня потребуется несколько раз их восстановить, то без отдельной записи сделок дня невозможно будет понять, какие из них уже учтены в позиции, а какие нет. &nbsp; <br />
			<i>18.01.2025 14:38:39, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77274/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77274/topic8859/</guid>
			<pubDate>Sat, 18 Jan 2025 14:38:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77273/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Кто-то помнит из присутствующих, как биржа в вечернюю сессию на срочном рынке загрузила позиции из какого-то прошлого бекапа? <br />
			<i>18.01.2025 13:34:32, Megafan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77273/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77273/topic8859/</guid>
			<pubDate>Sat, 18 Jan 2025 13:34:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77268/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_zCS8veKH" href="/user/16642/" bx-tooltip-user-id="16642">Acaw</a> написал:<br />Да, но я спрашивал несколько другой аспект. Что лучше обрабатывать для ведения позиции коллбеки или таблицы, учитывая ненадежность коллбеков? Если и то и то, то нужно это все постоянно приводить к одному, а если исходить, что первоисточник это таблица и сверяемся с ней, то зачем обрабатывать коллбек. Разве что коллбек может придти раньше обновления таблицы, но эта нано разница не играет роли.<br />=============<br />Про колбеки<br />Они надежны так же как таблицы. Так как они вызываются перед записью в таблицы.<br />-----------------------<br />Проблема обычно бывает в том, что по рекомендации разработчиков в main используют sleep.<br />Кроме того, &nbsp;начинающие писатели роботов не используют очередь событий.<br />----------------------------<br />Поэтому без очереди и c долгим sleep колбеки просто игнорируются main и не обрабатываются.<br />-----------------------<br />Поэтому и возникают пропуски событий и &nbsp;не совпадает значение в таблице и по колбекам.<br />---------------------<br />Если Вы не занимаетесь скальпингом то по таблицам работать проще<br />---------------------<br />Но если колбеки не используете, То можно писать робота в индикаторе - это еще проще и также надежно.<br />Выбор за вами <br />
			<i>17.01.2025 17:55:52, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77268/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77268/topic8859/</guid>
			<pubDate>Fri, 17 Jan 2025 17:55:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77266/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_sS6eU54c" href="/user/16642/" bx-tooltip-user-id="16642">Acaw</a> написал:<br />Да, но я спрашивал несколько другой аспект. Что лучше обрабатывать для ведения позиции коллбеки или таблицы, учитывая ненадежность коллбеков? Если и то и то, то нужно это все постоянно приводить к одному, а если исходить, что первоисточник это таблица и сверяемся с ней, то зачем обрабатывать коллбек. Разве что коллбек может придти раньше обновления таблицы, но эта нано разница не играет роли.<br />=============<br />Я предпочитаю таблицы. Кто-то колбеки. Причина выше - всё равно необходимой пройтись по сделкам, ордерам, чтобы проверить что случилось с момента прошлого запуска скрипта.<br />Да и надёжней это. Хоть и кто-то скажет - как можно, это же &quot;прошлый век&quot;. Но в том-то и дело, что если задача надёжно получить информацию, то необходимо в реальном времени постоянно опрашивать датчик. Так и здесь. Мы же про деньги говорим и алгоритмы в реальном времени работают. <br />
			<i>17.01.2025 13:33:02, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77266/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77266/topic8859/</guid>
			<pubDate>Fri, 17 Jan 2025 13:33:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77265/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Да, но я спрашивал несколько другой аспект. Что лучше обрабатывать для ведения позиции коллбеки или таблицы, учитывая ненадежность коллбеков? Если и то и то, то нужно это все постоянно приводить к одному, а если исходить, что первоисточник это таблица и сверяемся с ней, то зачем обрабатывать коллбек. Разве что коллбек может придти раньше обновления таблицы, но эта нано разница не играет роли. <br />
			<i>17.01.2025 11:31:36, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77265/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77265/topic8859/</guid>
			<pubDate>Fri, 17 Jan 2025 11:31:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77264/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Логика проста. Колбек - это реакция на событие, в терминале - это изменение соответствующей таблицы. Например, установили ордер - появилась запись в таблице ордеров. Ордер исполнился - изменился статус (флаг состояния). Всё, вроде, красиво. Обработай колбек - получили результат. Минимум усилий, скрипт почти всё время работает в холостую, ожидая колбеки.<br /><br />Но, как говорил выше, реальность же сложнее. Скрипт может быть остановлен, а ордер исполнился в это время. Пользователь решил руками закрыть или открыть позицию - а почему нет, спрашивается. Сдвинул ордер на графике и т.д. Да и просто может выключить терминал вечером, когда ещё идет вечерняя сессия. Не у всех терминал на постоянно работающем VPS.<br /><br />Т.е. есть разные ситуации. Если Вы пишите скрипт для себя и прекрасно понимаете что можно, а что нельзя делать, то да, используйте колбеки, понимаю их риски. Плюс учитывая, что они приходят не один раз на одно событие. А вот если скрипт не для себя, то уже приходится писать с расчётом на то, что будет выполнено всё то, что Вы не предполагаете. Могут даже пожаловаться на то, что сделка не открылась после выключения терминала. Я же скрипт запустил, выключил терминал чтобы не сидеть перед ним - где сделка? <br />
			<i>17.01.2025 11:12:07, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77264/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77264/topic8859/</guid>
			<pubDate>Fri, 17 Jan 2025 11:12:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77261/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			onTransReply тоже можно в источнике посмотреть, но тут кажется дешевле коллбек обработать. Можно и с заявками и сделками тоже дешевле? Ведь по итогу дня может быть и 1000 заявок и сделок и каждый раз дергать таблицу это замедление работы? Но опять таки если все равно с таблицей нужно сверяться, не очень понятна логика. <br />
			<i>17.01.2025 10:35:05, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77261/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77261/topic8859/</guid>
			<pubDate>Fri, 17 Jan 2025 10:35:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77259/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			&quot;Запустил скрипт - просканировал сделки и убедился, что запомненная позиция корректна с точки зрения количества. &quot;<br />Если у нас эталон это источник данных, то тогда зачем нужны коллбеки, когда всегда можно посмотреть в таблицу сделок и снять состояние. Тем более, если мы доверяем источнику, то если запомненная позиция отличается, то что, мы ее приводим в соответствие источнику? Тогда зачем запоминать.<br /> На поверхности разница только в том, что колбеки в идеале приходят по факту изменения позиции, а смотреть нужно руками в какое-то время, как минимум перед действием (входом/выходом из позиции) при завершении работы скрипта в конце дня, чтобы зафиксировать сделки и обновить позицию.<br />Но опять таки вопрос, зачем нагружать скрипт дерганием по коллбекам?<br />Допустим отправку транзакции нужно фиксировать, а onTransReply обрабатывать, если вдруг ошибка. А результаты onOrder и OnTrade по идее должны отражаться в таблицах, может чуть чуть позже, но не суть.<br />Так все же какой сакраментальный смысл в их обработке? <br />
			<i>17.01.2025 10:05:49, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77259/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77259/topic8859/</guid>
			<pubDate>Fri, 17 Jan 2025 10:05:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77211/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В реальности лучше перед подачей транзакции пойти и посмотреть, что в соответствующих таблицах, рассчитать лимиты и параметры.<br />Проблема в том, что колбек в терминале - весьма ненадёжная вещь. Точнее в спокойные периоды работает как ожидается и может создаться ощущение, что так будет всегда.<br />Но бывают моменты, когда клиент-серверное взаимодействие настолько медленное - повышенная торговая активность, или просто сбой в работе сервера брокера, что эти колбеки не приходят, приходят повторно.<br /><br />Так что я лучше проверю руками в самом источнике информации. Тем более, что этот контур всё равно необходимо реализовывать, например, при перезапуске скрипта. Колбеки прошли давно, а понять ситуацию необходимо сейчас.<br /><br />Позицию же необходимо вести самостоятельно. Да, бывают ситуации когда сделка прошла вне работы скрипта и необходимо провести выравнивание. Но в целом, прошла сделка - запомнил. Запустил скрипт - просканировал сделки и убедился, что запомненная позиция корректна с точки зрения количества. Где запоминать - это выбор по предпочтениям. То ли в файле состояния, то ли в базе данных. Не важно. Лог файл не предназначен для хранения информации, это инструмент анализа. <br />
			<i>12.01.2025 14:28:25, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77211/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77211/topic8859/</guid>
			<pubDate>Sun, 12 Jan 2025 14:28:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Дата и время позиции</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77210/topic8859/">Дата и время позиции</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Не совсем понял про работу с коллбэком заявок, я как раз хотел от них уйти и использовать коллбэки от денег и депо. <br />
			<i>12.01.2025 14:18:00, Acaw.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77210/topic8859/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77210/topic8859/</guid>
			<pubDate>Sun, 12 Jan 2025 14:18:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
