Блог им. Albus

Робот "Орлёнок" с тестером стратегии

    • 07 июня 2018, 12:14
    • |
    • Albus
  • Еще
Господа, выкладываю на всеобщее обозрение аналитического робота. Он не торгует, только анализирует. В нём реализована несложная стратегия по скользящим средним. Дополнительный индикатор — Боллинджер. Изюминка робота: встроенный тестер стратегии. Он подбирает самый прибыльный период скользящий средней: перебирает мувинги с разными периодами и выдаёт тот, при котором получена наибольшая прибыль. Этот проект мне очень интересен. Согласно вашим пожеланиям я готов разивать этого робота и данный путь исследования.
---
Сразу огорчу новичков: если робот вам посчитал, что при скользящей средней с периодом 55 вы заработали 10 000 рублей на РТС, это вовсе не означает, что вы действительно хоть что-нибудь заработаете, начав торговать на реале. Прошлый успех не гарантирует успех в будущем. Наилучший подобранный мувинг может дать сбой уже завтра, и вы начнёте терять деньги. Поэтому любителей Граалей сразу хочу охладить. Робот будет полезен разработчикам стратегий, алго-трейдерам и трейдерам, которые трезво смотрят на рынок. Мой личный опыт торговли по мувингам, «посоветованным» этим роботом является неудачным. Торговал ликвидными фьючерсами на 5-минутках на отдельном экспериментальном счёте (реальный счёт, разумеется). Каждый день запускал тестер, чтобы он показал новый самый прибыльный мувинг по результатам анализа имеющихся в КВИКе свечек. В другом роботе, который торгует по этой стратегии, обновлял периоды мувингов согласно результатам тестера. (Торгового робота я здесь не выкладываю, публикую только тестер стратегии) Итог: убыток 10% за месяц (было 35 тысяч, осталось 32 тысячи). Именно поэтому стратегия называется " Орлёнок", а не «Орёл». Робот только учится летать :).
Так что ещё раз подчеркну: денег здесь нет. Приглашаю трейдеров прокомментировать эту стратегию и дать советы по выводу её в прибыльную зону. Код открытый. Весь код я пометил описаниями, чтобы было понятно. (Я программист-самоучка, опытный кодер многое написал бы лучше). Буду рад, если программисты поковыряются в этом скрипте и дадут советы по его оптимизации. 
По состоянию на сейчас я эту стратегию отбрасываю как неэффективную. Но ваши добрые советы будут приветствоваться! Я готов совершенствовать этого робота по мере появления интересных идей. 
---
Торговать будем фьючерсами и акциями. Под спотовые валюты робот не оптимизирован. 
---
Описание стратегии. Объяснять буду пошагово, постепенно накладывая на график новые индикаторы. Индикаторы, которые я сейчас наложу на график, нужны для наглядности. Робот все свечки берёт с сервера брокера и индикаторы считает сам, то есть ему безразлично, открыты у вас графики с индикаторами или нет.
На графиках, приведённых ниже, тайм-фрейм 5-минутный (тестер умеет работать с разными тайм-фреймами).
Индикатор №1. Скользящая средняя с длинным периодом. Это и есть мувинг, который анализируется тестером. Он перебирает разные  периоды от 7 до 100 и находит тот, который даст наибольшую прибыль. Допустим, тестер посчитал, что лучший мувинг имеет период 59. 
Робот "Орлёнок" с тестером стратегии
Параметры мувинга: метод Simple, поле цены Typical
Робот "Орлёнок" с тестером стратегии
Чтобы построить мувинг в виде разноцветной гистограммы как у меня, надо сделать так: 
Робот "Орлёнок" с тестером стратегии
Если мувинг растёт, он будет зелёным, если падает, красным. При зелёном мувинге мы считаем тренд растущим. При красном мувинге тренд нисходящий. 
Если цена выше мувинга (то есть выше гистограммы), значит она находится в сильной позиции. Если цена ниже мувинга, значит цена в слабой позиции
Для входа в лонг тренд должен быть растущим (зелёная гистограмма) и цена должна быть выше мувинга (сильная позиция). Для входа в шорт тренд должен быть падающим (красная гистограмма) и цена должна быть ниже мувинга (слабая позиция). Это не единственные критерии открытия позиции. Они важные, но их не достаточно. Одновременно с этими признаками должны быть и другие, о которых я расскажу далее. 
Индикатор №2. Скользящая средняя с коротким периодом (синяя). Этот период будет 5. Внутри тестера он всегда одинаковый. Предыдущий мувинг робот подбирает и даёт ответ, какой лучше: с периодом 59 или с периодом 30. Что касается короткого мувинга, то он в нашей стратегии не меняется. Период 5 для него является неизменным. 
Робот "Орлёнок" с тестером стратегии
Этот мувинг является дополнительным критерием входа в рынок. Мы будем покупать только если короткий тренд идёт вверх. И будем продавать только если короткий мувинг идёт вниз. Это третий критерий открытия позиции в дополнение к первым двум. Далее будут новые критерии. Все они должны сойтись одновременно. Если не будет хотя бы одного критерия, позиция не открывается. 
Индикатор № 3. Боллинджер с узкими полосами. Его период такой же как у нашего длинного мувинга: 59. Ширина полос равна 1 стандартному отклонению. Центральная линия Боллинджера — это обычная скользящая средняя. Поэтому она ровненько легла на нашу гистограмму и совпала с ней. 
Робот "Орлёнок" с тестером стратегии
Предназначений у Боллинджера три. Первое. Мы будем открывать лонг, только если цена находится внутри полос Боллинджера: там, где нарисованы прямоугольники:
Робот "Орлёнок" с тестером стратегии
Если цена выше полос Боллинджера, мы говорим: «покупать поздно, цена уже улетела вверх. Подождём следующего раза.» Это позволяет нам находить тренды в самом зародыше и избегать перегретого рынка, на котором значительная часть роста уже произошла. 
Для шортов аналогично: открывать шорты можно только внутри полос Боллинджера. Если цена ниже нижней линии Боллинджера, мы новых шортов не открываем, потому что уже поздно. 
Второе предназначение Боллинджера. По нему выставляются стоп-лоссы. Если вы в лонгах, то скользящий стоп следует за нижней линией Боллинджера. Позиция закрывается, если цена доходит до него.
Вот примеры, где надо закрывать лонги по стопу:
Робот "Орлёнок" с тестером стратегии
То же самое (только наоборот) для шортов. Если цена выросла до верхней линии Боллинджера, значит надо откупать шорт.
Робот "Орлёнок" с тестером стратегии
Третье предназначение Боллинджера. Совместно с коротким 5-периодным мувингом получаем ещё один критерий выхода из рынка. Вы в лонгах. Цена пошла в вашу сторону. Поднялась выше Боллинджера, но потом рост прекратился. Цена пошла вспять, короткий мувинг повернулся вниз. Значит надо выходить.
Пример:
Робот "Орлёнок" с тестером стратегии
Для шортов аналогично, только наоборот: вы в шортах. Цена упала, как вы и планировали. Но потом начала расти и короткий мувинг пошёл вверх. Значит откупаем шорт.
Пример:
Робот "Орлёнок" с тестером стратегии
Также узкий Боллинджер является важным фильтром для открытия новых позиций. Лонг НЕ ОТКРЫВАЕТСЯ, если цена недавно (5 прошедших свечек) была выше узкого Боллинджера. Вот пример, когда не следует октрывать лонг по этой причине:
Робот "Орлёнок" с тестером стратегии
Смысл этого ограничения следующий: рынок недавно был в зоне, когда цены считаются перегретыми. Сейчас цена скорее всего откатывает вниз. Значит, надо взять паузу.
То же самое для шортов:
Шорт НЕ ОТКРЫВАЕТСЯ, если цена за последние 5 свечек опускалась ниже нижнего Боллинджера.
Пример:
Робот "Орлёнок" с тестером стратегии
И последний индикатор №4. Ещё один Боллинджер. Период у него такой же как у длинного мувинга. То есть центральная линия этого Боллинджера ляжет по уже знакомой нам линии. А вот ширина полос будет больше: 3 сигмы (т.е. 3 стандартных отклонения).
Сделаем его весёлым оранжевым цветом, потому что назначение у этого Боллинджера приятное: это тейк-профит. Самый счастливый момент торговли по этой стратегии. На верхней оранжевой линии продаём лонги, на нижней оранжевой линии откупаем шорты. 
Робот "Орлёнок" с тестером стратегии
На этом изложение стратегии заканчивается. Напомню вкратце все критерии входа и выхода:
Открытие лонга происходит, если одновременно складываются следующие факторы:
1. Цена выше длинного мувинга (на графике этот мувинг — гистограмма).
2. Длинный мувинг растёт (гистограмма зелёная)
3. Короткий мувинг растёт
4. Цена внутри узкого Боллинджера.
5. Цена за последние 5 свечек не находилась выше узкого Боллинджера.
Закрытие лонга:
1. Цена дошла до скользящего стоп-лосса (нижняя линия узкого Боллинджера)
2. Цена поднялась выше узкого Боллинджера, но потом начала падать и короткий мувинг развернулся вниз.
3. Цена дошла до тейк-профита, то есть до широкого оранжевого Боллинджера
4. Если мы торгуем на младших таймфреймах, например на 5-минутке, то надо закрываться в конце дня. Робот-тестер это умеет. Младшие тайм-фреймы — это те, которые меньше часовика. 

