Индикаторы - совместный проект
Atom Ответить
31.05.2011


Приветствую всех участников!

Месяц назад я публиковал призыв о совместной разработке индикаторов на базе C#. Прошел месяц, мною было сделано 3 стандартных индикатора SMA, EMA и WMA. И ни строчки кода ни от одного пользователя S#. Каждый день задают вопросы (причем, большинство явно не относящиеся к S# как таковому), получают ответы, но свою помощь предложить не хотят. Стесняются, наверное.

Я понимаю, что дело в мотивации. Зачем помогать делать что-то, если можно подождать пару месяцев (пол года) или сделать самому, а потом пересесть на стандартное. Поэтому я решил найти мотивацию. И я ее нашел. Это лето объявляется летом "Ты мне - я тебе".

Схема простая. Вы делаете индикатор - я отвечаю на три любых вопроса. Вопросы по глюкам S# остаются как есть и раньше - ответ всегда получите. Но вопросы по C#, WFP, примерам, документации, Квику и всему прочему - только за индикатор.Smile Я думаю честно.

Сделав 5 индикаторов, вы получается бонус - кружку с символикой S#.

Репозитарий с исходниками расположен по адресу http://stocksharpconnectors.codeplex.com Чтобы получить доступ на запись регистрируйтесь на сайте, пишите в эту тему свой логин и какие индюки хотите сделать. Стиль кодирование указывается через R#. Настройки в репозитарии.

Что сделано сейчас:

  1. Acceleration
  2. Alligator
  3. AwesomeOscillator
  4. Fractals
  5. GatorOscillator
  6. MarketFacilitationIndex
  7. BollingerBands
  8. ExponentialMovingAverage
  9. Macd
  10. ParabolicSar
  11. RAVI
  12. SimpleMovingAverage
  13. SmoothedMovingAverage
  14. StandartDeviation
  15. VolumeWeightedMovingAverage
  16. WeightedMovingAverage
  17. WilderMovingAverage
  18. Adx
  19. Atr
  20. ChandeMomentumOscillator
  21. CommodityChannelIndex
  22. DiMinus
  23. DiPlus
  24. Dx
  25. Ichimoku
  26. Momentum
  27. RateOfChange
  28. RelativeStrengthIndex
  29. RVI
  30. TrueRange
  31. DetrendedPriceOscillator
  32. Highest
  33. LinearReg
  34. LinearRegression
  35. LinearRegSlope
  36. Lowest
  37. MeanDeviation
  38. MedianPrice
  39. Peak
  40. PeakBar
  41. QStick
  42. RSquared
  43. StandardError
  44. StochK
  45. Sum
  46. Trix
  47. Trough
  48. TroughBar
  49. UltimateOsc
  50. VerticalHorizontalFilter
  51. Vidya
  52. Volatility
  53. WilliamsR

Теги:


Спасибо:




340 Ответов
<< < 4 5 6 7 8  > >>
Sergey Masyura

Фотография
Автор статей
Дата: 11.06.2011
Ответить


esper Перейти
sergey.masyura Перейти
BB фейлится, потому что первое значение EMA считается как SMA, а когда экспортировали данные оно, видимо, строилось на основе предыдущих значений.

Для BB еще не переписывал тест с использованием файлов, пусть пока фейлится, на днях разберусь.

Кстати, у меня и MACD не сходится, видимо тоже из-за Ema


На такие тесты можно просто ставить аттрибут [Ignore], тогда они будут пропускаться при выполнении.
Спасибо:

artemox

Фотография
Дата: 11.06.2011
Ответить


Посмотрел VMA, оказывается это Volume Weighted Moving Averages, а я искал Variable Moving Average

Выгрузил:
SaveValues(folder+"VMA.txt", Sum(V*C,20)/Sum(V,20));


Кстати реализацию можно переделать используя индикатор SUM :)
Спасибо:

artemox

Фотография
Дата: 11.06.2011
Ответить


