Pull to refresh
227

Не в вашем времени

69
Subscribers
Send message

По расчёту с 47.6% – это расчет без издержек. Добавьте 0.1% на round-trip и к 100-му дню разница уже не косметическая

Да я добавил round-trip, причем с Вашими цифрами. Если бы не добавлял, то получилось бы 50%.

Но это теория.

Да, но если по каким-то причинам теоретический эксперимент сильно отличается от постулируемых практических результатов, не повод ли это усомниться?

 А в исследовании Barber, данные основываются на выборке из 360 000 дейтрейдеров с опытом 10+ дней. Из которых прибыльны 13%. Не модель, факт

Ну у меня только к ним по сути и претензия. Ни одной человеческой метрики в исследовании тупо нет. Было бы интересно увидеть % вышедших после первого убытка, превышающего всю предыдущую прибыль, например, чтобы как-то понимать психологию. Распределение прибыли/убытков по категориям не в процентах, а в долларах, средний тотальный лосс вышедших (может там речь о 10 баксах с какой-нибудь изначальной рефералки, я то откуда знаю) и так далее. Вот буквально статья, которая нужна только для того, чтобы красиво ссылаться, на среднюю убыточность трейдеров, и точка.

Даже этим:

  • The TSE caps commissions at 0.1425%

  • Taiwan also imposes a transaction tax on stock sales of 0.3%.

Я итоговые цифры не объясню. Хотя, конечно, значения дикие.

UPD: и не 13%, а 3%. Еще 10% occasional они к прибыльным не относят. Я бы тоже не стал.

Если есть претензии к методологии Berkeley

Да, претензии в том, что у меня того же датасета нет, я не могу валидировать ничего оттуда вообще, я могу либо доверять, либо не доверять. Остается понять, о чем я выше и писал, чем будет лучше, если этому доверять, и, собственно, кому.

Вот с чем хотелось бы разобраться, - с этими немногочисленными статьями о том, цитирую сначала Вас:

97% дейтрейдеров закрывали дни в минусе

Страшно, но вообще не понятно, что сказано, и я лезу в оригинал:

Profitable (unprofitable) traders are traders with 10 or more days of past day trading whose cumulative intraday net profits are positive (negative or zero).

Это, если что, про эти 97%. Теперь как бы и понятно, то есть это трейдеры, которые торговали 10 или больше дней и суммарно сидят в минусе. Легенда красивая, спору нет, жаль проверить никак нельзя.

А так, получается, если ты 10+ дней отторговал, какую-то копеечку дернул в плюс, то поздравляю, ты в топ-3% успешных трейдеров. Можно собой возгордиться и переходить к сделкам покрупнее (чтобы, конечно, закономерно все слить).

А если ты в топ-3% не попал то можно начать себя убеждать, что во всем виноваты гениальные маркетмейкеры, которые играют против тебя, network latency в лишние 10 миллисекунд, и купить еще какую-нибудь книжку, курсы, подписку, потому что торговать-то ты хотел изначально, просто что-то делаешь не так, что не удивительно.

Только вот если просто монетку кидать в произвольный момент, на произвольном активе и соответственно SHORT/LONG его, то за вычетом комиссий, и других факторов о которых и в статье есть, получится примерно 47.6%, что в эти "топ-трейдеры" за 10 дней вы попадете. Сделка одна в день, фиксированного размера. Я цифру 47.6% защищать особо не буду, комиссии я округлил вверх, но и кейс когда "деньги-то вот и закончились" не рассматриваю. За 100 дней - уже 38.2% за 1000 дней уже "всего" 25.3%. Я к чему, 3% ну никак не получается.

Можно сделать смелое предположение, что все эти чуваки торгуют куда хуже, чем подбрасывание монетки и именно потому просаживают деньги так быстро, и убедить себя, что у тебя есть шанс даже с алгоритмом монетки победить их и получить их бабло (оно же не все маркетмейкером забирается... или все?) с вероятностью аж 47.6% за 10 дней, а на 11-ый просто остановиться...

Но стоп. Большой стоп. Вся эта цепочка размышлений лишь от предположения, что 97% трейдеров убыточны уже после 10 дней торговли. А похоже, что это просто наглая ложь.

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

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