Открытие шорта происходит при одновременном наличии следующих факторов:
1. Цена ниже длинного мувинга.
2. Длинный мувинг падает (гистограмма красная).
3. Короткий мувинг падает.
4. Цена внутри узкого Боллинджера
5. За последние 5 свечек цена не была ниже узкого Боллинджера
Закрытие шорта:
1. Цена дошла до скользящего стоп-лосса (верхняя линия узкого Боллинджера)
2. Цена упала ниже узкого Боллинджера, но потом начала расти и короткий мувинг повернул вверх.
3. Цена дошла до тейк-профита, то есть до нижнего оранжевого Боллинджера.
4. Настал конец дня, если торгуем на младшем тайм-фрейме.
---
Переходим к роботу.
Скачать его можно здесь: https://yadi.sk/d/kfa8opCq3WmRTR
Он состоит из 2 файлов:
Робот "Орлёнок" с тестером стратегии
В КВИКе нужно запускать orlenok tester.lua Делается это так: Сервис=>Lua-скрипты=>Добавить=>Запустить.
Робот "Орлёнок" с тестером стратегии
Соседний файл Bollinger.lua сам подключится в работу. С его помощью рассчитываются линии индикаторов. С ним не нужно ничего делать, лишь бы он лежал рядом с основным файлом. 
---
Задача робота — подобрать период длинного мувинга. Для этого он прочёсывает свечки слева направо. Начинает с мувинга с периодом 10 и заканчивает мувингом с периодом 100. С чего начинать и чем заканчивать вы можете выбирать сами. Это делается здесь в файле orlenok tester.lua:
Робот "Орлёнок" с тестером стратегии
Код сопровождается моими многочисленными комментариями, чтобы было удобнее разобраться что там происходит. 
Результаты выводятся в таблицу сообщений. Её можно открыть в КВИКе таким способом:
Создать окно=>Все типы окон=>раздел Прочее — Таблица сообщений:
Робот "Орлёнок" с тестером стратегии
Вот какие значения выводятся роботом в эту таблицу:
Робот "Орлёнок" с тестером стратегии
Расшифрую что это значит. Ну, к примеру, первая строчка (№261):
Инструмент EuM8 (фьюч евро-рубль). При длинном мувинге с периодом 40 было заключено 44 сделки. Результат в рублях 982.21. Соотношение числа лосёвых сделок к прибыльным равно 0.52 (лосёвых примерно половина по сравнению с прибыльными). Это хороший результат. Поэтому написано GOOD! Убыток лосёвых сделок относится к прибыли удачных сделок как 0.6. Это хороший результат, поэтому справа ещё одно слово GOOD! Чтобы робот одобрил этот мувинг, надо чтобы было два раза GOOD! Иначе он его забракует, даже если там будет показана максимальная прибыль. 
Фильтр какое соотношение хорошее, а какое плохое задаётся здесь: 
Робот "Орлёнок" с тестером стратегии
Продолжаем читать что нам пишет робот.
Строка № 264. Найден период мувинга, давший наибольшую прибыль 1472.52 рубля. Этот период 43. Следующая строчка (фиолетовая) расшифровывает это более детально: количество лонгов 19, количество шортов 28, убыточных сделок 21 штука. (Но убытки не помешали получить максимальную прибыль) 
После этой строчки поиск продолжается. Возможно, будут найдены новые мувинги с прибылью выше, чем эта.
Перебор мувингов по евро-рублю подходит к концу. Строка №283 говорит, что мувинг с периодом 43 дал рекордную прибыль 1472.52 рубля. Не считайте это победой. Реальная торговля с этим параметром будет неудачной (личный опыт).
Робот "Орлёнок" с тестером стратегии
После этого он выдаёт список сделок, заключённых при торговле с наилучшим мувингом.
Робот "Орлёнок" с тестером стратегии
Тут всё просто и легко догадаться где открытие позиции, где закрытие. Указаны дата и время. Дата в формате ГГГГ-ММ-ДД. Если тайм-фрейм дневки-недельки-месяцы, то время будет равно 0. Расшифровка подписи надеюсь интуитивно понятна (дата, время, цена, результат по текущей сделке за 1 единицу актива в валюте актива, результат накопленный в рублях с учётом комиссии). В конце там где true/false показано, какой критерий сработал: у него значок true. В данном случае позиция закрылась по критерию end (конец дня). Другие критерии: sl  — стоп лосс по узкому боллинджеру, tp  — тейк профит по широкому боллинджеру, reverse  — разворот короткого мувинга после подъёма выше узкого боллинджера. 

