скрипт для отслеживания бумаг по системе
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;
как выглядит в квике:
ссылка на скрипт
P.S.: не является рекомендацией к покупке/продаже акций, вы используете программу на свой страх и риск.
кросспост
rffx.ru
Единственный вопрос как скрипт переживет праздники, например что он насчитает 15/03?
потестил праздники, в праздники не работает.
если выпадает прошлая неделя на праздник будет 0 в таблице.
пока не придумал как обойти это.
1. просто сдвиг на заданное количество свечей (тут будут регулярно кривые недели)
2. пусть пользователь задает использовать сдвиг или нет, в случае праздника, а если использовать то какой (тут новый год и майские все равно тяжело учесть)
Спасибо.
Ваш скрипт интересная штука.
Пока юзал ваш скрипт возникло несколько вопросов.
Я так понимаю сам скрипт не отображает 8 лучших акций за неделю вверху таблицы, акции будут располагаться в таком порядке, в каком указан тикер в коде. Берётся цена открытия, а если поменять на цену закрытия, сильно всё изменится...?
Если попробовать сортировать по % недели, тоже получается бяка. Сначала всё нормально, но потом начинается мешанина, так же подсвечиваются все тикеры, не только лучшие. А каков алгоритм цветового отображения. Как сделать, что бы было более похоже на BWS.
Я тоже в похожих ситуациях именно его использую
спасибо, это действительно удобный вариант.
сделал отмотку недели по торговым дням (свечам)
кстати если считать по дням и входить каждый день, а не раз в неделю, то какая будет доходность ))
интересно
а можете дать ссылку где почитать про расчет сигмы?
в 2017 году писал робота под МТ5 на эту тему, правда сам не стал тогда торговать т.к. там вход был лимитниками перед аукционом закрытия, а протестить корректно это не получалось т.к. аукционы в МТ5 (да и вообще на истории) не сводятся и получалось что на тестах стратегия четко шла в гору )) а на практике часть сделок анулировалась на аукционах, а часть закрывалась по ТП ))
ТФ брали D1, потом изголялись на меньших и даже делали открытие на следующий день сразу после аукциона открытия и вообще в течении дня )) в принципе доходность там нормальная с учетом доходности по вашей стратегии (то что тут и в других темах писали) т.е. в районе 25% годовых, но меня такая доходность не устраивала, поэтому и не стал дальше пилить робота )) хотя он в боевом положении до сих пор лежит у меня, нацеленный вылететь в корзину )))
например
насколько я понимаю, это просто
sTempYear = ds:T(i).year
аналогично вроде
это просто
local sLastDayWeek7 = os.time(dt7).day
хотя раньше почему-то нормально пользуешься
А в таком виде неудобно.