Очереди и двойные очереди в луа

Страницы: Пред. 1 ... 10 11 12 13 14 ... 26 След.
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Nikolay, Спасибо,

да так примерно и  реализовывал вот пример со старого скрипта

if newREJIM then
Log:trace( ' =========================' )
Log:trace( 'REJIM: '..REJIM..'; (TEST='..tostring(TEST)..'; AVTO='..tostring(AVTO)..'; EXPERT='..tostring(EXPERT)..')');--..tostring(a)
Log:trace( ' =========================' )

if TEST then--REJIM=='
   Log:trace( 'REJIM: '..REJIM..'; Синхронизация');

----
local i,d,t,hour='0','0',0;
---- Дневной
do  local countD=getNumCandles(tag[4]);      
   countD = countD - test.count_day;
   local bar = getCandlesByIndex(tag[4],0,countD-1,1)
local td = bar[0] and bar[0].datetime or nil;
   if td then d=get_date(td); t=get_time(td); end;
Index[4]=countD;
dd=d;
Log:info('Синхронизация Дня: '..d..'=='..dd..'; Index[4]='..Index[4] );
end
   ---- Часовой - средне срочный для установления тренда на день.
local countH=getNumCandles(tag[3]); for i=countH,1,-1 do
   local bar = getCandlesByIndex(tag[3],0,i-1,1)[0]
local td = bar and bar.datetime or nil;

и так далее ...


В начале этот код и хотел перетащить и вставить  в новый скрипт.
Там я проходил по 4 тайм фреймам , но какое то нагромождение, в общем  ревизию не прошел.

Вот я и подумал возможно есть наработки более удобные,
ну к примеру двигать через интервалы ведь известно же
INTERVAL_D1 == 1440 минут
INTERVAL_H1 == 60 минут
или через  метку там время возвращается.
 
Я не использую данные с графиков, только потоки данных и расчет на них.
Да и спрятать можно все, написав свой итератор. Тогда вызов станет универсальным, простым в конечной точке вызова.
 
Прислушался к советам, поднял старые наработки, сам поднапрягся,
( ну не все могут быть хирургами или хорошими адвокатами, а я не программист пишу потихоньку для себя).

Спрятать удалось пока только поиск начальной точки для входа в режим теста.
Оказалось не все так прозаично, Изменили время начало торгов на секции срочного рынка,
в виде добавления еще одной сессии "Аукцион открытия". Полезно делать ревизию старым скриптам!
Соответственно изменилась индексация на графике в квике. Несколько удивил подход разработчиков?

Вот так теперь выглядит начало торгов на разных тайм фреймах:

1 минута;      20230824;  085900;  83.09; 83.1;   83.09
5 минут;        20230824;  085500;  83.09; 83.1;   83.09
120 минут;    20230824;  080000;  83.09; 83.17; 82.7
1440 минут;  20230824;  000000;  83.09; 83.63; 82.16

т.е. нет единого времени открытия в квике.

Заглянул на сайт ММВБ, а у них вообще значится "Аукцион открытия" 08:50.

Про свою реализацию, сделал через замыкание. запихнув все интервалы готовые. и что б потом можно добавить свои.
На вход подаем дату и время желаемого начала теста, на выходе массив необходимых индексов все банально.
 
Цитата
VPM написал:
Прислушался к советам, поднял старые наработки, сам поднапрягся,
( ну не все могут быть хирургами или хорошими адвокатами, а я не программист пишу потихоньку для себя).

Спрятать удалось пока только поиск начальной точки для входа в режим теста.
Оказалось не все так прозаично, Изменили время начало торгов на секции срочного рынка,
в виде добавления еще одной сессии "Аукцион открытия". Полезно делать ревизию старым скриптам!
Соответственно изменилась индексация на графике в квике. Несколько удивил подход разработчиков?

Вот так теперь выглядит начало торгов на разных тайм фреймах:

1 минута;      20230824;  085900;  83.09; 83.1;   83.09
5 минут;        20230824;  085500;  83.09; 83.1;   83.09
120 минут;    20230824;  080000;  83.09; 83.17; 82.7
1440 минут;  20230824;  000000;  83.09; 83.63; 82.16

