Всем привет! Много писать не буду, просто выкидываю статы роботов за 5 месяцев этого года, всё как всегда.
Si:
Всех приветствую!
Пост – призыв задуматься и может быть пересмотреть свои риски в сторону уменьшения. Волатильность возросла – это хорошо, но и риски повысились. К оценке рисков стараюсь подходить серьезно. Поэтому решил описать подход, которым руководствуюсь при управлении соотношением размера гарантийного обеспечения к депозиту.
В чем собственно проблема? Грузим депозит под завязку. Плечо 1 к 8. Оставляем чуток под просадку и в бой! Повезет если счет начнет расти, сформируется некий запас. А если события будут складываться не так удачно: просадка 40%, а следом огромный гэп. Что останется от депозита? Выход из ямы займет очень много времени.
Решение проблемы – создание резерва. Использую следующую пропорцию:
50% – это максимальное расчетное ГО, сумма максимальных лимитов по всем ботам. Оно может меняться от 0 до 50% в зависимости от: направления позиции (кто в лонг, кто в шорт, кто вне позиции), ММ алгоритма (фиксированный объем, плавающий), волатильности на рынке.
Все понимают, что у профессионального трейдера есть своя торговая стратегия. Вход в сделку, управление позицией и выход осуществляются исходя из четких правил. Такой подход позволяет контролировать свои риски и эмоции чтобы оставаться стабильным на протяжении долгого времени. Определение своей системы торгов может занимать очень много времени, требовать огромного опыта, но если вы в конечном итоге к ней не приходите, то вам нечего делать на финансовом рынке. Тем не менее, трейдинг всегда на слуху так как является привлекательным способом заработать деньги. Несмотря на то, что порог входа низкий, должно быть понятно, что этот бизнес не для всех, большинство уйдут с рынка после череды хаотичных результатов и постоянных эмоциональных горок.
Физические лица, которые не знакомы с финансовым рынком, но имеют на руках свободные деньги, обращают свое внимание на инвестиционные продукты от банков, брокеров и иных финансовых институтов. Предложения, которые есть на свободном рынке не могут похвастаться высоким уровнем доходности. Более интересные продукты существуют у фондов, к которым большинство населения нашей страны не имеет доступа так как минимальная сумма инвестирования может пытается торговать самостоятельно и находится в поиске идеального индикатора, иные ищут роботов. Инвестиционные продукты от финансового института, индикаторы и алгоритм — глобально, все это одно и тоже, но обладает разным уровнем комфорта. Почему же тогда такая большая разница в степени доверия к каждому из этих инструментов.
-- -- Выполнение действий с массивами. -- local pairs = pairs local type = type module(...) --- Создать копию массива (таблицы) -- @return копию массива (таблицы) function copy(array) local copy_array = {} if type(array) ~= "table" then return array end for k, v in pairs(array) do if type(v) == "table" then copy_array[k] = copy(v) else copy_array[k] = v end end return copy_array end --- Узнать, начинается ли индексация в массиве с нуля или с единицы. -- @return 0 или 1 function base(array) if array[0] ~= nil then return 0 else return 1 end end --- Вычислить число элементов в массиве. -- @return число элементов в массиве function size(array) local n = 0 for _, _ in pairs(array) do n = n + 1 end return n end --- Проверить пустой или нет массив. -- @return true/false function isEmpty(array) for _, _ in pairs(array) do return false end return true end --- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1. -- @return первый индекс массива, где ничего не записано function firstEmptyIndex(array) local i = 1 while array[i] ~= nil do i = i + 1 end return i end
По мотивам поста https://smart-lab.ru/blog/616708.php
Вот и мой велосипед на питоне для получения котировок с Мосбиржи
from urllib import request, error from json import loads import pprint class GetRawDataException(Exception): pass class GetPricesException(Exception): pass def get_prices(start_date: str, end_date: str, ticker: str) -> dict: """ Возвращает словарь: {дата:цена закрытия} """ req = 'https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/{}.json?from={}&till={}'.format(ticker, start_date, end_date) contents = get_raw_data(req) try: data = loads(contents) prices = {x[1] : x[11] for x in data['history']['data']} return(prices) except Exception as err: raise GetPricesException(err) def get_raw_data(req: str) -> str: """ Возвращает результат запроса к серверу Мосбиржи """ try: contents = request.urlopen(req).read() return(contents) except URLError as err: raise GetRawDataException(err) try: prices = get_prices('2019-05-23', '2019-05-30', 'GAZP') pprint.pprint(prices) except GetRawDataException as err: print('Error getting raw data: ', str(err)) except GetPricesException as err: print('Error parsing json: ', str(err))
Вывод данных происходит с помощью функции get_prices(). Механизм простой: формируется url для GET-запроса. Мосбиржа в ответ присылает json, из которого забираются нужные данные и выводятся на экран.
Есть и другие способы получения данных: yfinance, pandas-datareader и универсальный BeautifulSoup, ещё более универсальный Selenium. Но это уже совсем другая история...