Так если автор лопаты хочет продавать? У меня была история, где-то году в 2020 произошло "озарение" и выдумался новый блок торговой стратегии, казавшийся очень перспективным. Но он не самодостаточен, нужен пайплайн вокруг него, кроме того у него много параметров, что вынуждает проводить обучение под любой готовый пайплайн. При использовании для себя, мне "повезло", необходимая обвязка под него, просто исходя из интуиции, заработала сразу. Но тут же одолела жадность. Инструментов для тюнинга у меня не было, пришлось писать. Когда показалось, что ого, дак это уже почти стартап, я полез делать всякие пользовательские рюшечки, в надежде на продажу этого добра как ПО, или в идеале, как готового стартапа. В общем эмоций было много, и с этой точки зрения, "оно того стоило". По итоговой прибыли так и хочется сказать, спойлер, шок, сенсация, хотя на хабре и так 99% это знают, - оно себя не окупило.

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

Но бот у меня до сих пор работает, какие-то копеечки сверх SNP500 подгребает. Для любителей подумать "ну мол сложный процент же, что ты заливаешь, либо вообще не работает, либо явно не копеечки", все просто. Те рынки, и те сценарии, когда стратегия работает, они настолько низколиквидные, что там и 100$ это крупная сделка. До банального, с соткой винрейт 54%, а с тысячей уже 49%. Вот такой вот трейдинг для бедных.

Со всем остальным у меня лично не получилось ни-че-го.

Плюс от того же бинанса можно получать ребейты 50%

Это те, которые за кучу кучу денег в бнб?

А самое вкусное-то и вовсе не в этом. А в том, что если пытаться строить какую-то структуру, которая

  • является коммутативным полем,

  • алгебраически замкнута,

  • полна в метрическом смысле,

  • содержит 𝑅 как подполе и операции согласованы

То с точностью до изоморфизма это единственно ℂ. И формула Эйлера неизбежно будет выполняться.

А структура такая нужна не для того, чтобы кружочки на плоскости рисовать, а для того, чтобы алгебраические уравнения решать. Мы так и хотели.

Когда вдумываешься в это, невольно прямо ощущается, насколько математика удивительна.

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

А откуда у вас там минус-то взялся?) Почему именно минус, а не плюс?Вот вам и непонимание. А именно это и есть главный вопрос в понимании темы комплексных чисел.

Ну я же уже это показывал:

(x1​,y1​)+(x2​,y2​)=(x1​+x2​, y1​+y2​)

(x1​,y1​)⋅(x2​,y2​)=(x1​x2​−y1​y2​, x1​y2​+x2​y1​)

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

Это как ln(x). Сначала его и вовсе не было, никакого, и никто никак его считать не умел (потому что его не было!). А вводится он так на вещественных числах: ln(x)=y, такой, что e^y=x для x > 0. Могли по-другому ввести, и по-другому назвать. Могли вообще не вводить, математика бы не исчезла, просто некоторые вещи бы записывались менее удобно.

Ну не интутивно умножение комплексных чисел, но тут можно только смириться. А если смирились, то ровно все по формулам, ни шага влево, ни шага вправо.

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

Всё, дальше ваши рассуждения для изучающего тему бесполезны, он должен только запоминать аксиомы.

Так а дальше никаких рассуждений и нет. Можно все остальное оформить как пару теорем и идти спать спокойно.

Из этих записей внезапно следует, что i это не точка (0, 1), а что-то другое, что применяется только ко второму компоненту в скобках.

Так вот так и есть на самом деле. Это не число, это маркер того, что все, что является коэффициентом при i является вторым компонентом в скобках упорядоченной пары. И любое число в такой записи может иметь ровно один компонент с i. По определению "(x,y) можно записать как x + yi".

Но в то же время, действительно i = (0, 1) при подстановке чисел в это определение. То есть записи

Иначе надо "(0,1)" записывать как "x + y(0,1)", а ее как "x + y(0 + 1(0,1))", а ее как "x + y(0 + 1(0 + 1(0,1)))" и так до бесконечности.

Тут что-то Вы уже куда-то не туда. (0,1) можно записать по определению как i. А вот x + y(0,1) это формально (x, y) или x + yi. Ну как, по каким определениям Вы их приравниваете? Не было таких.

Даже если просто идею поддержать, то да, мы можем записывать числа как 1+2+3+i-i+i-i, можем специально сокращаемые дроби на что-то еще домножать, в общем-то не очень математика здесь ограничивает. Но зачем?

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

