Избранное трейдера Diamond

по

Как бесплатно качать исторические котировки c tradingview с помощью python

Искал откуда можно скачать исторические котировки. Да так, чтобы все было в одном месте: и рынок РФ, и рынок США, и фьючерсы, и крипта. Да ещё и бесплатно.

Все эти котировки есть в tradingview, но скачать оттуда можно только в платном аккаунте.

Как бесплатно качать исторические котировки c tradingview с помощью python



Кстати, при регистрации дают пробный период на 30 дней на любом тарифе. Во время пробного периода можно купить платный аккаунт со скидкой до 60%.

Как бесплатно качать исторические котировки c tradingview с помощью python

( Читать дальше )

Делюсь Tinkoff OpenAPI

    • 25 июня 2021, 12:50
    • |
    • pmus
  • Еще
В рамках программы периодической раздачи подарков сообществу.
Для торговли через Тинькофф.Инвестиции сделал модуль для Python. Из полезного в нем — возможность работать, указывая напрямую тикер, без поиска figi инструмента. 
Лежит здесь: https://github.com/pmus/t_openapi

Как использовать:
Для запуска теста указываете свой ключ от Тинькова в файле settings.json и запускаете.
Для торговли импортируете модуль и используете его в своей программе.
Лицензия MIT.

Автоматизация сигналов из TradingView за 2 минуты. Websockets Python

from websocket import create_connection
import json
import random
import string
import re
import pandas as pd
import csv
from datetime import datetime
from time import sleep

def filter_raw_message(text):
    try:
        found = re.search('"m":"(.+?)",', text).group(1)
        found2 = re.search('"p":(.+?"}"])}', text).group(1)
        print(found)
        print(found2)
        return found1, found2
    except AttributeError:
        print("error")
    

def generateSession():
    stringLength=12
    letters = string.ascii_lowercase
    random_string= ''.join(random.choice(letters) for i in range(stringLength))
    return "qs_" +random_string

def generateChartSession():
    stringLength=12
    letters = string.ascii_lowercase
    random_string= ''.join(random.choice(letters) for i in range(stringLength))
    return "cs_" +random_string

def prependHeader(st):
    return "~m~" + str(len(st)) + "~m~" + st

def constructMessage(func, paramList):
    #json_mylist = json.dumps(mylist, separators=(',', ':'))
    return json.dumps({
        "m":func,
        "p":paramList
        }, separators=(',', ':'))

def createMessage(func, paramList):
    return prependHeader(constructMessage(func, paramList))

def sendRawMessage(ws, message):
    ws.send(prependHeader(message))

def sendMessage(ws, func, args):
    ws.send(createMessage(func, args))