sergey.masyura,
как победить ошибку "Невозможно загрузить файл или сборку "Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" или один из зависимых от них компонентов. Не удается найти указанный файл." возникающую например при вызове sma.Value.AssertEqual((decimal)data.Average()); ?

Не у одного меня такая ерунда :(
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.06.2011
Ответить


esper Перейти
Mikhail Sukhov Перейти
40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.

Пора начинать думать над разработкой визуализатораSmile


Это точно. Вот думаю, а не залить ли сырцы Ecng.Trading.Xaml да и сделать на основе CandleChart рисовалку всех этих индюков. Примеры Chart из .NET меня удивили по хорошему, особенно раздел финансы (приложил к сообщению). Я так прикинул, что большинство индюков имею одинаковый вид отрисовки. А значит и работа будет значительно меньше, чем я предполагал в самом начале.
2DKagi.png 9 KB (0)
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.06.2011
Ответить


artemox Перейти
Mikhail Sukhov Перейти
40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.

Scared 8 маек!


У нас уже 8 человек сделали по 5 индюков?

Но за намек спасибо, действительно пора уже печатать. Отсылать буду почтой. С москвичами можно сделать проще - очная встреча.
Автор топика
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 11.06.2011
Ответить


artemox Перейти
sergey.masyura,
как победить ошибку "Невозможно загрузить файл или сборку "Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" или один из зависимых от них компонентов. Не удается найти указанный файл." возникающую например при вызове sma.Value.AssertEqual((decimal)data.Average()); ?

Не у одного меня такая ерунда :(


Как вариант файлы из аттача распоковать в c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

По идее все это ставится в VS 2010 Ultimate.
ut.zip 577 KB (0)
Спасибо: artemox

esper

Фотография
Программист
Дата: 12.06.2011
Ответить


artemox Перейти
Появилась идея сделать класс TestTestExecuter.
Но тогда необходимо создать базовый класс с методами Add(Candle), Add(decimal), Value, IsFormed.
Понятно, что не все индикаторы укладываются в один Value, но большинство индюков будут приобщены к одному интерфейсу.

Здравая идея, думаю в визуализаторе это тоже пригодится

Maxim Перейти

1) Лучше конечно определится со способо тестирования.
На данный момент где-то данные просто генерятся внутри теста,
где-то используются массивы, где-то используются внешние данные из файла.

Считаю, что лучше не генерировать данные внутри теста, а использовать внешние данные.
И, повторюсь, лучше унифицировать этот способ.

MomentumTest мне нравится. Только надо ввсети погрешность — плюс-минус дельта величину,
когда мы будем считать, что значение верно.

поддерживаю

Maxim Перейти

2) Возможно, тесты стоит сделать одному человеку.
В этом случае будет все более унифицировано.
Методом копипаст не очень трудно сделать тесты для каждого индикатора из MomentumTest.

при написания теста часто выявляются ошибки, а искать их проще тому, кто писал индикатор

Maxim Перейти

Оффтоп:
а) В список правил стоит добавить пункт-напоминание, что бы все делали проверку на деление на ноль где это возможно.
б) Что насчет потокобезопасности? Стоит ли ее реализовывать в индикаторах или нет?

а)согласен
б)мне кажется, не стоит усложнять индикаторы, есть ли такие ситуации, где это было бы оправдано?

artemox Перейти
На самом деле, сейчас индюки пишутся на раз два. Например DPO с тестом нарисовал за 20 минут, + отладка 40 минут :)

Вот только нужен ли этот DPO кому-нибудь? :)

Лишним не будетSmile Так понимаю, что наиболее используемые индикаторы уже сделали? Может добьем тесты и Михаил соберет первую бету?

Maxim Перейти
artemox Перейти

Да правильно, но HHV и LLV это имена из амиброкера, т.к. Highest и Lowest там имеют другое предназначение
Может в таблицу алтернативные имена добавить?


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

Поддерживаю, заодно обновим что сделано, а что нет:)

