Все понимают, что у профессионального трейдера есть своя торговая стратегия. Вход в сделку, управление позицией и выход осуществляются исходя из четких правил. Такой подход позволяет контролировать свои риски и эмоции чтобы оставаться стабильным на протяжении долгого времени. Определение своей системы торгов может занимать очень много времени, требовать огромного опыта, но если вы в конечном итоге к ней не приходите, то вам нечего делать на финансовом рынке. Тем не менее, трейдинг всегда на слуху так как является привлекательным способом заработать деньги. Несмотря на то, что порог входа низкий, должно быть понятно, что этот бизнес не для всех, большинство уйдут с рынка после череды хаотичных результатов и постоянных эмоциональных горок.
Физические лица, которые не знакомы с финансовым рынком, но имеют на руках свободные деньги, обращают свое внимание на инвестиционные продукты от банков, брокеров и иных финансовых институтов. Предложения, которые есть на свободном рынке не могут похвастаться высоким уровнем доходности. Более интересные продукты существуют у фондов, к которым большинство населения нашей страны не имеет доступа так как минимальная сумма инвестирования может пытается торговать самостоятельно и находится в поиске идеального индикатора, иные ищут роботов. Инвестиционные продукты от финансового института, индикаторы и алгоритм — глобально, все это одно и тоже, но обладает разным уровнем комфорта. Почему же тогда такая большая разница в степени доверия к каждому из этих инструментов.

--
-- Выполнение действий с массивами.
--
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. Но это уже совсем другая история...
Возможности новой версии
1. Реализован функционал быстрого фильтра в таблицах. Для активации \ деактивации быстрого фильтра используется пункт «Включить быстрый фильтр» \ «Выключить быстрый фильтр» контекстного меню, открываемого для заголовка самого левого столбца таблицы. Данный функционал позволяет фильтровать информацию в таблицах QUIK с наглядным отображением критериев фильтрации.