Постов с тегом "Python": 255

Python


Как работает Google Colab?

Решил попробовать Google Colab — и все модули в нем вроде есть, и громоздкие пакеты типа Анаконды ставить не надо.
Запустил простой скрипт на количество файлов и… ошибка.
В Анаконде все работает быстро и без проблем.

В чем причина? 
Как работает Google Colab?



Простой торговый робот для биржи Binance без индикаторов

Ссылка на код на github в телеграме

Бот исключительно в демонстрационных целях. Когда я писал своего первого бота мне не хватало чего-то такого.

Идею для торговой стрегии взял из книги Ларри Вильямса «Долгосрочные секреты краткосрочной торговли» и слегка упростил. Он называет это прорыв волатильности. В чём суть:
— считаем разницу между хай и лоу предыдущей свечи
— к цене открытия текущей свечи прибавляем разницу из предыдущего пункта, это и будет ценой для входа в позицию
— если цена достигла этой цены покупаем
— выход на октрытии следующего бара

Всё. Максимально просто.

Теперь ещё раз то же самое на примере.
— Хай прошлой свечи 251 USDT, лоу 248 USDT. Разница 3 USDT.
— Открытие текущей свечи 250 USDT. Цена входа 253 USDT.
— Как только цена достигла 253 USDT покупаем 0,1 BNB
— На следующем открытии свечи выходим. Если цена выше, то заработали что-то, если нет, то нет.

Торговая пара BNB/USDT с биржи binance.

В боте я рассматриваю минутный таймфрейм, чтобы можно было быстро посмотреть что и как работает.

( Читать дальше )
  • обсудить на форуме:
  • Binance

MetaTrader 5 build 2815: Доступ к стакану цен из Python, улучшения в отладчике и профилировщике

Выпущена новая версия платформы MetaTrader 5:

  1. Terminal: Добавлена возможность получения данных стакана цен через Python API.

    Три новые функции позволят легко и быстро получить данные для статистических вычислений и машинного обучения при помощи огромного количества готовых библиотек Python.

    • market_book_add — производит подписку терминала MetaTrader 5 на получение событий об изменениях в стакане по указанному символу.
    • market_book_get — возвращает кортеж из BookInfo, содержащий записи стакана цен указанного символа.
    • market_book_release — отменяет подписку терминала MetaTrader 5 на получение событий об изменениях в стакане по указанному символу.
  2. Terminal: Максимальная длина Push-сообщений увеличена с 256 до 1024 символов. Теперь вы можете отправлять гораздо больше информации на мобильные устройства из своих MQL5-программ.


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

Завершающий этап оценки привлекательности покупки акций! От возможных цен к доходностям!

Этот пост — последняя часть из цикла постов посвященных механистической оценке привлекательности инвестиций на основе фундаментальных показателей.

[1] Начало здесь: "Фундаментальный анализ тоже поддается автоматизации и вероятностному прогнозированию"
[2] Продолжение: "От прогноза фин показателей компании к прогнозам возможных цен на бирже"

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

Но давайте вкратце вспомним, основные промежуточные результаты, которые я получил в первых двух постах. Здесь немного уточню, чтобы расчеты были более корректны. Сама отчетность за 2014 год была составлена 23 марта 2015. Я, конечно, уже не помню, когда она была опубликована, поэтому буду считать что я смог ее посмотреть 31 марта 2015 и провести все те расчеты, которые я демонстрировал в предыдущих постах.



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

От прогноза фин показателей компании к прогнозам возможных цен на бирже

Продолжение статьи "Фундаментальный анализ тоже поддается автоматизации и вероятностному прогнозированию" и не только...

Теперь поговорим немного о мультипликаторах и их использовании в прогнозировании. Нужно понимать, что когда от статей отчетности мы переходим к ценовым мультипликаторам, мы ступаем на очень зыбкую почву. Частично о ловушках того же популярного мультипликатора P/E я уже писал в своем посте: "Дорого или дешево стоят акции на Московской Бирже? И ловушка показателя P/E!", поэтому трактовать моделирование нужно с осторожностью и немалой долей здравого смысла.

Вернусь к примеру по акциям ПАО МАГНИТ.
P/E Магнит до 2015 года
Мастодонты фондового рынка, такие как Грэм, хорошо понимая недостатки этого показателя советовали при его расчете и принятии решения использовать для среднюю прибыль за 5, 7 или 10 лет, позже Роберт Шиллер выбрал в качестве знаменателя 10-летнюю среднюю прибыль с поправкой на инфляцию. Если огрубить идею инвестиций на основании коэффициента P/E, то можно было бы вывести следующее простое правило:



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

Фундаментальный анализ тоже поддается автоматизации и вероятностному прогнозированию

Я на некоторых своих публичных вебинарах и лекциях рассказывал об элементах в моем подходе при оценке компаний с помощью фундаментального анализа. А также на свое курсе ТРИ КИТА ИНВЕСТИЦИЙ я подробно рассказываю, и показываю в Excel, как и что считать и принимать решение об инвестициях. Для удобства, многие расчеты у меня автоматизированы на Matlab и Python.

Мои оценки эволюционировали со временем, но начинал я как и многие с тех подходов, которые изложены в таких книгах как «Инвестиционная оценка» Дамодорана, «Стоимость компании» Коупленда, Коллера, Муррина и, конечно, «Анализ ценных бумаг» Грэма и Додда. Но мне всегда не давал покоя, тот простой факт, что все подходы, изложенные в этих книгах, не позволяют численно измерить вероятность сделанных оценок. Она неявным образом зашивается в прогнозы темпов роста и в ставки дисконтирования, которые используются для получения справедливой стоимости.

Поэтому я немного модернизировал подход, и сейчас называю его механической оценкой фундаментальных факторов и/или показателей финансово-хозяйственной деятельности предприятия. Помогает мне в этом понимание фундаментальных основ роста компаний, а также знание методов теории вероятности и математической статистики.



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

Автоматизация сигналов из 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'

Использование Машинного Обучения в торговых системах. Реализация.

    • 18 января 2021, 22:58
    • |
    • 3Qu
  • Еще
В топике Использование Машинного Обучения в торговых системах. Простейшее применение описаны принципы построение логики ТС с применением Машинного Обучения (МО). Вкратце опишем пути реализации.
Это уже посложней — нам понадобятся знания  Lua, С++ и Python.
Я предпочитаю ничего не делать сам, особенно, если для написания программы требуется изучение и реализация сложных алгоритмов. Зачем это делать, если можно использовать уже готовое. В современном программировании это один из основных принципов объектно-ориентированного программирования — берешь готовый объект и используешь. Если есть уже готовые библиотеки с нужными программами, то их и используем — сокращает время реализации, не надо беспокоиться об отладке, и много других плюсов. Извините, ленив и нелюбопытен — есть масса других интересных вещей, на которые можно потратить свое время.
Для начала пишем на C++ простенькую DLL для связи с Lua — шаблон проекта такой DLL вы можете найти в моих топиках. Нужный Вам код вам придется писать самим.

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

Торговля сеткой + машинное обучение, все pro and contra

    • 18 января 2021, 16:37
    • |
    • Fillio
  • Еще
Решил запустить небольшой проект по исследованию (назовем это так) мартингалов + МО. В сети ничего подобного не нашел.
Это не обязательно может быть мартин, это может быть простая сетка
В чем могут быть преимущества такого подхода: 
  • менее чувствителен к шуму
  • более устойчив на новых данных, как следствие
  • исследуются другие пространства признаков, нежели при простом дискреционнм трейдинге
  • ....
делитесь опытом, если таковой имеется. Ну а я предлагаю пока посмотреть\почитать про машинное обучение. Если оно вам надо. Удачи.



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

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