sergey.masyura Перейти
На такие тесты можно просто ставить аттрибут [Ignore], тогда они будут пропускаться при выполнении.

Хорошо, учтем. Смотрю на частые Coding style fixes, есть документ, где представлен Coding style?

Mikhail Sukhov Перейти

Это точно. Вот думаю, а не залить ли сырцы Ecng.Trading.Xaml да и сделать на основе CandleChart рисовалку всех этих индюков. Примеры Chart из .NET меня удивили по хорошему, особенно раздел финансы (приложил к сообщению). Я так прикинул, что большинство индюков имею одинаковый вид отрисовки. А значит и работа будет значительно меньше, чем я предполагал в самом начале.

Надо подумать над индикаторами, у которых несколько значений, как вариант, пусть каждый индикатор умеет рисовать себя сам.
Спасибо:

maze9a

Фотография
Дата: 12.06.2011
Ответить


Всем доброго времени суток. Я застрял с реализацией индикатора HV (http://www2.wealth-lab.com/WL5Wiki/HV.ashx?HL=hv), может кто-нибудь подскажет более понятную формулу для расчета этого индикотора?
Спасибо:

esper

Фотография
Программист
Дата: 12.06.2011
Ответить


maze9a Перейти
Всем доброго времени суток. Я застрял с реализацией индикатора HV (https://www2.wealth-lab.com/WL5Wiki/HV.ashx?HL=hv), может кто-нибудь подскажет более понятную формулу для расчета этого индикотора?

Возможно это поможет
Спасибо:

Евгений

Фотография
Дата: 12.06.2011
Ответить


artemox Перейти
На самом деле, сейчас индюки пишутся на раз два. Например DPO с тестом нарисовал за 20 минут, + отладка 40 минут :)

Вот только нужен ли этот DPO кому-нибудь? :)


Эх... Не успел вылить... Напишу тогда, что делаю: Fractals, Ichimoku, Parabolic SAR, что ведет за собой реализацию Acceleration Oscillator, Awesome Oscillator и Median Price.
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 12.06.2011
Ответить


esper Перейти
artemox Перейти
Появилась идея сделать класс TestTestExecuter.

[quote=sergey.masyura;8861]На такие тесты можно просто ставить аттрибут [Ignore], тогда они будут пропускаться при выполнении.

Хорошо, учтем. Смотрю на частые Coding style fixes, есть документ, где представлен Coding style?


В шапке топика написано - "Стиль кодирование указывается через R#. Настройки в репозитарии."

Настройки можно включить через плагин http://rsm.codeplex.com/
Спасибо:

Maxim

Фотография
Дата: 12.06.2011
Ответить


Евгений Перейти
artemox Перейти
На самом деле, сейчас индюки пишутся на раз два. Например DPO с тестом нарисовал за 20 минут, + отладка 40 минут :)

Вот только нужен ли этот DPO кому-нибудь? :)


Эх... Не успел вылить... Напишу тогда, что делаю: Fractals, Ichimoku, Parabolic SAR, что ведет за собой реализацию Acceleration Oscillator, Awesome Oscillator и Median Price.


Печально.

Предложение.
Можно придерживаться следующего правила, что бы не делать индикатор, который уже делают.
Как только выбрали индикатор для реализации, обновляете проект до последней версии.
Проверяете есть ли уже данный индикатор в проекте.
Если нет, создаете пустой класс с этим индикатором.
Комитите этот файл в репозиторий, что бы все видели, что этот индикатор уже в производстве.
Ну и как он сделан, комитить уже готовый файл с индикатором.


Спасибо:

esper

Фотография
Программист
Дата: 12.06.2011
Ответить


sergey.masyura Перейти
esper Перейти
artemox Перейти
Появилась идея сделать класс TestTestExecuter.

[quote=sergey.masyura;8861]На такие тесты можно просто ставить аттрибут [Ignore], тогда они будут пропускаться при выполнении.