Эти же сделки будут нанесены на график. Чтобы робот мог рисовать метки на графике, на него нужно нанести идентификатор. Идентификатором служит тикер инструмента. 
Робот "Орлёнок" с тестером стратегии
Сделки отмечены звёздочками. Покупки зелёные, продажи красные. 
Робот "Орлёнок" с тестером стратегии
Внутри кода можно менять цвет метки и её символ:
Робот "Орлёнок" с тестером стратегии
Коды цветов можно взять здесь
Если навести курсор на звёздочку, будет показана подпись сделки:
Робот "Орлёнок" с тестером стратегии
Не забудьте на графике руками поставить тот период индикаторов (длинный мувинг и оба Боллинджера), которые посоветовал робот. Это позволит вам осознанно смотреть на нарисованные точки с пониманием того, почему была заключена сделка. Напомню, что в Боллинджере центральная линия — это и есть наш длинный мувинг. 
Важно! Значки входа-выхода рисуются слева от свечи, на которой произошло это событие. То есть метки рисуются рядом со свечкой, а не ровно на ней. 
Если робот не нашёл ни одного хорошего мувинга, он выдаст грустное сообщение: SBER vse muvingi ploxie. При этом может попадаться много прибыльных мувингов, но возле них всё равно стоят значки BAD! BAD! Или GOOD! BAD! А должно быть GOOD! GOOD! 
Робот "Орлёнок" с тестером стратегии
В конце работы скрипта будут выведены все подобранные мувинги. Если хорошего мувинга не нашлось, будет написано как здесь: GZM8=NO.
У меня таблица сообщений разноцветная, потому что я настроил в ней подсветку вот так:
Робот "Орлёнок" с тестером стратегии
Попутно эти параметры запишутся в файлик orlenok_result.txt, лежащий в той же папке.
---
Файл робота orlenok tester.lua открывается блокнотом. Я пользуюсь Notepad++. В самом начале кода указаны параметры, которые могут меняться пользователем на своё усмотрение, например тикер лист — перечень анализируемых бумаг:
ticker_list={«BRN8»,«EDM8»,«EuM8»,«GDM8»,«GZM8»,«MXM8»,«RIM8»,«SiM8»,«SRM8»,«SBER»}
Писать нужно с таким синтаксисом как у меня: в фигурных скобках, через запятую, каждый тикер в кавычках.
Также там можно делать другие гибкие настройки. Если надо добавить какую-то опцию, и совет будет разумным, пишите, я добавлю.
В файле настроек можно менять: 
1) Дату, с которой начинать сделки. Она работает только для фьючерсов. Позволяет игнорировать кривые графики, которые были во времена неликвидности фьючерса. По акциям этот параметр не используется. Если вы торгуете только акциями, не трогайте эту строчку вообще. 
2) Тайм-фрейм, например  INTERVAL_H1. Полный список тайм-фреймов можно взять в мануале КВИКа по языку Луа. Это файлик QLUA.chm в папке с КВИКом.
3) Соотношение плохих сделок к хорошим в штуках, соотношение лосей к профитам в рублях. Это параметры, которые робот оценивает как GOOD! или BAD! Если убыточных сделок много, робот забракует мувинг, даже если он принесёт прибыль.
4) Минимально допустимое количество сделок. По умолчанию должно быть минимум 10 сделок. Если сгенерировалось меньше 10 сделок, значит выборка признаётся нерепрезентативной и игнорируется.
5) Также настраивается ширина узкого и широкого Боллинджера в сигмах (сигма-это стандартное отклонение).
6) Период короткого мувинга.
7) С какого значения по какое делать перебор длинного мувинга. По умолчанию он подбирается от 7 периода до 100-го. Ищется лучший из них. 
8) Задаётся комиссия вашего брокера на споте и срочке.
---