def generate_csv(a):
    out= re.search('"s":\[(.+?)\}\]', a).group(1)
    x=out.split(',{\"')
    
    with open('data_file.csv', mode='w', newline='') as data_file:
        employee_writer = csv.writer(data_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    
        employee_writer.writerow(['index', 'date', 'open', 'high', 'low', 'close', 'volume'])
        
        for xi in x:
            xi= re.split('\[|:|,|\]', xi)
            print(xi)
            ind= int(xi[1])
            ts= datetime.fromtimestamp(float(xi[4])).strftime("%Y/%m/%d, %H:%M:%S")
            employee_writer.writerow([ind, ts, float(xi[5]), float(xi[6]), float(xi[7]), float(xi[8]), float(xi[9])])
            


# Initialize the headers needed for the websocket connection
headers = json.dumps({
    # 'Connection': 'upgrade',
    # 'Host': 'data.tradingview.com',
    'Origin': 'https://data.tradingview.com'
    # 'Cache-Control': 'no-cache',
    # 'Upgrade': 'websocket',
    # 'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
    # 'Sec-WebSocket-Key': '2C08Ri6FwFQw2p4198F/TA==',
    # 'Sec-WebSocket-Version': '13',
    # 'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56',
    # 'Pragma': 'no-cache',
    # 'Upgrade': 'websocket'
})

    
# Then create a connection to the tunnel
ws = create_connection(
    'wss://data.tradingview.com/socket.io/websocket',headers=headers)

session= generateSession()
print("session generated {}".format(session))

chart_session= generateChartSession()
print("chart_session generated {}".format(chart_session))

# Then send a message through the tunnel 
sendMessage(ws, "set_auth_token", ["unauthorized_user_token"])
sendMessage(ws, "chart_create_session", [chart_session, ""])
sendMessage(ws, "quote_create_session", [session])
sendMessage(ws,"quote_set_fields", [session,"ch","chp","current_session","description","local_description","language","exchange","fractional","is_tradable","lp","lp_time","minmov","minmove2","original_name","pricescale","pro_name","short_name","type","update_mode","volume","currency_code","rchp","rtc"])
sendMessage(ws, "quote_add_symbols",[session, "BINANCE:BTCUSDT", {"flags":['force_permission']}])

sendMessage(ws, "resolve_symbol", [chart_session, "symbol_1","={\"symbol\":\"BINANCE:BTCUSDT\",\"adjustment\":\"splits\"}"])
sendMessage(ws, "create_series", [chart_session,"s1","s1","symbol_1","1",300])

sendMessage(ws, "quote_fast_symbols", [session,"BINANCE:BTCUSDT"])

sendMessage(ws, "create_study", [chart_session,"st1","st1","s1","Volume@tv-basicstudies-118",{"length":20,"col_prev_close":"false"}])
sendMessage(ws, "quote_hibernate_all", [session])

#st='~m~140~m~{"m":"resolve_symbol","p":}'
#p1, p2 = filter_raw_message(st)
#sendMessage(ws, "resolve_symbol", [chart_session,"symbol_1","={\"symbol\":\"BINANCE:BTCUSDT\",\"adjustment\":\"splits\",\"session\":\"extended\"}"])
#sendMessage(ws, "create_series", [chart_session, "s1", "s1", "symbol_1", "1", 2])
#sendMessage(ws, "create_study", [chart_session,"st4","st1","s1","ESD@tv-scripting-101!",{"text":"BNEhyMp2zcJFvntl+CdKjA==_DkJH8pNTUOoUT2BnMT6NHSuLIuKni9D9SDMm1UOm/vLtzAhPVypsvWlzDDenSfeyoFHLhX7G61HDlNHwqt/czTEwncKBDNi1b3fj26V54CkMKtrI21tXW7OQD/OSYxxd6SzPtFwiCVAoPbF2Y1lBIg/YE9nGDkr6jeDdPwF0d2bC+yN8lhBm03WYMOyrr6wFST+P/38BoSeZvMXI1Xfw84rnntV9+MDVxV8L19OE/0K/NBRvYpxgWMGCqH79/sHMrCsF6uOpIIgF8bEVQFGBKDSxbNa0nc+npqK5vPdHwvQuy5XuMnGIqsjR4sIMml2lJGi/XqzfU/L9Wj9xfuNNB2ty5PhxgzWiJU1Z1JTzsDsth2PyP29q8a91MQrmpZ9GwHnJdLjbzUv3vbOm9R4/u9K2lwhcBrqrLsj/VfVWMSBP","pineId":"TV_SPLITS","pineVersion":"8.0"}])


# Printing all the result
a=""
while True:
    try:
        sleep(1)
        result = ws.recv()
        pattern = re.compile("~m~\d+~m~~h~\d+$")
        if pattern.match(result):
            ws.recv()
            ws.send(result)
            print("\n\n\n hhhhhhhhhhhhhhhhhhhhhh "+ str(result) + "\n\n")
        print(result)
        a=a+result+"\n"
    except Exception as e:
        print(e)
        break
    
generate_csv(a)
'https://github.com/rushic24/tradingview-scraper'

Опционный чат с Карлсоном.

    • 27 января 2021, 22:15
    • |
    • KarL$oH
  • Еще
Всегда интересно узнать то, что думают о тебе люди со стороны.

Лично я люблю критику и никогда на неё не обижаюсь.

Поэтому отвечу на каждый пункт по порядку:

Опционный чат с Карлсоном.

У человека столько позитивных качеств, что на его фоне я просто теряюсь, но всё же попробую ответить...

1. Кто я?

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

Закончил МГТУ им.Н.Э.Баумана, кафедра — «теория вероятности и математическая статистика».

Моя выпускная работа была под названием «Управление портфелем активов на основе VAR и SAR».

Любил теорию вероятности, теорию игр, случайные процессы, остальные предметы не любил, сдавал кое-как на трояки, но при этом в народе есть молва, что в бауманке 3 — это 5 в каком-нибудь шишкодробительном.

Мой препод, который вёл «Теорию игр», сидел на Forex'е, шарашил с 100-ым плечом, мечтал разбогатеть. С ним мы как раз и писали дипломную работу, он стал моим научным руководителем после 3-го курса.

( Читать дальше )

Волатильность и вероятность падения индекса Мосбиржи (IMOEX)

Продолжаю цикл о волатильности и вероятности падения различных инструментов Московской биржи и международных рынков. Предыдущий материал был про индекс S&P500 в качестве аналога которого рассматривали SPY ETF.

Вот этот материал:
smart-lab.ru/blog/670892.php

Сегодня на арене индекс мосбиржи (IMOEX). Итак, сначала историческая вероятность абсолютной волатильности от HIGH до LOW:

Волатильность и вероятность падения индекса Мосбиржи (IMOEX)

Если для SPY 10% дневной волатильности были пределом, до MOEX демонстрирует даже дни с 20% волатильностью (с рекордом более чем 25% — это кстати был лонговый день в окончании кризиса 2008-2009 гг.).

Существует 76,5% вероятность, что волатильность дня не выйдёт за пределы 2,5%. Что интересно, так это в отличии от SPY который демонстрирует Гауссовский спад от 0 и ниже с концентрацией основной массы дней в диапазоне от 0 до 1%, индекс Мосбиржи имеет большую вероятность пройти до 1,5 и даже до 2%, чем остаться от 0 до 1%:

Волатильность и вероятность падения индекса Мосбиржи (IMOEX)

А теперь направленная волатильность по закрытию рынка (close-open)/open:

( Читать дальше )

Совершенствуем Exponential Moving Average (EMA).

    • 16 января 2021, 00:04
    • |
    • 3Qu
  • Еще
На днях написал топик с описанием своей старой стратегии - Ретростратегия ретро ТС., снятой с эксплуатации в далеком 2014 г, которая, как оказалось, даже в упрощенном виде может работать и сегодня. Не собирался ее использовать, но в ходе обсуждений решил потратить на нее пару вечеров, восстановить по памяти до последней ее версии, и посмотреть, не стоит ли отложить текущие дела, и быстренько вывести ее на рынок.
В ходе восстановления пришлось также дорабатывать фильтры ФНЧ, простейшим из которых является ЕМА. Я дорабатывал свои фильтры, а вам покажу, что можно сделать с ЕМА, чтобы ее усовершенствовать и улучшить.
В комментариях к топику о ретростратегии упомянули некоего Jurik (jurikres.com) и его JMA. Думал, что он уже забыт, но, жив — курилка. То, что мы получим будет не хуже его индикаторов и подобрав периоды сглаживания можете сами в этом убедиться. Вообще, все поделки Jurikа — это где-то на уровне лабораторных работ студентов 4-го курса института по курсу ТАУиР. Наши сегодняшние тоже сложностью не отличаются, но может даже лучше, хотя бы потому, что не являются черными ящиками, и вы знаете как это устроено.

( Читать дальше )

Фича smart-lab

Если в адресной строке заменить «blog» на «vopros», то комментарии будут отсортированы по рейтингу.

Пример: Ситуация на текущий момент

Топ полезных фильмов об инвестициях и финансах

Топ полезных фильмов об инвестициях и финансах

Можно найти много подборок фильмов о бирже, но какие из них полезны для получения знаний? В CFA Institute опубликовали исследование, в котором 334 преподавателя финансов по 4-бальной шкале оценивают пользу самых известных кинопроизведений.  

1. Игра на понижение/The Big Short (2015)
Оценка: 3,59 

Экранизация книги Майкла Льюиса о крахе ипотечного рынка в США в 2007 году. В центре внимания управляющий хедж-фондом Майкл Бьюрри (Кристиан Бэйл), поставивший на падение стоимости ипотечных облигаций. В фильме есть не только увлекательный сюжет, но и Нобелевский лауреат Ричард Талер, рассказывающий о принципе работы рынка  субстандартных ценных бумаг.  

2. Ставка на триллион/Trillion Dollar Bet (2000)



( Читать дальше )

....все тэги
UPDONW
Новый дизайн