Хорошо, учтем. Смотрю на частые Coding style fixes, есть документ, где представлен Coding style?


В шапке топика написано - "Стиль кодирование указывается через R#. Настройки в репозитарии."

Настройки можно включить через плагин https://rsm.codeplex.com/

Не у всех есть решарпер или возможность его поставить
Спасибо:

Maxim

Фотография
Дата: 12.06.2011
Ответить


А как в S# задается параметр метода или конструктора, если этот параметр «проценты»?

Сорок пять процентов — 45 или 0.45?
Спасибо:

InsiderHSE

Фотография
Дата: 12.06.2011
Ответить


Maxim Перейти
А как в S# задается параметр метода или конструктора, если этот параметр «проценты»?

Сорок пять процентов — 45 или 0.45?


new Unit() {Value = 45, Type = UnitTypes.Percents}

Думаю лучше принимать в качестве параметра Юнит, и если нужно чтобы были именно проценты, то проверять тип в конструкторе и выбрасывать эксепшен если это не так.
Спасибо:

Maxim

Фотография
Дата: 12.06.2011
Ответить


По тестам наблюдение.

Есть данные из Ами.

SaveValues(folder+"VMA.txt", Sum(V*C,20)/Sum(V,20));

Код

179060,179395,178505,179240,76663,178174.53125000
179245,179995,178855,179695,59589,178212.98437500
180910,181810,180910,181535,45414,178285.53125000
181555,181690,181110,181135,66098,178421.76562500
181135,181935,180935,181860,108430,178829.85937500
181850,182115,181355,181695,88335,179129.93750000
181700,181770,179740,179890,141672,179345.32812500
179885,180240,179560,179615,70581,179444.46875000
179625,179725,178955,179170,100643,179531.73437500
179170,180200,179055,180000,57874,179622.51562500
179965,180590,179620,180365,49886,179658.54687500
180340,180840,179700,179865,67803,179673.57812500
179850,180450,179730,180345,46388,179703.79687500
180340,180600,179960,180450,45855,179827.32812500
180445,180690,180275,180420,30355,179892.65625000
180410,180445,179320,180000,117375,179929.85937500
180015,180030,179180,179530,73419,179948.39062500
179525,180870,179360,179490,121644,179997.76562500
179490,180120,179100,179850,113072,180077.23437500
179840,180030,179300,179735,43616,180148.73437500


Согласно этим данным VMA = 180148.734375
Если посчитать эти же данные в экселе, то VMA = 180148.741408213
Если посчитать в S#, то VMA = 180148.74140821348556317520948

Это что получается?
Что ами не надежный источник для тестирования?
Какая-то адская погрешность (0.01) для такого несложного индикатора.

Спасибо:

esper

Фотография
Программист
Дата: 12.06.2011
Ответить


Maxim Перейти

Согласно этим данным VMA = 180148.734375
Если посчитать эти же данные в экселе, то VMA = 180148.741408213
Если посчитать в S#, то VMA = 180148.74140821348556317520948

Это что получается?
Что ами не надежный источник для тестирования?
Какая-то адская погрешность (0.01) для такого несложного индикатора.

В процентном соотношении это совсем немного, где-то 1e-6
Спасибо:

artemox

Фотография
Дата: 12.06.2011
Ответить


esper Перейти
Maxim Перейти

Согласно этим данным VMA = 180148.734375
Если посчитать эти же данные в экселе, то VMA = 180148.741408213
Если посчитать в S#, то VMA = 180148.74140821348556317520948

Это что получается?
Что ами не надежный источник для тестирования?
Какая-то адская погрешность (0.01) для такого несложного индикатора.

В процентном соотношении это совсем немного, где-то 1e-6


Вот оно как!
Я кстати тоже заметил на стохастике увеличенную погрешность (если ориентироваться на количество знаков после запятой), т.к. было умножение результата на 100.