А не знаю, это сложный вопрос. Про школьников, ну, обычно формулы дают с идеей "вы просто поверьте, а поймете потом". Ну будет формула Эйлера, будет комплексный логарифм и его многозначность. Все, сомнений нет, на правах постулатов.

Если им эта ваша математика зачем-то нужна, то в ВУЗе поправят все это добро через комплексный анализ. Когда ряды, интегралы уже из привычного мира, то в общем-то все нужные формулы выводятся вообще без тригонометрии, причем на строго доказательном базисе. Ну просто, это правда сложный вопрос, не понятно, какой бэкграунд считать обязательным, а какой побочным.

Вы тут для объяснения написали много текста, и то объяснили не всё. А вот мои объяснения.

Так а радости-то? Я "научил" хотя бы умножать комплексные числа, а Вы в самом частном случае их вращать. Осталось только понять, зачем их вращать-то вообще, если без умножения они как бы и не нужны-то вообще...

Да и такое, по большому счету, очень спорно:

Можно считать, что степень i задает угол поворота

Это тоже чисто из тригонометрии следует?

Я не только объясняю почему "i*i = -1", я даже могу продать комплексные числа восьмиклассникам, так, что они захотят у меня их купить. Жаль, конечно, что за этой красивой идеей нет никакого моего вклада.

Вот уравнение x^2 = -1. Хорошие школьники знают, что такого числа не существует, потому что если x отрицательно, то его можно записать как -y, где y положительно, и тогда (-y)*(-y) = y^2 > 0. Школьник не обязан знать аксиому упорядоченного поля, с него и так сойдет.

Тогда я говорю, а давайте у нас число будет немного по-другому устроено, как пара (x,y) и уравнение превратится в (x,y)^2 = (-1, 0). Причем я ввожу только определение операций сложения и умножения, уже писал их выше.

Тогда при раскрытии квадрата (как умножение числа на самого себя) получаем уравнение (x^2 - y^2, 2xy) = (-1, 0). Тут уже только троечник не скажет, что если 2xy = 0, то x или y равно нулю. Попробуем x=0, уравнение превратится в (-y^2, 0) = (-1, 0). y^2 = 1, значит два решения: y = -1, y = 1. Попробуем y=0, получим x^2 = -1. А мы только что говорили, что такого числа не существует. Итого, у нас только два решения, которые записываются как (0, 1), (0, -1).

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

Но тут тянет руку ленивый отличник, и говорит, дядя, так очень неудобно записывать числа, очень много скобочек, запятых, и я говорю, конечно, вы можете записывать (x,y) как x + yi. Сначала класс посмеется, но так запомнит идею лучше. Но тут придется еще раз напомнить, что мы как работали с скобочками, так в голове и работаем, просто i-шки теперь отдельно, а не-i-шки отдельно.

И та-да, у уравнения x^2 = -1 есть два решения x = i, x = -i. Почему i? потому что это удобная запись, сами же просили, меньше скобочек и запятых.

Даю в качестве домашнего задания решить уравнение x^2 = -5, решают по той же схеме и пишут x = +- sqrt(5) * i. Вот так i прерасно согласуется с другими числами.

(добавлено) Забыл-то на ваш вопрос ответить. Почему i*i = -1 тоже даю в качестве домашнего задания. Школьники помнят, что i это запись (0, 1). Соответственно считаем (0, 1)*(0, 1) с учетом определения операции умножения, подставляем 0 и 1 в нужные места формулы определения, и ура, получаем (-1, 0) как ответ. Вот и все.

А с (-1)^(1/3) уже придется подождать, пока школьники немного подрастут. Мы ищем такое число, что его куб равен -1. x^3 = -1. Много знаний, чтобы попробовать -1 как решение - не нужно. А вот чтобы понимать, что в алгебраически замкнутом поле многочлен имеет корней столько сколько его кратность... но вот не в обиду, но не только школьники этого не понимают. И третий корень Вы где-то систематически умалчиваете. Это-то и позволяет мне говорить прямым текстом о подходе, как удобном для непонимания. Прошу прощения, если что, и с Новым Годом!