Пути к улучшению стратегии, которые приходят мне в голову:
1. Самый очевидный недостаток тестера: в КВИКе мало истории. Поэтому результаты получаются не репрезентативными. Надо тянуть графики с Финама, но я пока не научился это делать. 
2. Торговать на более крупном тайм-фрейме. Мои тесты проходили на 5-минутках. Это скальперский тайм-фрейм. Может быть, на часовике меня ждала бы удача. Чем выше тайм-фрейм, тем лучше работает теханализ. 
3. Раньше это было в коде, но сейчас я убрал: фильтр шума. Если мувинг часто меняет направление, значит на рынке «пила». Тренда нет. Торговать нельзя. На графике это видно как частая смена цвета с красного на зелёный, с зелёного на красный и так много раз. Если мувинг поменял направление больше 5 раз за последние (к примеру) 60 периодов, значит новых позиций открывать нельзя. Вернуть этот критерий в код или не возвращать, для меня не очевидно. 
Робот "Орлёнок" с тестером стратегии
Надеюсь, этот пост будет вам полезен.
---
Мой поход в крымские горы. Встреча с зайцем!
★42
30 комментариев
Предлагаю дать Альбусу вечную защиту от бана! :) Святой человек :)
avatar
vladimirc1983, 
Давно уже.
avatar
До́жили. Уже аналитик — и тот робот)))
avatar
 А по теме, простые мувинги это, к сожалению, утопичная вещь. Я используют и уже реально очень давно, смусовые (smoothed) мувинги 21, 89, 144, 233. Если кто-то ща скажет, что это не рабоатет. Да, это не работает, если очень тупо к этому относиться. А если не тупо, а проанализировать работу — то работает всё отлично. 

