Блог им. gardist

скрипт для quik

скрипт для отслеживания бумаг по системе BWS:

--Массив с Тикерами, добавьте нужные тикеры
aTickerList = {"MSNG", "GAZP", "LKOH",
	    "SIBN", "GMKN","ROSN",
	    "SBER", "TATN", "NVTK",
	    "IRAO", "RSTI", "SBERP",
	    "PHOR", "SNGS", "TRNFP",
	    "VTBR", "FEES", "MVID",
	    "RASP", "MFON", "AFLT", 
	    "MAGN", "ALRS", "MTSS", "MOEX",
	    "RTKM", "MGNT", "NLMK", "SNGSP",
	    "CHMF", "MTLR", "HYDR", "MFON",
	    "RSTI", "PLZL", "BANEP", "POLY"
	    };

--Функция поиска цены
function fGetPrice(sTickerName, sNum)
	--Подключаемся к источнику данных
	local ds=CreateDataSource("TQBR", sTickerName, INTERVAL_D1);
	while (Error=="" or Error == nil) and ds:Size() ==0 do sleep(10) end;
	if Error ~="" and Error ~=nil then message("Error: "..Error, 1) end;
	local sSize=ds:Size();
	local sCurrentPrice=ds:O(sSize);
	
	local sLastWeekPrice7=0;
	local sLastWeekPrice14=0;

	--Берем цену закрытия свечи неделю назад
	sLastWeekPrice7=ds:C(sSize-4);
	--Берем цену закрытия свечи 2 недели назад
	sLastWeekPrice14=ds:C(sSize-8);

		--Вычисляем проценты
		local sPrc7=math.floor((100-((sLastWeekPrice7*100)/sCurrentPrice))*100)/100;
		local sPrc14=math.floor((100-((sLastWeekPrice14*100)/sCurrentPrice))*100)/100;

		--Заполняем таблицу значениями
		SetCell(t_id, sNum, 0, tostring(sTickerName));
   		SetCell(t_id, sNum, 1, tostring(sCurrentPrice),sCurrentPrice);
   		SetCell(t_id, sNum, 2, tostring(sLastWeekPrice7),sLastWeekPrice7);
   		SetCell(t_id, sNum, 3, tostring(sLastWeekPrice14),sLastWeekPrice14);
   		SetCell(t_id, sNum, 4, tostring(sPrc7),sPrc7);
		SetCell(t_id, sNum, 5, tostring(sPrc14),sPrc14);

		--Текущая цена больше цены прошлой недели - раскрашиваем зеленым
		if sCurrentPrice>sLastWeekPrice7 then 
			fGreen(sNum);
		end;
		--Текущая цена меньше цены прошлой недели - раскрашиваем красным
		if sCurrentPrice<sLastWeekPrice7 then
			fRed(sNum);
	   	end;
		--Текущая цена больше цены прошлой недели и цена прошлой недели больше цены позапрошлой недели
		--раскрашиваем желтым
		if sCurrentPrice>sLastWeekPrice7 and sLastWeekPrice7>sLastWeekPrice14  then 
			fYellow(sNum);
	   	end;
end;

--- Функция создает таблицу
function CreateTable()
	-- Получает доступный id для создания
	t_id = AllocTable();	
	-- Добавляет 6 колонок
 	AddColumn(t_id, 0, "Тикер", true, QTABLE_INT_TYPE, 15);
 	AddColumn(t_id, 1, "Сегодня", true, QTABLE_INT_TYPE, 15);
 	AddColumn(t_id, 2, "Неделя", true, QTABLE_INT_TYPE, 15);
 	AddColumn(t_id, 3, "2 Недели", true, QTABLE_INT_TYPE, 15);
 	AddColumn(t_id, 4, "Неделя (%)", true, QTABLE_INT_TYPE, 15);
 	AddColumn(t_id, 5, "2 Недели (%)", true, QTABLE_INT_TYPE, 15);
	
	-- Создаем
	t = CreateWindow(t_id);
	-- Даем заголовок	
	SetWindowCaption(t_id, "7 Days");

   -- Добавляем строки
      for k,v in pairs(aTickerList) do
		InsertRow(t_id, k);
      end;
end;

--- Функции раскрашивают ячейки таблицы
function fRed(col)
	SetColor(t_id, col, -1, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0));
end;
function fGreen(col)
	SetColor(t_id, col, -1, RGB(157,241,163), RGB(0,0,0), RGB(157,241,163), RGB(0,0,0));
end;
function fYellow(col)
	SetColor(t_id, col, -1, RGB(249,247,172), RGB(0,0,0), RGB(249,247,172), RGB(0,0,0));
end;

--Основная функция
function main()
	-- Создаем таблицу
 	CreateTable();

 	--Пробегаемся по массиву тикеров
	for k,v in pairs(aTickerList) do
	  fGetPrice(v, k);
	end;

end;
как выглядит в квике:
скрипт для quik
ссылка на скрипт 
P.S.: не является рекомендацией к покупке/продаже акций, вы используете программу на свой страх и риск.

кросспост rffx.ru
  • обсудить на форуме:
  • QUIK
5.2К | ★80
16 комментариев
Полезная работа
Единственный вопрос как скрипт переживет праздники, например что он насчитает 15/03?