т.е. нет единого времени открытия в квике.

Заглянул на сайт ММВБ, а у них вообще значится "Аукцион открытия" 08:50.

Про свою реализацию, сделал через замыкание. запихнув все интервалы готовые. и что б потом можно добавить свои.
На вход подаем дату и время желаемого начала теста, на выходе массив необходимых индексов все банально.
На самом деле единое время есть Это 90000.
Для свечей - это время закрытия свечи.
Все свечи считаются от 00000.
Чтобы определить время открытия свечи начала,
надо найти время начала последней свечи в которую попадает 90000
-------------------
т е получите именно то что написали:
1 минута; 20230824; 085900; 83.09; 83.1; 83.09  - 90000-100
5 минут; 20230824; 085500; 83.09; 83.1; 83.09     - 90000-500

для 120 минут свеча в которую попадает 90000 начинается в 80000 и кончается в 100000.
120 минут; 20230824; 080000; 83.09; 83.17; 82.7  

Для тайма день свеча одна и 90000 всегда внутри . 00000
1440 минут; 20230824; 000000; 83.09; 83.63; 82.16
 
Завязывайте вы с этим кретинизмом, господа, и считайте свечи сами - это в миллион раз проще, быстрее, надёжнее, чем ковыряться "в этом во всём". Я это сделал почти сразу после первого же знакомства с Квиком, и ни разу об этом не пожалел.
 
Цитата
Владимир написал:
Завязывайте вы с этим кретинизмом, господа, и считайте свечи сами - это в миллион раз проще, быстрее, надёжнее, чем ковыряться "в этом во всём". Я это сделал почти сразу после первого же знакомства с Квиком, и ни разу об этом не пожалел.
Вопрос был про исторические данные, на которых ваша методика уже не работает, т.к. никаких LAST нет год назад. Отдельный вопрос целесообразности этого, но он не имеет отношения к техническому решению.
 
nikolz, Так вот я и пишу
Цитата
VPM написал:
Несколько удивил подход разработчиков?
Богата Земля талантами! :smile:

Не знаю как Вы догадались до этого
Цитата
nikolz написал:
На самом деле единое время есть Это 90000.Для свечей - это время закрытия свечи.
 
Будь я адвокатом бросил бы торговать, и занялся бы прибыльным делом :what:  
 
Nikolay, Работает. Я написал небольшую утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи - это и есть LAST, а "настоящие" свечи скрипт считает уже сам, раз в секунду опрашивая LAST из ТТТ, а в режиме работы по историческим данным получая его из очередной строки файла исторических данных. Там нет, конечно, BID/OFFER, но я их тупо приравниваю LAST. Вся остальная обработка одинакова для всех режимов.
 
Цитата
Владимир написал:
Nikolay, Работает. Я написал небольшую утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи - это и есть LAST, а "настоящие" свечи скрипт считает уже сам, раз в секунду опрашивая LAST из ТТТ, а в режиме работы по историческим данным получая его из очередной строки файла исторических данных. Там нет, конечно, BID/OFFER, но я их тупо приравниваю LAST. Вся остальная обработка одинакова для всех режимов.
Да, пока Вы это делали на том временном отрезке и только. А если это новый инструмент или данные 2008 года, то у Вас уже нет данных.
 
Nikolay, Тут дело даже не 2008 годе, я в своих стратегиях так далеко не заглядываю.

Для фьючерсов я практикую три режима  в одном скрипте:
1) бэктест на несколько дней назад;
2) эксперт - т.е. в торговое время, идут торги ,но без выставления приказов в торговую систему. и фиксирую сигнал ,  делаю расчет показателей сделки.
3) и боевой режим.

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

Перед торгами запустил  бэктест, все устраивает, авто торговлю, нет посмотрим поведение рынка.
Это просто мой подход, мне так комфортно.

Владимир, Почему для меня важен бэктест.

В своих алгоритмах я использую цены максимальную на интервале и минимальную на интервале.
Я это называю так, последний покупатель и последний продавец, это чтоб не забыть смысл.
На мой взгляд они наиболее информативны чем просто средние. Отражают уровни поддержки и сопротивление, тенденцию.
Т.е. можно реализовать пробойные стратегии, лучше характеризуют трендовое движение.