p.s. Причём интервал не важен. С этими параметрами мувинги работают НА ЛЮБОМ ТАЙМЕ. У меня обычно Н1 и Д1, но и на М1 изредка поглядываю.
avatar
vladimirc1983, Работаю с smoothed MA очень давно и хорошо получается. На ЛЧИ 200% сделал. У меня период М15, М30, Д1
avatar
gagarin, а периодами самих мувингов, ради интереса, не поделишься?
avatar
vladimirc1983, периоды меняю раз в 110-15 дней. от 4 до 30
avatar
Автор вы молодец, проделали большую работу. Но к сожадению в «холостую». Оптимизация мувингов — путь в никуда, сам тестировал. На «подгонке» все ок, на реальной торговле нет. Это происходит потому, что при переборе вариантов из прошлого, робот, может подогнать мувинг под одну — две сделки с высокой нормой прибыли. А происходит это потому, что робот видит всю «картинку», весь график и подбирает к нему лучший параметр средней. Которая к будущему движению не имеет никакого отношения. Можно кстати, попробовать выбрать лучший и худший мувинг и между ними средний, есть вероятность, что именно усредненый в будущем будет показывать хоть какой то результат.
avatar
Viacheslav Merten, мне как-то все равно не понятно, как выходит, что при более-менее гладкой экьюти с положительным наклоном и большим числом сделок, с ней может быть что-то не так в обозримом будущем? Если оптимизация поймала 3 сделки за год с огромным плюсом, и по счастью не вошла в кучу сделок с маленьким убытком, то понятно, что стратегия такая никуда не годится, не смотря на «плюс» на выходе. Но тогда и экьюти гладкой не будет. Будет стабильно отрицательный наклон с резкими и редкими выбросами вверх… Автор, где Ваша экьюти?? Столько написали, но самого главного не показали))
avatar
tranquility, в КВИКе мало свечек. Даже если вы получили гладкую эквити, выборка не репрезентативная. Буду учиться брать котировки с ФИнама. Если прогнать 5-минутную стратегию на годичной истории, и будет плюсовой результат, то это намного надёжнее. 
avatar
Albus, не хотите подучить питон (если не знаете еще) и с мосбиржи попытаться взять? Вот, можете проект доработать)) https://smart-lab.ru/blog/455925.php
Только не факт что биржа даст много забрать нахаляву)
avatar
мне в этой стратегии больше всего понравился заяц ...
 