Это не какой-то мой подход, это строгая формализация понятия комплексного числа Уильямом Гамильтоном в далекой середине 19 века и это формальное определение живет с нами и ныне. Мистифицировать мнимую единицу больше нет ни одной причины с тех пор.

Уравнение x * x + 1 = 0 не решается, если x из

А вот в ℂ живут "другие" числа, те самые упорядоченные пары (x,y), и тогда уравнение пробретает вид (x,y)*(x,y)+1=0 и оно имеет два решения... Но не спешим, вспомним определение операций сложения и умножения в ℂ:

(x1​,y1​)+(x2​,y2​)=(x1​+x2​, y1​+y2​)

(x1​,y1​)⋅(x2​,y2​)=(x1​x2​−y1​y2​, x1​y2​+x2​y1​)

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

Теперь наше уравнение можно просто раскрыть по определению операций, получая систему двух уравнений, которые имеют решения: (0, 1) и (0, -1), да-да, можно записать и как i и -i. А не издеваться над собой с определением, что i = ± sqrt(-1)

То, что ℂ - алгебраически замкнутое поле (извините, но только тезисно пишу) это прямо-таки ключевой фактор того, что вообще комплексные числа как бы "напрашивались" чтобы их ввели тем или иным способом, а вот геометричность их представления на плоскости это несколько вторичный факт. Без сомнений классный, ну и в каком-то смысле даже повезло, что мы люди, хорошо умеем работать с плоскостью, лучше чем с 3д всяким.

А вот Эйлер работал с комплексными числами еще до формализации Гамильтона, и, полагаю, будучи человеком умным, не делал какой-то драмы из наличия мнимой единицы и ее обозначений, вместо этого, фокусируясь на полезных свойствах комплексный чисел, и создал ту самую формулу Эйлера, которая и поможет ответить на Ваш вопрос с поворотами. e^iθ=cosθ+isinθ

И тогда уже понимание того, что возведение комплексного числа в степень z^w=exp(wlogz) может быть выполнено через несколько формул не должно вызывать сомнений. А "поворот" просто частный случай этой операции. И оно, разумеется, никак не следует из определения комплексного числа, не является аксиомой, а формулам мы обязаны Эйлеру, который работал с менее формализованным представлением, но тем не менее их можно просто "взять и использовать".

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

Зашёл после празднования НГ попуститься, ребята, двести сообщений, половина примерно о том же самом...

Andy_U абсолютно прав. Комплексные числа это упорядоченная пара (x, y), которая так же может быть записана как x+iy.

i никакой не оператор, это, если угодно слэнг, но точнее синтаксический сахар для удобства записи, в первую очередь, тех комплексных чисел, у которых либо (x, 0) = x, либо (0, y) = iy.

И ещё раз, это не оператор, это не функция, это не константа, это просто обозначение.

Было бы все так просто, вот просто бы и было тогда. Аналогия, считаю, неуместная совсем.

Когда культуры ИБ еще не было почти никакой, PoC эксплойты выкладывали, чтобы привлечь внимание к проблеме, и цель в этом положительная, - так проблемы иногда решались. Но когда любой школьник может скачать готовый бинарник эксплойта и устроить ад соседям, добра в этом ноль, а морали глубокой от школьников ожидать как бы ну рановато. Не выкладываем - проблема вообще не решается. Выкладываем в красивой упаковке с кнопочкой Do It, так проблема временно обостряется, появляются реальные пострадавшие в большом количестве.

Здесь ситуация очень близка. С одной стороны автор абсолютно верно обнажает проблему, молча с этим сидеть никакой пользы не создает. Есть пост, есть доказательство в виде программы, - есть некая надежда, что проблему решать будут. Окей. Но здесь же высок риск, что готовым инструментом воспользуются те люди, которым в принципе пофиг на какие-то высокие морали, и раз уж на работу не берут, то чего бы не задудосить этот ваш hh к такой-то женщине. А вот это временно еще больше обостряет проблему, что людям которые в этот момент осознанно ищут работу, пробиться становится еще сложнее. Хотя, ну куда уж сложнее-то. Если "настоящие" автоотклики можно просто фильтром убрать, то такие автоотклики поди попробуй отличи от ручных.

Будут многие пользоваться скриптом, - ну так введут, в худшем случае, какие-нибудь теневые баны на уровне, что если больше 12 откликов в день, то отклики такого человека еще пол года вообще не показываем. В лучшем - капчу на любой отклик.

Но это мое видение ситуации.

Вот мы и достигли непонимания целой культуры, вообще защита от scriptkiddies это не о заботе о потенциальных пользователях, все с точностью до наоборот, - это намеренные баги, которые в лучшем случае роняют скрипт в определенных условиях, а в худших то, что приводит, например к бану на сервисе. И это раньше считалось правильно, потому, что человек, близкий к области может (скажем так, имеет шанс) разобраться, исправить, улучшить, и тем самым заслуживает право на использование. А вот остальные пусть лучше кнопки тыркают по старинке. А еще лучше - не тыркают.

А защиту от scriptkiddies в код вносили, вносили же, да?)

Так а точки-запросы для "слияния" нужно сначала сортировать. Если запросов M, диапазонов N, то полная сложность:

"слияние" O(M log M + N log N) на подготовку и O(N + M) на слияние.

"бинпоиск" O(N log N) на подготовку (O(N) на maxB не интересно становится) и O (M log N) на поиск по всем запросам.

Я сначала почти согласился, подумав что эти телефончики можно быстро каким-нибудь radix-sort'ом обработать, а вдруг их реально много?

Выгоднее, конечно, держать эту точку ниже, чем у человека. Ваш тезис правильный, но для меня Вы рассуждаете "от обратного". То есть делать машину дороже человека заведомо провальный путь (при прочих равных). Держать стоимости на равне тоже не выгодно, ведь существенная часть заказов уйдет людям (допустим 50% при ровно той же стоимости), а так, понижая стоимость даже в два раза (почти) мы не теряем с точки зрения прибыли ничего, так как все заказы будут приходиться на машину. И если бы не было реальной конкуренции в этом секторе, то я бы уже начинал бояться.

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

Этоже не бинпоиск. 

Что-то я не то написал, что хотел, прошу прощения. А так, конечно, Ваш комментарий и пример правильные.

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

Пусть диапазоны это массивы [a_i, b_i], a_i<=a_i+1 (то есть отсортированы по началу диапазона), ищем точку X. За O(n) считаем maxB_i = max(b_0 .. b_i), бинпоиском ищем наибольший k, что a_k <= X. Если maxB_k >= X то интервал, который содержит x есть, а иначе нет. Другими словами то же, что Вы пишете:

Надо отсортировать отрезки по началам и помнить самый правый конец из пока что встреченных.

Оно примерно равнозначно применимо и к бинпоиску и к алгоритму "слиянием".

Если у нас очень много номеров, и куда меньше диапазонов, то бинпоиск, похоже, побыстрее-то будет.

Если такую систему оценки выбирать, то по пальцам можно перечислить вообще что "того стоит".

Если отрезки пересекаются, то и бинпоиск по отрезкам сделать нельзя.

Почему? Вот у нас в списке 2 отсортированные по началу диапазона интервалы. Допустим они могут пересекаться, указатель на "список 1" у нас, понятно, как и раньше линейно идет, а вот указатель на "список 2" сдвигается если элемент из списка 1 вне текущего диапазона по указателю списка 2, причем проверяется это в цикле "пока". Нормально работать должно.

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

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

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

Скрытый текст

А на уровне сознательных сомнений в эту игру, кажется, не выиграть. Уникальная такая профессия программист. Каждый программист одновременно умеет все и ничего не умеет. Уметь что-то это ведь что-то прям очень конкретное. Чтобы доказать, что ты это умеешь, надо это сделать. А как только что-то сделал, оно уже сделано, и делать ровно это больше уже никому не нужно.

Делаешь однотипные простые вещи, так сам знаешь, что это умеют делать чуть более чем почти все, стоит ли многого ощущение, что ты это умеешь тоже?

Делаешь сложные вещи, так ни у кого они сходу не получаются. Ну почти ни у кого наверное, тут ведь и эксперимент не провести.

Сходу получилась сложная вещь? Так может она простая на самом деле тогда?

А потом, если задумываться, чем сложные от простых вещей отличаются, то можно и мозг сломать, а толк с этого какой? У Васи, например, принципиально иное мнение о том, что есть простые и сложные вещи.

Не надо играть в эту игру вообще. Лучше вместо этого и правда что-то новое изучить, без точных оценок пригодится/не пригодится.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity