Есть в интернете великолепный ресурс по опционным Greeks «en.wikipedia.org/wiki/Greeks_(finance)» — почему то всю строку не захватывает. Применяйте Copy/Paste
И каждый раз когда я захожу на этот сайт, как всегда медленно и печально, меня посещает одна и та же мысль, что чего-то на нем не хватает.
Но недавно я понял что именно. В таблице Греков есть дыры и из них тянет сквозняком.

А в конце абзаца под таблицей есть фраза:
Three places in the table are not occupied, because the respective quantities have not yet been defined in the financial literature.
Не все ячейки матрицы заняты, потому что не определены в финансовой литературе.
Ё К Л М Н. Столько лет торгуем опционы и не все ячейки заполнены.
V — Fair Value опциона.
Как видно в столбце Theta нет сразу двух Греков.
Давайте их придумаем и воспроизведем сами. А что, а вдруг.
1. dTheta/dT == d2V/dT2 — аналог Gamma = dDelta/dS == d2V/dS2
2. d2Theta/dT2 == d3V/dT3 — аналог Speed = dGamma/dS == d3V/dS3
Дадим им названия, которые как то должны ассоциироваться со временем Time. Theta связана со временем.
ВРЕМЯ ДЕЙСТВИЯ: ДО ЗАКРЫТИЯ ТОРГОВ
УСЛОВИЕ: ЦЕНА >= 75.64
СТОП-ЛОСС: ЦЕНА ВАШЕЙ ПОКУПКИ — 2.6
ТЭЙК-ПРОФИТ: ЦЕНА ВАШЕЙ ПОКУПКИ + 2.6
ВРЕМЯ ДЕЙСТВИЯ: ДО ЗАКРЫТИЯ ТОРГОВ
УСЛОВИЕ: ЦЕНА >= 101.8
СТОП-ЛОСС: ЦЕНА ВАШЕЙ ПОКУПКИ — 3.6
ТЭЙК-ПРОФИТ: ЦЕНА ВАШЕЙ ПОКУПКИ + 3.6
СТАТИСТИКА С 22.09.1997 ПО 29.12.2018: 710/396
(ЧИСЛО ПРИБЫЛЬНЫХ СДЕЛОК/ЧИСЛО УБЫТОЧНЫХ)

NASDAQ signals to BUY
Symbol: METX
Recommended price: 0.1825
Signal strength: 3 (BUY)
Prediction date: 07/02/2022
Issuer: Meten Holding Group Ltd. Ordinary Shares
SL: -1% TP: 5%
Symbol: GREE
Recommended price: 12.52
Signal strength: 2 (BUY)
Prediction date: 07/02/2022
Issuer: Greenidge Generation Holdings Inc. Class A Common
SL: -1% TP: 5%
Symbol: TXG
Recommended price: 90.84
Signal strength: 2 (BUY)
Prediction date: 07/02/2022
Issuer: 10x Genomics, Inc. Class A Common Stock
SL: -1% TP: 5%
Symbol: BLDP
Recommended price: 9.28
Signal strength: 1 (BUY)
Prediction date: 07/02/2022
Issuer: Ballard Power Systems Inc.
SL: -1% TP: 5%
Symbol: DOCU
Recommended price: 118.41
Signal strength: 1 (BUY)
Prediction date: 07/02/2022
Issuer: DocuSign, Inc. Common Stock
SL: -1% TP: 5%
Symbol: VUZI
Recommended price: 6.21
Signal strength: 1 (BUY)
Prediction date: 07/02/2022
Issuer: Vuzix Corporation
SL: -1% TP: 5%
Symbol: WISH
Recommended price: 2.3
Signal strength: 1 (BUY)
Prediction date: 07/02/2022
Issuer: ContextLogic Inc. Class A Common Stock
SL: -1% TP: 5%
NASDAQ signals to SELL
Symbol: SYNL
Recommended price: 17.9
Signal strength: -3 (SELL)
Prediction date: 07/02/2022
Issuer: Synalloy Corp
SL: -1.1% TP: 3.1%
Написал скрипт, который переделывает тиковые данные в range заданной размерности.
Но есть нюанс, когда идет быстрый рынок, некоторые бары могут иметь одинаковое время открытия, что приводит к некоторому несоответствию range баров.