avatar
Сделай длинный мувинг, типа 100 или 200. если выше только от покупок, ниже только от продаж. Самая проблема в мувингах это защита от боковика, поэтому использую их только для выхода из позиции.
avatar
 Блин, много написано,
Потом поценю
avatar
виталюня, заяц ничо такой на видео
avatar
один чел хотел мне продать робот на мувинге с фильтром за 9900  руб. Его главная фишка: период 5 минут и длинная МА, вход в позицию не по факту пересечения цены и  мувинга ,  а на несколько пунктов выше или ниже, что можно прописать в скрипте
avatar
1. Надо ориентироваться в таком подходе не на максимальную прибыль, а на максимальный процент выигрышных сделок. Случайно один раз получить + 100 и 50 раз по -10 никому не интересно. А количество удач покажет насколько хорошо алгоритм подстраивается под график.
2. Вместо средних нужно брать КАМА. Это улучшит результаты всех тестов. Однако всё равно не позволит быть всегда в выигрыше. Только на отдельных инструментах в отдельные периоды.
avatar
такие темы нужно называть что не работает на рыке!
Но поверьте, если туда прикрутить мани менеджмент, оно начнет работать. По тому что оно работает вообще не зависимо от точек входа. Вы ищите грааль?
Так вот, вы можете мне вообще  говорить где покупать или продавать, где угодно на графике, пальцам в небо.
И поверьте, буду в плюсе, за счет мани менеджмента, соблюдения рисков!
avatar
Вы можете объяснить, каким образом такой подход увеличивает вероятность получения прибыли?P.S. Кто ищет, тот найдёт.
avatar
Vanches, в вашей стратегии есть мувинг. У него можно поставить разные периоды. Какой поставить? Разумеется, тот, который дал наивысшую прибыль на истории. Робот находит этот мувинг. Вот такая идея.
Но она не работает, потому что в будущем успех не повторяется.
avatar
Albus, она не работает потому что за мувингом нет логики, которая даст приемущество.
avatar

Albus, так я говорю, попробуй ничего не перебирать. Поставь жёстко 21 смусед мувинг в качестве быстрого, 144 или 233 мувинг в качестве медленного. И ты офигеть как удивишься результатам. Только вот в квике смусед какой-то странный, у меня он чистой воды симпл там. Если ставить WMA — то реально как Smoothed :) Я работаю через метатрейдер. Если хочешь просто посмотреть результаты — на tradingview посмотри хорошие волатильные бумаги и фьючерсы с этими параметрами. Периоды Н1, Д1. На нефти большую часть времени идеально работает М1.
И работает уже очень давно и в прошлом и в будущем :) Я не умею это всё автоматизировать, потому что нужны фильтры входа, такие как:

— не торговать на новостях

— смотреть объёмы пробития мувинга и импульсность

— смотреть как на откате задержались у мувинга

и т.д. Я просто не знаю, как это алгоритмизировать.

avatar
vladimirc1983, спасибо. Попробую. Это легко поменять в коде.
avatar
Press, есть такое(
avatar
вообще при оптимизации надо историю делить на 3 периода. На 1-м мы оптимизируем, на 2-м подбираем из первого что работает, а на 3-м просто смотрим и если на 3-м не работает, то всю стратегию в топку
Вы в каждой итерации алгоритма запускаете сначала Тестер для поиска периодов я правильно понял? Каждые 5 минут расчитываете по истории параметры скользящих?
avatar
Oleg Only Algo, да. Скользяшки рассчитываются и запоминаются в таблицу, чтобы к ним легче было обращаться. 
avatar
Albus, идея неплохая, но выборку надо оценивать на предмет устойчивости. А на небольшом отрезке полученные параметры врядли получиться оценить. Эти параметры должны обязательно быть в каком то устойчивом диапазоне, иначе подгон стопудовый будет
avatar

теги блога Albus

....все тэги



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