Получается что проверку нужно делать таким образом :
Assert.IsTrue(Math.Max(indicator.Value, item.Value1) / Math.Min(indicator.Value, item.Value1) - 1 < 0.000001m);

Или искать более точный источник (хотя правильность расчетов будет подтверждена и данными из ами)
Спасибо:

artemox

Фотография
Дата: 12.06.2011
Ответить


sergey.masyura Перейти
artemox Перейти
sergey.masyura,
как победить ошибку "Невозможно загрузить файл или сборку "Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" или один из зависимых от них компонентов. Не удается найти указанный файл." возникающую например при вызове sma.Value.AssertEqual((decimal)data.Average()); ?

Не у одного меня такая ерунда :(


Как вариант файлы из аттача распоковать в c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

По идее все это ставится в VS 2010 Ultimate.



У меня 2010 проф.
Папки PublicAssemblies не было. Создал папку и добавил файлы.
При добавлении ссылки в проект файлы из PublicAssemblies в списке появились.
Добавил в IndicatorsTest ссылку на Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, ошибка все равно не исчезла.

Заменю ка на Assert.IsTrue? Все равно эта ошибка только в sma осталась.
Никто не против?
Спасибо:

artemox

Фотография
Дата: 12.06.2011
Ответить


Mikhail Sukhov Перейти
esper Перейти
Mikhail Sukhov Перейти
40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.

Пора начинать думать над разработкой визуализатораSmile


Это точно. Вот думаю, а не залить ли сырцы Ecng.Trading.Xaml да и сделать на основе CandleChart рисовалку всех этих индюков. Примеры Chart из .NET меня удивили по хорошему, особенно раздел финансы (приложил к сообщению). Я так прикинул, что большинство индюков имею одинаковый вид отрисовки. А значит и работа будет значительно меньше, чем я предполагал в самом начале.


А заливайте, дело то затягивающее :)
Спасибо:

artemox

Фотография
Дата: 12.06.2011
Ответить


Mikhail Sukhov Перейти
artemox Перейти
Mikhail Sukhov Перейти
40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.

Scared 8 маек!


У нас уже 8 человек сделали по 5 индюков?

Но за намек спасибо, действительно пора уже печатать. Отсылать буду почтой. С москвичами можно сделать проще - очная встреча.


Это больше шутка, чем намек :) Подождите релиза, а там и плюшки можно раздавать
Спасибо:

artemox

Фотография
Дата: 12.06.2011
Ответить


esper Перейти
artemox Перейти
Появилась идея сделать класс TestTestExecuter.
Но тогда необходимо создать базовый класс с методами Add(Candle), Add(decimal), Value, IsFormed.
Понятно, что не все индикаторы укладываются в один Value, но большинство индюков будут приобщены к одному интерфейсу.

Здравая идея, думаю в визуализаторе это тоже пригодится


Коллеги, на ваш суд SimpleIndicator.
Может быть устраним базовый Ma? и все пронаследуем от SimpleIndicator?
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 12.06.2011
Ответить


artemox Перейти
esper Перейти
artemox Перейти
Появилась идея сделать класс TestTestExecuter.
Но тогда необходимо создать базовый класс с методами Add(Candle), Add(decimal), Value, IsFormed.
Понятно, что не все индикаторы укладываются в один Value, но большинство индюков будут приобщены к одному интерфейсу.

Здравая идея, думаю в визуализаторе это тоже пригодится


Коллеги, на ваш суд SimpleIndicator.
Может быть устраним базовый Ma? и все пронаследуем от SimpleIndicator?


Само название SimpleIndicator уже не очень подходит для базового класса.
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 12.06.2011
Ответить


artemox Перейти
sergey.masyura Перейти
artemox Перейти
sergey.masyura,
как победить ошибку "Невозможно загрузить файл или сборку "Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" или один из зависимых от них компонентов. Не удается найти указанный файл." возникающую например при вызове sma.Value.AssertEqual((decimal)data.Average()); ?