То что предлагаете Вы, хорошо на скальперских стратегиях. Там отставание средней не так критично как на Н1 или Д1,
Да и накапливать данные, когда они уже есть?

Я использую Н1 и выше для определения текущей тенденции, целевых уровней. куда буду торговать (мат. ожидание на свою сторону).
На меньших, уточняю т. входа, стоплос на сделку, т.е. то что может отменить сделку или потвердеть.

Войти можно и случайным образом. вопрос а где закрыть сделку, "чтобы не так было больно за прожитые годы" :smile:  
 
Nikolay, На каком "том временном отрезке и только"? НА ЛЮБОМ отрезке ЛЮБОГО инструмента ЛЮБОГО тикового (или даже не обязательно тикового) массива. Другое дело, что у меня давно уже для тестирования используется только один массив, примерно на 6 миллионов секунд, и только потому, что там есть буквально всё: и длительное топтание на месте, и "нормальные" взлёты и падения, и спокойный долгий рост, и резкое обрушение курса почти вдвое, так что мне просто НЕЧЕГО тестировать на любых других исторических данных - в этом массиве есть буквально всё, что душе угодно. Хотя до сих пор валяется 3 гига разных исторических данных, 120 миллионов строк (чуть больше) по... ща скажу... по 309 инструментам Мосбиржи и 1454 инструментам СПб. Я тогда ещё пытался определять "характер тикера" и прочую лабуду, но быстро понял, что всё это чушь собачья, и скрипт мой прекрасно справится с любым "характером". Сейчас это всё уже мусор, "преданья старины глубокой" (2020 год, когда я только начинал), остался только один тестовый массив одного из этих инструментов, который я гонял и в режиме, как будто это акции, и как будто это фьючерсы (даже не помню, что там в оригинале было - кажется, фьючерсы). Но даже эти прогоны по историческим данным нужны были только для черновой отладки скрипта.
 
VPM, Я никогда не занимался скальперскими стратегиями. И мне насрать на "отставание средней" и вообще на среднюю. А мат. ожидание и есть свечи в понимании моего алгоритма, а "вопрос где закрыть сделку" для меня перестал существовать одним из самых первых: там, где НУЖНО закрыть.
 
nikolz, Поясните откуда это
Цитата
nikolz написал:
Все свечи считаются от 00000.
 
Владимир, Я понял, с Вами все можно детально обсудить.
 
Цитата
Владимир написал:
Я написал небольшую утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи - это и есть LAST
Ну просто приятно поговорить.
Цитата
Владимир написал:
И мне насрать на "отставание средней" и вообще на среднюю.
"утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи"
Это что несредняя или у Вас другой подход?
 
Цитата
Владимир написал:
Другое дело, что у меня давно уже для тестирования используется только один массив, примерно на 6 миллионов секунд
1минута = 60 секунд или 1440 минут в на графике Д1, считаю  6 000 000 секунд / 60 / 1440 ~= 69 дней Существования фьючерса.

т.е. ваш уникальный скрипт тестируется на этом промежутке. и Вы утверждаете что это оптимальный подход?
Я Вас правильно понимаю?
 
VPM, Нельзя ничего со мной детально обсудить.
 
Владимир, Ок
 
Так и пожалуйста не пишите чушь  про собственную эксклюзивность!
 
VPM, чушь  про собственную эксклюзивность я тоже никогда не писал.
 
