Здравствуйте, уважаемые. Помогите решить трэйдеру экселевскую задачку. В интернете решения не нашёл, а сам пока додумать не могу. Надоело вручную записывать сделки в Excel (иногда их больше сотни в день)
Итак, нужно написать макрос, который бы обрабатывал данные с таблицы и записывал сделки - каждую в отдельной строчке. Если в примере непонятно, задавайте вопросы,
В трэйдерском сообществе ответа не нашёл, да это и, собственно, чисто экселевская (VBA) задачка. Сам додумал только, что нужны примерно такие переменные
no_dano - номер строки данных
no_sdel - номер строки сделки
naprav = (+1,-1 или 0-если сделка закрыта)
tsena_otkr = средняя цена открытия
tsena_zakr = средняя цена закрытия
kolvo = количество контрактов в текущей сделке
Теоретически я понимаю логику программы, только лепить её пока не получается, может для профессионалов это пустяк (на 10 минут), а может слишком многого хочу и никто не возьмётся, но жесть как надо,
лично я буду рожать эту программу не меньше месяца - опыта маловато
На рисунке понятнее. Очень надеюсь на вашу помощь.
PS: Хотел прикрепить экселевский файл, но он больше 100Кб, пришлось обойтись скриншотом
Здравствуйте, уважаемые. Помогите решить трэйдеру экселевскую задачку. В интернете решения не нашёл, а сам пока додумать не могу. Надоело вручную записывать сделки в Excel (иногда их больше сотни в день)
Итак, нужно написать макрос, который бы обрабатывал данные с таблицы и записывал сделки - каждую в отдельной строчке. Если в примере непонятно, задавайте вопросы,
В трэйдерском сообществе ответа не нашёл, да это и, собственно, чисто экселевская (VBA) задачка. Сам додумал только, что нужны примерно такие переменные
no_dano - номер строки данных
no_sdel - номер строки сделки
naprav = (+1,-1 или 0-если сделка закрыта)
tsena_otkr = средняя цена открытия
tsena_zakr = средняя цена закрытия
kolvo = количество контрактов в текущей сделке
Теоретически я понимаю логику программы, только лепить её пока не получается, может для профессионалов это пустяк (на 10 минут), а может слишком многого хочу и никто не возьмётся, но жесть как надо,
лично я буду рожать эту программу не меньше месяца - опыта маловато
Хотел прикрепить экселевский файл, но он больше 100Кб
Во-первых, можно удалить лишнее и оставить десяток строк - тогда 100 Кб хватит за глаза; во вторых, существуют архиваторы и файлообменники; в третьих, без файла никто ничего делать не будет.
Quote (ferdi)
Хотел прикрепить экселевский файл, но он больше 100Кб
Во-первых, можно удалить лишнее и оставить десяток строк - тогда 100 Кб хватит за глаза; во вторых, существуют архиваторы и файлообменники; в третьих, без файла никто ничего делать не будет.Serge_007
строк ровно сколько на картинке - ничего лишнего, архиватор не помог - может размер большой оттого что формат с поддержкой макросов, сейчас попробую без поддержки макросов
строк ровно сколько на картинке - ничего лишнего, архиватор не помог - может размер большой оттого что формат с поддержкой макросов, сейчас попробую без поддержки макросовferdi
Трэйдер покупает некоторое количество акций(или контрактов) по одной цене и продаёт по другой, В результате получается сделка, которая имеет следующие составляющие:№, направление, цену открытия, цену закрытия.
Простенький пример Например, Если трэйдер купил 10 акций по цене 100 руб, и потом ещё купил 10 акций уже по цене 150 руб, и продал все 20 акций по цене 200 руб, мы будем иметь исходные данные в таком виде:
Купля 100 10 Купля 150 10 Продажа 200 20
Наш макрос должен представить эти данные в одной строчке в таком виде:
1 Купля 20 125 200
Комментарий к примеру:
1. Мы купили 20 акций по средней цене 125 руб и продали по 200 руб. 2. Сделка считается закрытой(приобретает цену закрытия), когда количество проданных акций равняется количеству купленных
Если бы мы вместо 20-ти акций продали, например 35 акций(так тоже можно), то автоматически открыли бы 2-ю сделку(с направлением "Продажа") и макрос уже представил бы данные так:
1 Купля 20 125 200 2 Продажа 15 200
2-сделка не закрыта, поэтому не имеет цены закрытия. Чтобы закрыть её, надо откупить как минимум 15 акций, если купим больше - откроется третья сделка(с направлением "Покупка") и т.д.
Надеюсь смог донести логику.
Ещё комментарии: 1.Продажа,например, тех же 35 акций по 200 руб в исходных данных может быть представлена как в таком виде(1 вариант),
Во 2-м варианте цена продажи может отличаться, в этом случае вычисляем среднее значение, как это было в простеньком примере
Quote (Hugo)
Вы объясните логику "обрабатывания".
Конкретно расшифровываю свой пример
Трэйдер покупает некоторое количество акций(или контрактов) по одной цене и продаёт по другой, В результате получается сделка, которая имеет следующие составляющие:№, направление, цену открытия, цену закрытия.
Простенький пример Например, Если трэйдер купил 10 акций по цене 100 руб, и потом ещё купил 10 акций уже по цене 150 руб, и продал все 20 акций по цене 200 руб, мы будем иметь исходные данные в таком виде:
Купля 100 10 Купля 150 10 Продажа 200 20
Наш макрос должен представить эти данные в одной строчке в таком виде:
1 Купля 20 125 200
Комментарий к примеру:
1. Мы купили 20 акций по средней цене 125 руб и продали по 200 руб. 2. Сделка считается закрытой(приобретает цену закрытия), когда количество проданных акций равняется количеству купленных
Если бы мы вместо 20-ти акций продали, например 35 акций(так тоже можно), то автоматически открыли бы 2-ю сделку(с направлением "Продажа") и макрос уже представил бы данные так:
1 Купля 20 125 200 2 Продажа 15 200
2-сделка не закрыта, поэтому не имеет цены закрытия. Чтобы закрыть её, надо откупить как минимум 15 акций, если купим больше - откроется третья сделка(с направлением "Покупка") и т.д.
Надеюсь смог донести логику.
Ещё комментарии: 1.Продажа,например, тех же 35 акций по 200 руб в исходных данных может быть представлена как в таком виде(1 вариант),
1. Купленные 10 акций разбиваются на 5+5, т.к. только 5 из них сначала продаются (соответственно у нас в так называемом "портфеле" ещё остаётся 5 акций, купленных по 100 руб)
2. Средняя цена открытия "138" (округлённая) получается так: ((5*100)+(15*150))/20
3. 3-я сделка не закрыта, поэтому не имеет цены закрытия
4. В итоге, как мы видим из последней незакрытой сделки, у нас в портфеле, остаются 10 акций, купленных в среднем по 138 рублей. Если бы все сделки были закрыты, соответственно портфель бы у нас был пустой.
5. Трэйдер изначально может продать неимеющиеся у него акции (как бы "продаёт в долг", а потом откупает), поэтому если бы в вашем вопросе поменять местами слово "Покупка" и "Продажа", то в моём ответе эти слова тоже всего лишь поменялись бы местами
1. Купленные 10 акций разбиваются на 5+5, т.к. только 5 из них сначала продаются (соответственно у нас в так называемом "портфеле" ещё остаётся 5 акций, купленных по 100 руб)
2. Средняя цена открытия "138" (округлённая) получается так: ((5*100)+(15*150))/20
3. 3-я сделка не закрыта, поэтому не имеет цены закрытия
4. В итоге, как мы видим из последней незакрытой сделки, у нас в портфеле, остаются 10 акций, купленных в среднем по 138 рублей. Если бы все сделки были закрыты, соответственно портфель бы у нас был пустой.
5. Трэйдер изначально может продать неимеющиеся у него акции (как бы "продаёт в долг", а потом откупает), поэтому если бы в вашем вопросе поменять местами слово "Покупка" и "Продажа", то в моём ответе эти слова тоже всего лишь поменялись бы местамиferdi
Сообщение отредактировал ferdi - Воскресенье, 11.12.2011, 16:34
Обязательно нужна регистрация каждой сделки, или достаточно определить результат по закрытым сделкам и остаток акций по незакрытым (См. пример). Пришлось использовать вспомогательные ячейки. Если данный результат устраивает, то можно алгоритм через макрос реализовать
PS. в ячейке L4 у Вас не правильная цена, должно быть 157200, а не 157400
Обязательно нужна регистрация каждой сделки, или достаточно определить результат по закрытым сделкам и остаток акций по незакрытым (См. пример). Пришлось использовать вспомогательные ячейки. Если данный результат устраивает, то можно алгоритм через макрос реализовать
PS. в ячейке L4 у Вас не правильная цена, должно быть 157200, а не 157400MCH
Использовал ваш вариант в действии - на самом деле результат определяет красиво. Вот когда понимаешь убогость своих знаний в экселе. Откровенно говоря, так и не смог до конца досмыслить логику ваших формул. Тем не менее, чтобы довести задачку до логического завершения старался вычислить результат каждой сделки
Пытался при обновлении результата вычислять результат отдельной сделки так
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("M10")) Is Nothing Or Not Intersect(Target, Range("M10").Precedents) Is Nothing Then [P10].Value = [M10].Value 'пример для наглядного понимания работы макроса
End If End Sub
но внятного результата не добился - невсегда при обновлении результата в ячейке M10 выполняется пример
Наверное, пошёл неправильным путём.
Михаил, можно попросить Вас уделить задачке ещё немного внимания и вычислить:
а) минимальную сделку дня б) максимальную сделку дня в) максимум дня (max результат) г) на какой сделке зафиксирован максимум дня
известным только Вам способом? Я думаю, что исходя из вашего варианта решения задачи такие дополнения для Вас не проблема
Извините за навязчивость
Ещё раз спасибо за участие...
Quote (MCH)
К сообщению приложен файл: -3.xls(35Kb)
Использовал ваш вариант в действии - на самом деле результат определяет красиво. Вот когда понимаешь убогость своих знаний в экселе. Откровенно говоря, так и не смог до конца досмыслить логику ваших формул. Тем не менее, чтобы довести задачку до логического завершения старался вычислить результат каждой сделки
Пытался при обновлении результата вычислять результат отдельной сделки так
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("M10")) Is Nothing Or Not Intersect(Target, Range("M10").Precedents) Is Nothing Then [P10].Value = [M10].Value 'пример для наглядного понимания работы макроса
End If End Sub
но внятного результата не добился - невсегда при обновлении результата в ячейке M10 выполняется пример
Наверное, пошёл неправильным путём.
Михаил, можно попросить Вас уделить задачке ещё немного внимания и вычислить:
а) минимальную сделку дня б) максимальную сделку дня в) максимум дня (max результат) г) на какой сделке зафиксирован максимум дня
известным только Вам способом? Я думаю, что исходя из вашего варианта решения задачи такие дополнения для Вас не проблема