Не у одного меня такая ерунда :(


Как вариант файлы из аттача распоковать в c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

По идее все это ставится в VS 2010 Ultimate.



У меня 2010 проф.
Папки PublicAssemblies не было. Создал папку и добавил файлы.
При добавлении ссылки в проект файлы из PublicAssemblies в списке появились.
Добавил в IndicatorsTest ссылку на Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, ошибка все равно не исчезла.

Заменю ка на Assert.IsTrue? Все равно эта ошибка только в sma осталась.
Никто не против?


Если поможет - наздоровье. Раз такая большая проблема у всех с тестами, может вобще стоит про NUnit подумать?
Спасибо:

Maxim

Фотография
Дата: 13.06.2011
Ответить


Индикаторы Peak и Trough.

Столкнулся с тем, что мое понимание этих индикаторов отличается от того, которое в Ами.
Прошу помочь разобраться, какая интерпретация верная.


1) Описание в Лабе: http://www2.wealth-lab.com/WL5Wiki/Trough.ashx


2) Первое различие.
В описании ясно сказано, что
«During these bars the Trough function will not return $20, but will instead return the value of the previous trough.»

В ами же значение индикатора становится равным $20 раньше. Как будто они уже знают будущее.
Пример данных из ами.
Код

191090,191250,191060,191150,7066,187400.00000000
191150,191205,190445,190585,16283,187400.00000000
190575,190960,190450,190935,12038,187400.00000000
190935,191050,190775,190955,9648,187400.00000000
190970,190970,190320,190400,12287,187400.00000000
190400,190470,190150,190220,18255,190220.00000000
190220,190740,190155,190665,12442,190220.00000000
190680,190860,190505,190640,11811,190220.00000000
190640,190850,190425,190800,10218,190220.00000000
190800,191100,190675,191100,10841,190220.00000000


Считаю, что реализация в Ами этого индикатора неверная.
Так как их реализация годится только для уже существующих данных, расчет постфактум.
Если данные добавляются онлайн динамически, то их индикатор использовать нельзя.

Если остановимся на моем варианте, то данные из ами для тестов не подходят.

Вопрос: какой вариант реализуем в S#?

3) Второе различие.
Второе различие более неопределенное. Так как в описании оно не рассматривается.

Мое понимаение: график индикатора представляет из себя лестницу вверх(peak), или вниз (trough).
Тоесть график показывает глобальный максимум или минимум на всем пройденном интервале.

Если посмотреть на данные Trough из Ами:
Код

188395,188435,188080,188125,13367,182985.00000000
188130,188140,187650,187750,20700,182985.00000000
187775,187775,187460,187615,20565,182985.00000000
187615,187630,187280,187400,15589,187400.00000000
187415,187740,187275,187610,14105,187400.00000000
187625,187765,187530,187760,7779,187400.00000000
187745,187850,187545,187560,10627,187400.00000000
187550,187715,187380,187605,9178,187400.00000000
187620,187970,187565,187860,8184,187400.00000000

................................................

191090,191250,191060,191150,7066,187400.00000000
191150,191205,190445,190585,16283,187400.00000000
190575,190960,190450,190935,12038,187400.00000000
190935,191050,190775,190955,9648,187400.00000000
190970,190970,190320,190400,12287,187400.00000000
190400,190470,190150,190220,18255,190220.00000000
190220,190740,190155,190665,12442,190220.00000000
190680,190860,190505,190640,11811,190220.00000000
190640,190850,190425,190800,10218,190220.00000000


то график индикатора Trough будет представлять собой ступеньки то вверх, то вниз.
Могу предположить, что они считают локальный минимум, а не глобальный.
Тоесть, если после локального минимума был локальный максимум, а после этого опять локальный минимум, то они
берут для индикатора значения этих минимумов. Правильно ли я понял? Или они делают по другому?

Вопрос: какой вариант верный и что реалиуем в S#?
Спасибо:
<< < 4 5 6 7 8  > >>

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy