<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Скринер акций по CCI]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Скринер акций по CCI форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 26 Apr 2026 02:36:09 +0300</pubDate>
		<item>
			<title>Скринер акций по CCI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77581/topic8923/">Скринер акций по CCI</a></b> <i>Создание отдельной таблицы со всеми акциями и текущим показателем CCI c обновлением каждые 10 минут.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ошибка в getNumCandles. Туда тэг графика нужно вставлять (один параметр). getCandle не существует, есть getCandlesByIndex, если вы где-то выше за пределами примера его не переименовывали. Параметров у getCandlesByIndex четыре, а не три. &nbsp;И OnStop() запускать не надо, просто внизу ScanStocks() оставьте, если без main скрипт пока. <br />
			<i>09.02.2025 22:59:59, Игорь М.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77581/topic8923/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77581/topic8923/</guid>
			<pubDate>Sun, 09 Feb 2025 22:59:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Скринер акций по CCI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77580/topic8923/">Скринер акций по CCI</a></b> <i>Создание отдельной таблицы со всеми акциями и текущим показателем CCI c обновлением каждые 10 минут.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Товарищи не понимаю в чем проблема, так как в компиляторе* с тестовыми параметрами (заданными вручную) все работает и тикеры акции есть и параметр CCI на против каждой акции есть, а при запуске &nbsp;скрипта в QUIK выдает ошибку: &nbsp; 27: bad &#39;for&#39; limit (number expected, got nil). Устранить не получается. Добавил даже при &nbsp;nil выводить другое значение, не помогло. Помогите пожалуйста добрые люди.<br /><br />В компиляторе выдает так, но там заданы параметры (данные) в ручную.<br /><table class="data-table"><tr><th>Тикер</th><th>CCI</th></tr><tr><td>SBER</td><td>45.67</td></tr><tr><td>GAZP</td><td>120.34</td></tr><tr><td>LKOH</td><td>-80.12</td></tr></table>Код:<br />-- Настройки<br />local CCI_PERIOD = 20 -- Период для расчета CCI<br />local OVERBOUGHT = 200 -- Уровень перекупленности<br />local OVERSOLD = -200 -- Уровень перепроданности<br />local UPDATE_INTERVAL = 600 * 1000 -- Интервал обновления в миллисекундах (10 минут)<br /><br />-- Создаем таблицу для вывода результатов<br />local results_table = AllocTable() -- Создаем таблицу<br />AddColumn(results_table, 1, &quot;Тикер&quot;, true, QTABLE_STRING_TYPE, 10) -- Колонка для тикера<br />AddColumn(results_table, 2, &quot;CCI&quot;, true, QTABLE_DOUBLE_TYPE, 10) -- Колонка для значения CCI<br />CreateWindow(results_table) -- Создаем окно таблицы<br />SetWindowPos(results_table, 100, 100, 400, 300) -- Позиция и размер окна<br /><br />-- Функция для расчета CCI<br />function CalculateCCI(ticker, period)<br /> &nbsp; &nbsp;-- Получаем исторические данные (Дневной таймфрейм)<br /> &nbsp; &nbsp;local highs = {}<br /> &nbsp; &nbsp;local lows = {}<br /> &nbsp; &nbsp;local closes = {}<br /><br /> &nbsp; &nbsp;-- Используем getCandles для получения данных<br /> &nbsp; &nbsp;local size = getNumCandles(ticker, INTERVAL_D1, 0, period)<br /> &nbsp; &nbsp;if size == 0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;return nil -- Если данные отсутствуют, возвращаем nil<br /> &nbsp; &nbsp;end<br /><br /> &nbsp; &nbsp;for i = 1, size do<br /> &nbsp; &nbsp; &nbsp; &nbsp;local candle = getCandle(ticker, INTERVAL_D1, i - 1)<br /> &nbsp; &nbsp; &nbsp; &nbsp;highs&#91;i&#93; = candle.high<br /> &nbsp; &nbsp; &nbsp; &nbsp;lows&#91;i&#93; = candle.low<br /> &nbsp; &nbsp; &nbsp; &nbsp;closes&#91;i&#93; = candle.close<br /> &nbsp; &nbsp;end<br /><br /> &nbsp; &nbsp;-- Рассчитываем типичную цену<br /> &nbsp; &nbsp;local typical_price = {}<br /> &nbsp; &nbsp;for i = 1, period do<br /> &nbsp; &nbsp; &nbsp; &nbsp;typical_price&#91;i&#93; = (highs&#91;i&#93; + lows&#91;i&#93; + closes&#91;i&#93;) / 3<br /> &nbsp; &nbsp;end<br /><br /> &nbsp; &nbsp;-- Рассчитываем SMA типичной цены<br /> &nbsp; &nbsp;local sma = 0<br /> &nbsp; &nbsp;for i = 1, period do<br /> &nbsp; &nbsp; &nbsp; &nbsp;sma = sma + typical_price&#91;i&#93;<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;sma = sma / period<br /><br /> &nbsp; &nbsp;-- Рассчитываем среднее отклонение<br /> &nbsp; &nbsp;local mean_deviation = 0<br /> &nbsp; &nbsp;for i = 1, period do<br /> &nbsp; &nbsp; &nbsp; &nbsp;mean_deviation = mean_deviation + math.abs(typical_price&#91;i&#93; - sma)<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;mean_deviation = mean_deviation / period<br /><br /> &nbsp; &nbsp;-- Рассчитываем CCI<br /> &nbsp; &nbsp;local cci = (typical_price&#91;period&#93; - sma) / (0.015 * mean_deviation)<br /> &nbsp; &nbsp;return cci<br />end<br /><br />-- Основная функция скринера<br />function ScanStocks()<br /> &nbsp; &nbsp;Clear(results_table) -- Очищаем таблицу перед новым сканированием<br /><br /> &nbsp; &nbsp;-- Получаем список всех акций<br /> &nbsp; &nbsp;local stocks = getClassSecurities(&quot;TQBR&quot;) -- Класс акций на MOEX<br /> &nbsp; &nbsp;if not stocks then<br /> &nbsp; &nbsp; &nbsp; &nbsp;message(&quot;Не удалось получить список акций.&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp;return<br /> &nbsp; &nbsp;end<br /><br /> &nbsp; &nbsp;-- Проходим по всем акциям<br /> &nbsp; &nbsp;for i = 1, #stocks do<br /> &nbsp; &nbsp; &nbsp; &nbsp;local ticker = stocks&#91;i&#93;<br /> &nbsp; &nbsp; &nbsp; &nbsp;local cci = CalculateCCI(ticker, CCI_PERIOD) -- Рассчитываем CCI<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;if cci then -- Проверяем, что CCI рассчитан<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Добавляем данные в таблицу<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local row = InsertRow(results_table, -1)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetCell(results_table, row, 1, ticker) -- Тикер<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetCell(results_table, row, 2, string.format(&quot;%.2f&quot;, cci)) -- Значение CCI<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br /><br /> &nbsp; &nbsp;-- Устанавливаем таймер для следующего вызова через 10 минут<br /> &nbsp; &nbsp;SetTimer(function()<br /> &nbsp; &nbsp; &nbsp; &nbsp;ScanStocks() -- Вызываем функцию сканирования снова<br /> &nbsp; &nbsp;end, UPDATE_INTERVAL)<br />end<br /><br />-- Запуск скринера<br />function OnStop()<br /> &nbsp; &nbsp;ScanStocks() -- Вызываем функцию сканирования<br />end<br /><br />-- Запуск скринера при старте<br />OnStop() <br />
			<i>09.02.2025 20:57:58, Колыван.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77580/topic8923/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77580/topic8923/</guid>
			<pubDate>Sun, 09 Feb 2025 20:57:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