avatar
kachanov, 

потестил праздники, в праздники не работает.
если выпадает прошлая неделя на праздник будет 0 в таблице.
пока не придумал как обойти это.

avatar
gardist, варианта два:
1. просто сдвиг на заданное количество свечей (тут будут регулярно кривые недели)
2. пусть пользователь задает использовать сдвиг или нет, в случае праздника, а если использовать то какой (тут новый год и майские все равно тяжело учесть)

avatar
gardist, Подскажите плиз, как в этом скрипте таймфрейм менять на День, Месяц, Год и как скрипт в Квик вставить? Возможно ли сделать СтопЛосс как у AlexChi
Спасибо.
avatar
gardist, Доброго времени.
Ваш скрипт интересная штука.
Пока юзал ваш скрипт возникло несколько вопросов. 
Я так понимаю сам скрипт не  отображает 8 лучших акций за неделю вверху таблицы, акции будут располагаться в таком порядке, в каком указан тикер в коде. Берётся цена открытия, а если поменять на цену закрытия, сильно всё изменится...?


Если попробовать сортировать по % недели, тоже получается бяка. Сначала всё нормально, но потом начинается мешанина, так же подсвечиваются все тикеры, не только лучшие. А каков алгоритм цветового отображения. Как сделать, что бы было более похоже на BWS. 

avatar
kachanov, я в своем аналогичном скрипте считаю неделю как 5 торговых дней, т.е. в вашем примере неделя будет с 7 марта по 15 марта, т.к. 8 марта праздничный день.
avatar
AlexChi, ну это самый простой и разумный на мой взгляд подход.
Я тоже в похожих ситуациях именно его использую 
avatar
AlexChi, 

спасибо, это действительно удобный вариант.
сделал отмотку недели по торговым дням (свечам)

avatar
а не правильнее ли рассчитать доходность не по разнице с прошлой неделей, а по meam и вычислить sigma (SD), и если ушли выше 1sd, то считать, что бумага лучшая за неделю ?
кстати если считать по дням и входить каждый день, а не раз в неделю, то какая будет доходность ))
avatar
Константин, 

интересно
а можете дать ссылку где почитать про расчет сигмы?

avatar
gardist, тут, тут и тут например )))
в 2017 году писал робота под МТ5 на эту тему, правда сам не стал тогда торговать т.к. там вход был лимитниками перед аукционом закрытия, а протестить корректно это не получалось т.к. аукционы в МТ5 (да и вообще на истории) не сводятся и получалось что на тестах стратегия четко шла в гору )) а на практике часть сделок анулировалась на аукционах, а часть закрывалась по ТП ))
ТФ брали D1, потом изголялись на меньших и даже делали открытие на следующий день сразу после аукциона открытия и вообще в течении дня )) в принципе доходность там нормальная с учетом доходности по вашей стратегии (то что тут и в других темах писали) т.е. в районе 25% годовых, но меня такая доходность не устраивала, поэтому и не стал дальше пилить робота )) хотя он в боевом положении до сих пор лежит у меня, нацеленный вылететь в корзину )))
avatar
Красава+. Праздники у нас 2 раза в году н.г. и майские, потом неделю все отходят, входят в работу так что найдется выход. А в принципе можешь сделать ссылку на исключение с переносом, прописав конкретные даты. 15.3 то значение…
avatar
есть неэффективности в коде,
например
sTempYear=tonumber(os.date("%Y", os.time(ds:T(i))));
 насколько я понимаю, это просто 
sTempYear = ds:T(i).year

аналогично вроде
local sLastDayWeek7=tonumber(os.date("%d", os.time(dt7)));
 это просто 
local sLastDayWeek7 = os.time(dt7).day

хотя раньше почему-то нормально пользуешься
local dt7 = os.date("*t"); dt7.day = dt7.day - 8;
avatar
Надеюсь вы не пишите скрипт на этих клеточках, глаза сломать можно.
avatar
Надо добавить вторую неделю отдельно и раскрасить изменение по каждой неделе и суммарное разными цветами в строке. Тогда будет информативно. 

А в таком виде неудобно.
avatar

Читайте на SMART-LAB:
Фото
Актуальный состав портфеля и взгляд на рынок 2026: по-прежнему 0% позитива.
Добрый вечер! С момента предыдущего поста, касающегося моего портфеля, прошел квартал.  Пришло время актуализировать его состав. Также поделюсь...
Фото
Биткоин попробует разыграть «треугольную карту»?
«Цифровое золото» прорвало верхнюю границу восходящего треугольника на уровне 94 500 и сейчас тестирует пробитую горизонталь, формируя серию...
Фото
Индикатор Fractal: торговые сигналы и робот для OsEngine. Видео
В этом видео разбираем индикатор Fractal Билла Вильямса — один из самых известных инструментов в трейдинге. Покажем, как формируются фракталы,...
Фото
Стратегия 2026 по рынку акций от Mozgovik Research: трудный год, но, возможно, последний год низких цен
Сегодня у меня первый день официального отпуска. За окном темная звездная ночь, яркая белая луна, +24С и шум волн Андаманского моря. Неудачный...

теги блога gardist

....все тэги



UPDONW
Новый дизайн