Цитата
Владимир написал:
На каком "том временном отрезке и только"? НА ЛЮБОМ отрезке ЛЮБОГО инструмента ЛЮБОГО тикового (или даже не обязательно тикового) массива. Другое дело, что у меня давно уже для тестирования используется только один массив, примерно на 6 миллионов секунд, и только потому, что там есть буквально всё: и длительное топтание на месте, и "нормальные" взлёты и падения, и спокойный долгий рост, и резкое обрушение курса почти вдвое, так что мне просто НЕЧЕГО тестировать на любых других исторических данных - в этом массиве есть буквально всё, что душе угодно. Хотя до сих пор валяется 3 гига разных исторических данных, 120 миллионов строк (чуть больше) по... ща скажу... по 309 инструментам Мосбиржи и 1454 инструментам СПб. Я тогда ещё пытался определять "характер тикера" и прочую лабуду, но быстро понял, что всё это чушь собачья, и скрипт мой прекрасно справится с любым "характером". Сейчас это всё уже мусор, "преданья старины глубокой" (2020 год, когда я только начинал), остался только один тестовый массив одного из этих инструментов, который я гонял и в режиме, как будто это акции, и как будто это фьючерсы (даже не помню, что там в оригинале было - кажется, фьючерсы). Но даже эти прогоны по историческим данным нужны были только для черновой отладки скрипта.
А что по Вашему вот это?
 
 
VPM,Это описание моих попыток исследования поведения рынка на исторических данных. Правдивое до последней запятой.
 
Цитата
VPM написал:
1минута = 60 секунд или 1440 минут в на графике Д1, считаю  6 000 000 секунд / 60 / 1440 ~= 69 дней Существования фьючерса.т.е. ваш уникальный скрипт тестируется на этом промежутке. и Вы утверждаете что это оптимальный подход?Я Вас правильно понимаю?
 
Или вот
Цитата
VPM написал:
"утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи"Это что несредняя или у Вас другой подход?
 
VPM, И чего? Там двухмесячный тиковый массив (по-моему, Борька его нашёл), 44 мега с датами сделок или 28 мегов голых секундных свечей. Торги не идут все 24 часа, и выходные имеются. Мой скрипт тыщу раз тестировался на этом массиве в разных режимах, пробегает он его секунд за 20. Если кто-то знает более оптимальный подход, то это не я.
 
Владимир, Мы с Вами уже достаточно времени общались на страницах этого форума,
у меня сложилось мнение, и о Ваших  способностях и о Вашей  деятельности.  
 
VPM, Да плевать мне на Ваше мнение. Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии. Что Вы можете знать обо мне? Да ничего!
 
А Вы с Борькой не слышали что рынок меняется?
Вы рассуждаете так как рассуждают для подбора тестовых массивов нейросетей.

Ну смотрите сами ваш массив учитывает событие 02.22г. Ваш подход оценил это,
дальше нестабильность рынок скачет при каждом шорохе без всяких тенденций. оценил это.
Наступило затишье, и что ему делать основываясь на  прошлом опыте. Вывод не торговать.
Это описание ситуации происходящей на наших глазах. Я там торговал.

Я лишь рассуждаю о том чтоб, оптимизировать поведение скрипта под поведение рынка в своей торговле,
оставляю режим эксперт, для переоценки изменений в  поведения рынком.





 
 
Цитата
Владимир написал:
Да плевать мне на Ваше мнение. Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии. Что Вы можете знать обо мне? Да ничего!
Я Вас совсем не обидеть хотел или  изучить, а лишь говорю о том чем мы с Вами здесь занимаемся и обсуждаем на этом форуме.  
Ни чего личного. Если я чем то обидел Вас то извините.
Я лишь высказываюсь сию минутном занятии.

"биржевыми погремушками" - это огромный бизнес, как да сами убедитесь я думаю Ваш подход изменится.

 
 
Цитата
VPM написал:
Да плевать мне на Ваше мнение.
Да не обращайте внимание. Я не последняя инстанция, Это просто частное мнение.
 
Цитата
Владимир написал:
Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии.
Еще век назад люди торговали, рисовали графики на миллиметровке карандашами, и писали алгоритмы.
Я подчеркиваю, при этом создавая личное благополучие и делясь своими знаниями.
 
VPM, Мы с Борькой не только "слышали что рынок меняется", но и отслеживаем эти изменения КАЖДУЮ СЕКУНДУ, И мне совершенно плевать "как рассуждают для подбора тестовых массивов нейросетей" - эти придурки НИКОГДА ничего не добьются. Ну, кроме слива депозита.

Моему скрипту ПЛЕВАТЬ на "событие 02.22г" (я тоже не знаю, что это там за "событие") - он просто умеет торговать и когда "рынок скачет при каждом шорохе", и когда "наступило затишье" - повторяю: он оценивает состояние рынка КАЖДУЮ СЕКУНДУ. И не только всего рынка, а каждого тикера на каждом таймфрейме.

Меня обидеть невозможно. И я не вижу ни единой причины, по которой "мой подход изменится". Последний крупный тест я провожу (1 сентября закончится месячный прогон для 63 тикеров) не для изучения поведения алгоритма, а лишь для оценки, с какой частью этой группы тикеров следует иметь дело, а какие нужно отправить на помойку.
 
Цитата
Владимир написал:
Там двухмесячный тиковый массив (по-моему, Борька его нашёл), 44 мега с датами сделок или 28 мегов голых секундных свечей. Торги не идут все 24 часа, и выходные имеются. Мой скрипт тыщу раз тестировался на этом массиве в разных режимах, пробегает он его секунд за 20. Если кто-то знает более оптимальный подход, то это не я.
Ну смотри те сами, пишите "тиковый массив".
Давайте посмотрим что такое тик
Вариант 1) ликвидный рынок есть лучшей аск 1 контракт  есть лучшей бид  1 контракт с рынка продали 1 контракт.
Как это повлияло на рынок? Ответ ни как (шум)!
Вариант 2) неликвидный рынок та же ситуация. Может изменить баланс так как спреды огромные или никак.

Вы это пытаетесь оценить Вопрос успешно?
 
Цитата
Владимир написал:
Моему скрипту ПЛЕВАТЬ
Ну на том и порешим.
Писать массив на 6 000 000 тиков  по сотне бумаг не вижу смысла.
Данные есть и так только их нужно получить корректно.
Свой подход я тоже описал достаточно подробно буду дальше реализовывать.
Ну а депозит рассудит!
 
VPM, Естественно, я сам пишу "тиковый массив". Что в Инете лежит, то и беру. Есть свечные массивы, их тоже можно использовать, но тиковые мне удобнее. А тик - это СДЕЛКА. И плевать тыщу раз, ликвидный рынок или нет. Как это повлияло на рынок? LAST изменился (скорее всего), и больше никак. На спреды мне тоже плевать. А массив  там не на 6 000 000 тиков, а на 6 000 000 секундных свечей. Тиков там было, насколько я помню, немногим больше 2 000 000.
 
Владимир, Вот мой подход
Цитата
VPM написал:
В своих алгоритмах я использую цены максимальную на интервале и минимальную на интервале.Я это называю так, последний покупатель и последний продавец, это чтоб не забыть смысл. На мой взгляд они наиболее информативны чем просто средние. Отражают уровни поддержки и сопротивление, тенденцию.Т.е. можно реализовать пробойные стратегии, лучше характеризуют трендовое движение.
Без разниц
Цитата
Владимир написал:
6 000 000 тиков, а на 6 000 000 секундных свечей

Цитата
Владимир написал:
6 000 000 тиков, а на 6 000 000 секундных свечей
В моем подходе все это шум. Все что ниже даже 5 минут тоже шум.
Так как оценку веду от старшего таймфрейма.

Ну к примеру, на H2,
Свечи сформированы  у них есть High и Low, текущая цена  становится ниже Low на H2 .
 
lact < Low  это только условия для поиска ситуации на открытие Short позиции на 5 минутах.
на 5 минутах свои условия на подтверждении.

Все Ваши секундные свечи уже сидят внутри 5 минутной свечи и для нее это шум.

Я несколько утрирую но смысл сохраняется!  
 
VPM, Я НЕ использую цены максимальную и минимальную на интервале. Мне плевать на уровни поддержки и сопротивления, равно как и на пробойные стратегии. В моём подходе 6 000 000 секундных свечей есть 6 000 000 значений LAST, которые в боевом режиме скрипт получает ежесекундном опросом ТТТ. И данные по тикеру за два месяца работы биржи это никакой не "шум", а полная информация о поведении рынка. Это не "оценки", это исходные данные. На High и Low мне тоже плевать.
 
Владимир,
Что же тогда, мы тут с Вами  обсуждаем?

Я Вам "про Ивана, вы мне про болвана".

Торгуйте как хотите я тут причем?
 