<code>"""
Скрипт из файлов с тиковыми данными делает файл с рандже барами
"""
import re
from datetime import datetime
from pathlib import *
import pandas as pd
def zero_hour(cell):
""" Функция преобразует время (с финама приходят часы без нулей (с марта 2021), которые pandas не воспринимает)"""
cell = f'{int(cell)}'
tmp_time = datetime.strptime(cell, "%H%M%S")
return tmp_time.strftime("%H%M%S")
def run(tick_files: list[Path], razmer: int, target_dir: Path):
for ind_file, tick_file in enumerate(tick_files, start=1): # Итерация по тиковым файлам
list_split = re.split('_', tick_file.name, maxsplit=0) # Разделение имени файла по '_'
tiker = list_split[0] # Получение тикера из имени файла
date_quote_file = re.findall(r'\d+', str(tick_file)) # Получение цифр из пути к файлу
target_name = f'{tiker}_range{razmer}_{date_quote_file[0]}.txt' # Создание имени новому файлу
target_file_range: Path = Path(target_dir / target_name) # Составление пути к новому файлу
if Path.is_file(target_file_range):
print(f'Файл уже существует {target_file_range}')
continue
else:
df_ticks_file: pd = pd.read_csv(tick_file, delimiter=',') # Считываем тиковые данные в DF
# Создание DF под рандже бары одного тикового файла
df: pd = pd.DataFrame(columns='<DATE> <TIME> <OPEN> <HIGH> <LOW> <CLOSE> <VOL>'.split(' '))
for tick in df_ticks_file.itertuples(): # Итерация по строкам тикового DF
print('\rCompleted file: {:.2f}%. Completed files: {:.2f}%'.format(
tick[0] * 100 / len(df_ticks_file.index),
ind_file * 100 / len(tick_files)
),
end=''
)
if tick[0] == 0:
# Добавление строки в DF с рандже барами
df.loc[len(df.index)] = [int(tick[1]), int(tick[2]), tick[3], tick[3], tick[3], tick[3], tick[4]]
continue
# Если бар сформирован по размеру возрастающий бар
if df.loc[len(df.index) - 1, '<LOW>'] + razmer < tick[3]:
df.loc[len(df.index) - 1, '<CLOSE>'] = df.loc[len(df.index) - 1, '<LOW>'] + razmer
df.loc[len(df.index) - 1, '<HIGH>'] = df.loc[len(df.index) - 1, '<CLOSE>']
# Добавление строки в DF с дельта барами
df.loc[len(df.index)] = [int(tick[1]), int(tick[2]), tick[3], tick[3], tick[3], tick[3], tick[4]]
continue
# break
# Если бар сформирован по размеру падающий бар
if df.loc[len(df) - 1, '<HIGH>'] - razmer > tick[3]:
df.loc[len(df) - 1, '<CLOSE>'] = df.loc[len(df) - 1, '<HIGH>'] - razmer
df.loc[len(df) - 1, '<LOW>'] = df.loc[len(df) - 1, '<CLOSE>']
# Добавление строки в DF с дельта барами
df.loc[len(df.index)] = [int(tick[1]), int(tick[2]), tick[3], tick[3], tick[3], tick[3], tick[4]]
continue
# break
# Заполняем(изменяем) последнюю строку DF с рандже баром --------------------------------------
# Записываем <CLOSE> --------------------------------------------------------------------------
df.loc[len(df.index) - 1, '<CLOSE>'] = tick[3] # Записываем последнюю цену как цену close бара
# Записываем <HIGH> ---------------------------------------------------------------------------
if float(tick[3]) > df.loc[len(df) - 1, '<HIGH>']: # Если цена последнего тика больше чем high
df.loc[len(df.index) - 1, '<HIGH>'] = tick[3] # Записываем цену последнего тика как high
# Записываем <LOW> ----------------------------------------------------------------------------
if float(tick[3]) < df.loc[len(df.index) - 1, '<LOW>']:
df.loc[len(df.index) - 1, '<LOW>'] = tick[3] # Записываем цену последней сделки как low
# Записываем <VOL> ----------------------------------------------------------------------------
df.loc[len(df.index) - 1, '<VOL>'] += tick[4] # Увеличиваем объем
# Изменение типа колонок
df[['<DATE>', '<TIME>', '<VOL>']] = df[['<DATE>', '<TIME>', '<VOL>']].astype(int)
# Преобразуем столбец <TIME>, где нужно добавив 0 перед часом
df['<TIME>'] = df.apply(lambda x: zero_hour(x['<TIME>']), axis=1)
df.to_csv(target_file_range, index=False) # Запись в файл для одного тикового файла
# break
if __name__ == "__main__":
razmer: int = 250
ticker: str = 'RTS'
year_tick: str = '2022'
source_dir_tick: Path = Path(f'c:/data_quote/data_finam_{ticker}_tick') # Путь к ресурсному каталогу
target_dir: Path = Path(f'c:/data_quote/data_prepare_{ticker}_range') # Путь к целевому каталогу
# Создание списка путей к файлам с тиками
tick_files: list[Path] = list(source_dir_tick.glob(f'*{year_tick}*.csv'))
run(tick_files, razmer, target_dir)
</code>
Депозит 1.470.000 рублей.
Лимит на 1 акцию 210.000 рублей. Лимит на 1 сделку 30.000 рублей.
Текущая сетка динамической лесенки.
Газпром Long30.12 341,0 240 акций.
ГМКН Long30.12 22650 3 акции.
Лукойл Long05.01 6750 8 акций.
Новатэк Long12.01 1800 32 акции. Long 18.01 1600 19 акций.
Полюс Long30.12 12800 8 акций. Long17.01 11400 2 акции.
Роснефть Long30.12 595,0 100 акций.
Сбербанк Long30.12 294 270 акций. Long14.01 255 110 акций.
Текущая лесенка по акциям.
Всех приветствую!
Подвожу итоги за 2021 год, хоть и с опозданием. Решил не нарушать традицию. Пишу для себя, для анализа, рефлексии, разложить и сформулировать мысли — очень полезно. Итог -18,4%, счет проседал внутри года на 50,2%. От февральского максимума в +16,5% к минимуму октября -33,7%.
Торговля ведется трендовыми алгоритмами на валютном фьючерсе USD/RUB (Si).

1 квартал +7,9%
2 квартал -17,9%
3 квартал -14,3%
4 квартал +5,9%
Общий доход с учетом реинвестирования за 4 года составил 384%. Статистика по счету в Финаме теперь доступна только из личного кабинета. Ссылки на публичные счета отключили, неудобно.