VPM, А кто сказал, что мы здесь что-то обсуждаем? Я рассказал, как, по моему мнению, нужно работать со свечами и историческими данными. Мне тут обсуждать нечего, мой алгоритм давно отлажен.
 
Цитата
Владимир написал:
Я рассказал, как, по моему мнению, нужно работать со свечами и историческими данными.
За это спасибо, но это мне не подходит, я прочитал и дал  даже ответ по какой причине не подходит.
Цитата
Владимир написал:
Я НЕ использую цены максимальную и минимальную на интервале.
Ну тогда свечи
Цитата
Владимир написал:
В моём подходе 6 000 000 секундных свечей
Называйте вещи своими именами - это среднее значение цены за секунду, причем здесь свеча или бар у которые на это том же интервал имеют пять значений.
 
Вопрос остался открытым
Цитата
Nikolay написал:
Да и спрятать можно все, написав свой итератор. Тогда вызов станет универсальным, простым в конечной точке вызова.
Мало найти общую т. для входа нужен универсальный  итератор.  
 
Цитата
VPM написал:
Мало найти общую т. для входа нужен универсальный  итератор.  
Я ничего не говорю про точки входа, алгоритмы и т.д. Я говорил про написание своего итератора (https://www.lua.org/pil/7.1.html) , позволяющего писать что-то типа такого:

while ds_list:Next() do

При этом у каждого ds в списке можно написать свой колбек на приход нового индекса. Тогда код становится еще более простой, в функциональном стиле.
 
Цитата
Nikolay написал:
Я ничего не говорю про точки входа, алгоритмы и т.д.
Да но чтоб начать синхронный перебор данных нужна точка отсчета общая на всех таймфреймах
 
VPM,  Называю вещи своими именами:
1. Свеча в файле входных данных -это среднее значение цены всех сделок, произошедших за эту секунду. Чаще всего такая сделка одна, и потому свеча есть значение цены этой сделки. Если же сделок в данную секунду вообще не было (самый распространённый случай), свеча есть значение предыдущей свечи. В режиме работы по историческим данных свеча=LAST=BID=OFFER.
2. Свечи, которые считает скрипт есть среднее арифметическое ежёсекундных замеров LAST за период свечи.
3. Во всех случаях свечи имеют ОДНО значение, а не пять.
4. Общая точка отсчета на всех таймфреймах вовсе не обязательна.
 
Цитата
Владимир написал:
Общая точка отсчета на всех таймфреймах вовсе не обязательна.
Не понял почему?
 
VPM, Лучше спросить: А ЗАЧЕМ она нужна?
 
Цитата
Владимир написал:
Лучше спросить: А ЗАЧЕМ она нужна?
Ну речь идет о тестировании на прошлых свечах, вот я показываю
Цитата
VPM написал:
Ну к примеру, на H2,Свечи сформированы  у них есть High и Low, текущая цена  становится ниже Low на H2 .   lact < Low  это только условия для поиска ситуации на открытие Short позиции на 5 минутах.на 5 минутах свои условия на подтверждении.
Время 1000 24.08.2023г. начало теста, мне нужно найти индекс для свечей
   на 1 Часовом графике и
   на  1 минутном (для простоты рассуждения)
чтоб можно было получить все остальные значения со свечи.
и дальше их синхронно смещать, получая для каждого графика свой индекс.
Сравнить индексы можно только установив время.
 
Цитата
Nikolay написал:
При этом у каждого ds в списке можно написать свой колбек на приход нового индекса. Тогда код становится еще более простой, в функциональном стиле.
Посмотрел Вашу идею более внимательно. Не понял вот здесь "написать свой колбек на приход нового индекса" Вы говорите про исторические данные?
 
Цитата
VPM написал:
Посмотрел Вашу идею более внимательно. Не понял вот здесь "написать свой колбек на приход нового индекса" Вы говорите про исторические данные?
Да. Перебираем бары и когда надо перейти на новый индекс, вызывается функция.
Также это будет работать и для текущих данных. Так что код становится однотипным.
Страницы: Пред. 1 ... 10 11 12 13 14 ... 26 След.
Читают тему
Наверх