# Импортирование необходимых библиотек
import os.path
import pandas as pd
import numpy as np
import tensorflow as tf
from binance.client import Client
# Получение доступа к API биржи бинанс
api_key = 'Ключ'
api_secret = 'Секрет'
client = Client(api_key, api_secret)
# Сбор данных о криптовалютах и их изменении цен за определенный период времени
if os.path.exists("data.csv"):
bars = pd.read_csv("data.csv")
else:
data_file = open("data.csv", "w+")
data_file.close()
df = pd.DataFrame(client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "90 days ago UTC"))
df.to_csv("data.csv", index=False)
bars = pd.read_csv("data.csv")
#bars = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "180 days ago UTC")
# Подготовка данных для обучения нейросети
data = pd.DataFrame(bars,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume',
'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
'ignore'])
data.drop(columns=['close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'], inplace=True)
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)
data = data.astype(float)
# Создание модели нейросети
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu', input_shape=(5,)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(1)
])
MyOpt = tf.keras.optimizers.SGD(learning_rate=0.05, momentum=0.05, nesterov=True)
# Компиляция модели
model.compile(optimizer=MyOpt,
loss='mape',
metrics='accuracy')
# Обучение модели на подготовленных данных
model.fit(data.iloc[:-100], data['close'].iloc[:-100], batch_size=15, epochs=400, validation_split=0.2)
# Проверка качества работы нейросети на тестовых данных
model.evaluate(data.iloc[-100:], data['close'].iloc[-100:])
# Использование нейросети для принятия решений о покупке или продаже криптовалют на бирже бинанс
prediction = model.predict(data.iloc[-1:].values)
if prediction > data['close'].iloc[-1]:
print('Купить')
else:
print('Продать')
Проблема заключается в процессе обучения, во первых, если выдёргивать данные из файла (Если я всё правильно написал), то процесс обучения заходит в тупик и loss улетает, поэтому выдаётся nan, почему так происходит я не понимаю, пробовал разные методы и параметры оптимизации и разные функции потерь. Есть мысль что как то неправильно берутся данные из файла, так как если расскоментить bars = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "180 days ago UTC") То процесс обучения начинает хоть как то идти. Во вторых параметр метрики, в частности точность тут не подходит, я так понимаю, надо написать свой метод для определения точности. Активационную функцию выбрал для всех слоев relu, так как при при других опять же процесс обучения просто упадёт. Пробовал с разным кол-вом нейронов, выход один и тот же, максимум чего удалось добиться это loss = 1000 (Чего немного дофига)
Нижнюю часть, в частности проверка качества работы и использование нейронки можно пока выбросить.
Есть у кого идеи по размеру батчей, возможно мало эпох или ещё чего то не хватает. С переобучением не сталкивался, так что dropout и нормализацию батчей не использовал.
Хоть и так много данных для обучения, но оставлю ка я поменьше на тест
# Импортирование необходимых библиотек
import os.path
from keras import Sequential
from keras.layers import LSTM, Dense
import sys
import pandas as pd
import tensorflow as tf
from binance.client import Client
# Получение доступа к API биржи бинанс
api_key = 'ключ'
api_secret = 'секрет'
client = Client(api_key, api_secret)
# Сбор данных о криптовалютах и их изменении цен за определенный период времени
"""if os.path.exists("data.csv"):
bars = pd.read_csv("data.csv")
else:
data_file = open("data.csv", "w+")
data_file.close()
df = pd.DataFrame(client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "90 days ago UTC"))
df.to_csv("data.csv", index=False)
bars = pd.read_csv("data.csv")"""
bars = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "30 days ago UTC")
# Подготовка данных для обучения нейросети
data = pd.DataFrame(bars,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume',
'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
'ignore'])
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)
data = data.astype(float) / 255
train_data = data.iloc[:-20]
max_rows = train_data.shape[0] // 15 15
train_data = train_data.values[:max_rows].reshape((-1, 15, 11))
train_labels = data.iloc[:-20]
max_rows_labels = train_labels.shape[0] // 15 15
train_labels = train_labels.values[:max_rows_labels].reshape((-1, 15, 11))
"""input_layer = tf.keras.layers.Input(shape=(15, 11))
flatten_layer = tf.keras.layers.Flatten()(input_layer)
hidden_layer = tf.keras.layers.Dense(64, activation='relu')(flatten_layer)
output_layer = tf.keras.layers.Dense(11)(hidden_layer)"""
# Создание модели нейросети
#model = tf.keras.models.Model(inputs=input_layer, outputs=output_layer)
model = Sequential()
model.add(LSTM(128, batch_size=20, return_sequences=True, input_shape=[15, 11]))
model.add(LSTM(64, return_sequences=False))
model.add(Dense(11))
MyOpt = tf.keras.optimizers.SGD(learning_rate=0.1, momentum=0.1, nesterov=False)
# Компиляция модели
model.compile(optimizer=MyOpt,
loss='mse')
# Обучение модели на подготовленных данных
model.fit(train_data, train_labels, batch_size=20, epochs=150, validation_split=0.2)
print('Сохранить текущую модель в файл? Y/N')
answer=input()
if answer == 'Y':
model.save('model.h5')
else:
sys.exit()
>для обучения нейронки для предсказания движения курса и собственно, его предсказание
Ты соснёшь. По цене нельзя предсказать что с ней будет. НИКАК!!! СОВСЕМ!!! Нужен хотябы биржевой стакан.
P.S.Учил нейросетку по сотням картинок с графиками результат такой себе
Какие картинки, ты код мой смотрел? Он выдёргивает всю инфу о каждой свече и на основе 15 свеч делает примерный прогноз, плюс я переделал сетку под рекуррентную, она для предсказания идёт лучше, если хочешь, могу кинуть код, сам пообучаешь с разными данными и потестишь.
Хороший тред, тоже думаю этим заняться
>>389874
Можно, см анализ временных рядов
>Можно, см анализ временных рядов
Посмотрел. The Echo Forecast [LuxAlgo] слил мои 10$ во время тестов. Фигня всё это уровня квадрата ганна и прочей ереси
>могу кинуть код, сам пообучаешь с разными данными и потестишь.
Я лет пять назад это всё пробовал. И меня на это вдохновила статья где пробовали торговать используя нейронные сети. И статье этой уже тогда было несколько лет. Угадай пришёл ли кто-то из тех кто этим баловался к успеху?
оптимизатор замени с sgd на adam/adamw, он круче
learning_rate ставь намного ниже. например 0.001
модель говно, переделывай)
ошибка (loss) не ебу что это за mape, но обычно используют mse, bce и другие
batch_size ставь 32-64-128-256 и больше, насколько видеокарта выдерживает
epochs многовато, обычно обучают не больше 10
Да, вопрос сколько это заняло, потому что нормально обучить нейронку это очень трудно
Сейчас кину переделанную нейронку, та модель говно, согласен)
И оно не должно выдавать какой то запредельный доход уровня илона, такие нейронки скальпят неплохо, если сам скальпить не умеешь и лень сидеть смотреть котировки, где побольше можешь выцепить процентов, то лучше запустить этот код и пусть он работает за тебя, собирая по несколько процентов за пару часов
Также прикладываю скрины с графиками, второй скрин это позапрошлая модель, первый скрин это последняя обученная модель. На первом пике смещения не видно, но если брать часовой промежуток по oX, то там видно что она на пунктов 5, не меньше съезжает, если кто то знает причину и как это исправить, милости прошу в тред. Кстати в конце, если всё будет работать, могу скинуть все файлы, так как там есть ещё пара скриптов для теста нейронки на небольшом промежутке и файл для тестовой "Торговли", чтобы можно было видеть, зарабатывает хоть она, или страдает фигнёй.
# Импортирование необходимых библиотек
import datetime
from keras_self_attention import SeqSelfAttention
from sklearn.preprocessing import StandardScaler
import keras
import numpy as np
from keras.layers import LSTM, Dense, MaxPooling1D, Conv1D
import pandas as pd
import tensorflow as tf
from binance.client import Client
# Получение доступа к API биржи бинанс
api_key = 'ключ'
api_secret = 'секрет'
client = Client(api_key, api_secret)
bars = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "1080 days ago UTC")
# Подготовка данных для обучения нейросети
data = pd.DataFrame(bars,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume',
'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
'ignore'])
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)
#Стандартная нормализация
scaler = StandardScaler()
data = scaler.fit_transform(data)
data = pd.DataFrame(data)
train_data_blocks = []
train_labels = []
block_size = 15
for i in range(len(data) - block_size - 1):
train_data_block = data.iloc[i:i+block_size].values
train_label = data.iloc[i+block_size, [1, 2, 3]].values
train_data_blocks.append(train_data_block)
train_labels.append(train_label)
train_data = np.array(train_data_blocks)
train_labels = np.array(train_labels)
# Создание списков для сохранения значений метрики и функции потерь
train_losses = []
train_metrics = []
val_losses = []
val_metrics = []
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
# Создание модели нейросети
model = tf.keras.Sequential()
model.add(Conv1D(filters=150, kernel_size=4, activation='relu', input_shape=(15, 11)))
model.add(MaxPooling1D(pool_size=2))
model.add(SeqSelfAttention(attention_activation='sigmoid'))
model.add(keras.layers.MultiHeadAttention(num_heads=8, key_dim=64))
model.add(keras.layers.FeedForwardNeuralNetwork(64, activation='relu'))
model.add(keras.layers.MultiHeadAttention(num_heads=4, key_dim=32))
model.add(keras.layers.FeedForwardNeuralNetwork(32, activation='relu'))
model.add(Dense(3, activation='linear'))
MyOpt = tf.keras.optimizers.SGD(learning_rate=0.001, momentum=0.1, nesterov=True)
# Компиляция модели
model.compile(optimizer=MyOpt,
loss='mse',
metrics='accuracy')
# Обучение модели на подготовленных данных
model.fit(train_data, train_labels, batch_size=25, epochs=150, validation_split=0.3, callbacks=[tensorboard_callback])
model.save('model_ver4.h5')
Посмотрел я этот The Echo Forecast, непонятно чё написано и нахер надо, какой то сайт для рубки бабла не больше, хочешь рабочую нейросеть, иди читать мануалы, я вот сижу и разгребаю тонну документаций по разным библиотекам а также потихоньку разбираюсь в формулах, которые применяются в процессе создания нейросети, и, как видишь, понемногу получается всё лучше.
>model.save('model_ver4.h5')
Сколько по итогу весит модель? Уже можно пованговать курс?
Занимался такой хуйней, долго ковырял но к чему-то путному не пришел. Дам подсказку, о чем понял с опытом. Попытка предсказать движения курса лишь по свечкам обречена на провал, нейронка должна быть охуенно могучая, с вниманием и большим количеством параметров чтоб хоть что-то из этого понимать. Гораздо правильнее дать ей инструмент в виде всяческих показаний индикаторов, чтобы она не отвелкалась на бесполезные ложные корреляции
Хорошо, можешь поделиться подробнее о индикаторах, какие брать, в след версию тогда добавлю их тоже
Модель не весит нифига пока что, так как нейронов и слоёв очень мало, последняя версия на 3мб получилась, и там уже не просто гадание о прошлых значениях а какие то попытки предсказать нормально. Сейчас буду вертеть параметры и обучать пытаться, и чем меньше эпох и больше батч сайз тем тупее и прямолинейнее модель получается, так что сейчас чуть подкрутил их, посмотрим что выйдет
# Импортирование необходимых библиотек
import datetime
from sklearn.preprocessing import StandardScaler
import numpy as np
from keras.layers import Dense, MaxPooling1D, Conv1D, LSTM, Dropout
import pandas as pd
import tensorflow as tf
import keras.backend as K
import tensorflow_probability as tfp
from binance.client import Client
# Получение доступа к API биржи бинанс
api_key = 'ключ'
api_secret = 'секрет'
client = Client(api_key, api_secret)
bars = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "720 days ago UTC")
# Подготовка данных для обучения нейросети
data = pd.DataFrame(bars,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume',
'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
'ignore'])
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)
#Стандартная нормализация
scaler = StandardScaler()
data = scaler.fit_transform(data)
data = pd.DataFrame(data)
def autocorrelation_metric(y_true, y_pred):
residuals = y_true - y_pred
autocorr = tfp.stats.correlation(residuals[:, :-1], residuals[:, 1:])
return K.mean(autocorr)
block_size = 25
prediction_size = 1 # Изменено на 1, так как модель предсказывает только одну свечу
train_data_blocks = []
train_labels = []
for i in range(len(data) - block_size - prediction_size + 1):
train_data_block = data.iloc[i:i+block_size].values
train_label = data.iloc[i+block_size+prediction_size-1, [1, 2, 3]].values
train_data_blocks.append(train_data_block)
train_labels.append(train_label)
train_data = np.array(train_data_blocks)
train_labels = np.array(train_labels)
train_data = np.array(train_data_blocks)
train_labels = np.array(train_labels)
train_labels = np.expand_dims(train_labels, axis=2)
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
# Создание модели нейросети
inputs = tf.keras.Input(shape=(25, 11))
x = Conv1D(filters=300, kernel_size=6, activation='relu')(inputs)
x = Dropout(0.3)(x)
x = MaxPooling1D(pool_size=4)(x)
x = Dropout(0.3)(x)
x = tf.keras.layers.Attention()([x, x])
x = Dropout(0.3)(x)
x = LSTM(128, activation='tanh')(x)
x = Dropout(0.3)(x)
x = tf.keras.layers.Attention()([x, x])
x = Dropout(0.3)(x)
x = Dense(64, activation='relu')(x)
x = Dropout(0.3)(x)
outputs = Dense(3, activation='linear')(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
MyOpt = tf.keras.optimizers.SGD(learning_rate=0.001, momentum=0.1, nesterov=True)
# Компиляция модели
model.compile(optimizer='adam',
loss='mse',
metrics=[autocorrelation_metric])
# Обучение модели на подготовленных данных
model.fit(train_data, train_labels, batch_size=64, epochs=150, validation_split=0.3, callbacks=[tensorboard_callback])
model.save('model_ver4_10.h5')
Я брал AC, ADX, CG, Bollinger Bands, CCI, DX, MOM, OBV, RSI. Генерил для тренировочного датасета через npm либу "trading-signals". Учти что генерится очень долго, возможно придется выкинуть часть или взять пеку помощнее. В индикаторы надо прокидывать значения, я брал таким образом: находил на traidingview готовые стратегии по нужному индикатору и менял параметры, пока не получится наилучший график прибыли, на условном биткоине.
>Хорошо, можешь поделиться подробнее о индикаторах, какие брать, в след версию тогда добавлю их тоже
Я не он но единственное что работает довольно часто это пробой плотностей либо отскок от плотностей
Пробои и отскоки я и глазками вижу, занимался таким, для этого нейронка не нужна, сама соль в том что случаются они достаточно редко и не в таких обьёмных парах как btcusdt, так что тут мимо наверно, но приму к сведенью
Ок, попробую с разными вариациями, по результатам скину
Какой же там нормисный долбоеб на создателе, пиздец
Херовые результаты с этими данными, сейчас переписываю полностью входные и выходные данные а также переписываю скрипт для проверки профита, как всё заработает, закину
потом помню как нейросети появились видел обьявления таких ищущих спонсора
в общем анон просто забей
поверь ты сэкономишь много усилий и может быть денег
>я ещё в детстве помню обучал торговые системы на метатрейдере и тогда ещё понял что это туфта
>потом помню как нейросети появились видел обьявления таких ищущих спонсора
>в общем анон просто забей
>поверь ты сэкономишь много усилий и может быть денег
Зачем что-то объяснять клоуну, который не понимает базовых вещей: рынок создан для спекуляций, экономики как в учебниках в живой природе не существует.
>>412924
Классический лудаман.
>Нейросетевой заработок
Объясняю более простую схему: создаешь нейротяночку, используя наличный объем технологий, заводишь онлифанс с тематикой соответствующей твоим интерсам (как бы это кринжево не звучало), привлекаешь чертей и ищешь с кого сосать инсайды. Социал инжиниринг называется. А пытаться анализировать скачки которые зависят от рендомных спекулятивных флуктуаций - это шиза.
в общем там реально обучение подбором коэффициентов, прямо как нейросети, без дураков, проблема как всегда что это обучение к прошлому и вдобавок легко скатиться в переобучение, но как бы то ни было нет никакой гарантии что коэффициенты будут работать в будущем
вообще если уж развлекаться то имо перспективнее всего пытаться оптимизировать не точку входа а сколько допустимо потерять перед выходом то есть изучить волатильность рынка и выходить после какого-то среднего отклонения в ненужную сторону
но опять же - это не заработок, с совсем практической точки зрения имеет смысл покупка в долгосрок... ага а потом твое добро замороженное пылится в евроклире, лол
лучше блин устройся аналитиком
По твоей логике любой вид деятельности это спекуляция, продолжать не буду с тобой беседу, ты просто недалёкого ума, либо просто трясёшься так как сам сделать не можешь, выбирай
У меня есть бумаги в долгосрок, хочу просто с хомяков собирать кусочки на автомате пока они пытаются спекулей обыграть
Кстати интересно наблюдать за клоунами, которые говорят что это 147% нерабочая херня, когда нейросети могут высчитывать паттерны незаметные человеческому глазу, что повышает вероятность правильности результатов, чего только стоит тот реддит для ботов, где капчу решить только нейронки могут
>Зачем что-то объяснять клоуну, который не понимает базовых вещей: рынок создан для спекуляций, экономики как в учебниках в живой природе не существует.
Ещё аргументы?
>Ещё аргументы?
>сравнивает биологию и экономику
Всего один: твоя мамка не сделала аборт.
>хочу просто с хомяков собирать кусочки на автомате пока они пытаются спекулей обыграть
>Кстати интересно наблюдать за клоунами, которые говорят что это 147% нерабочая херня
Ебало своё в тред оформи, когда ты пишешь одновременно, что делаешь очередную кухню и тут же пишешь что ты лудоман верящий в СТРАТЕГИЮ. Ебать ты дебич.
>высчитывать паттерны незаметные человеческому глазу
Которые ты считаешь статичными, а они меняются от любой спекуляции.
>По твоей логике любой вид деятельности это спекуляция
Это твой тупорылый обобщам, а не мой. Я такое говорил? Покажи где я такое сказал. Я лишь сказал, что биржи в принципе являются местом для заработка спекулянтов, которые используют инсайды, что абсолютно ебет любые попытки в экономику. Точно так же, как если бы ты имел хоть базовое экономическое образование, а не дрочил под партой в аудитории, ты бы знал, что и по сей день никакая рыночная/эконоическая теория не применима фактически к российской экономики, из-за активных спекуляций крупнейших участников, которые просто в рот ебут все твои схемы. И все это прекрасно знают, и работа АНАЛитиков по большей части не давать реальные прогнозы, а красиво ссать в уши. Даже ты, уебище лживое: >>424347 тут признаешься, что делаешь программу, чтобы ссать в уши, и тут же говоришь что этого не делаешь. Ну кто ты после этого, мразотина, а?
Какая блять российская экономика... Ты тред читал? ебать ты аут полный, мне тебя жаль
Написал Ген алгоритм, переделал систему, на выход теперь идут 4 нейрона, то есть выход это вектор типа 0 0 0 1, 0 0 1 0, 0 1 0 0 и 1 0 0 0. Означают что цена упадёт больше чем на процент, упадёт меньше чем на процент, поднимется меньше чем на процент и поднимется больше чем на процент.
Арендовал сервер для прогонки Ген алгоритма, обошлось в небольшую копеечку, но дело сделано, получил наиболее приспособленную особь. Пока долблюсь с окончательной проверкой и тестом с профитом, но на первых парах выдавала 60-75% точных предсказаний, это не учитывая что просто повышение цены вместо повышения больше чем на 1% можно тоже считать верным прогнозом, в ближайшее время займусь скриптом для торговли, пока что на тестовом балансе, который предоставляет сам бинанс, выкладываю ген алгоритм для тех, у кого супер мощная пека, можете поиграться, поставить больше побольше популяцию или кол-во популяций
# Импортирование необходимых библиотек
import random
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np
from keras.layers import Dense, LSTM, Dropout
import pandas as pd
import tensorflow as tf
from binance.client import Client
# Получение доступа к API биржи Binance
api_key = 'ключ'
api_secret = 'секрет'
client = Client(api_key, api_secret)
bars = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_5MINUTE, "1 days ago UTC")
# Подготовка данных для обучения нейросети
data = pd.DataFrame(bars,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume',
'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
'ignore'])
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)
# Проверяем и преобразуем столбцы с числовыми значениями
numeric_columns = ['open', 'high', 'low', 'close']
for column in numeric_columns:
data[column] = pd.to_numeric(data[column], errors='coerce')
# DX (Directional Movement Index)
data['plus_dm'] = data['high'].diff()
data['minus_dm'] = data['low'].diff()
data['plus_dm'] = data['plus_dm'].fillna(0) # Заменяем пропущенные значения нулями
data['minus_dm'] = data['minus_dm'].fillna(0) # Заменяем пропущенные значения нулями
data['plus_dm'] = data['plus_dm'].where(data['plus_dm'] > 0, 0) # Заменяем отрицательные значения нулями
data['minus_dm'] = abs(data['minus_dm'].where(data['minus_dm'] < 0, 0)) # Заменяем положительные значения нулями
data['tr'] = data[['high', 'low']].diff(axis=1).max(axis=1)
data['plus_di'] = 100 (data['plus_dm'].rolling(window=14).sum() / data['tr'].rolling(window=14).sum())
data['minus_di'] = 100 (data['minus_dm'].rolling(window=14).sum() / data['tr'].rolling(window=14).sum())
data['dx'] = 100 (abs(data['plus_di'] - data['minus_di']) / (data['plus_di'] + data['minus_di']))
# MOM (Momentum)
data['mom'] = data['close'].pct_change(periods=10) 100
# Функция для вычисления RSI
def compute_rsi(prices, window=14):
deltas = np.diff(prices)
seed = deltas[:window + 1]
up = seed[seed >= 0].sum() / window
down = -seed[seed < 0].sum() / window
rs = up / down
rsi = np.zeros_like(prices)
rsi[:window] = 100. - 100. / (1. + rs)
for i in range(window, len(prices)):
delta = deltas[i - 1]
if delta > 0:
upval = delta
downval = 0.
else:
upval = 0.
downval = -delta
up = (up (window - 1) + upval) / window
down = (down (window - 1) + downval) / window
rs = up / down
rsi = 100. - 100. / (1. + rs)
return rsi
# Функция для вычисления Bollinger Bands
def compute_bollinger_bands(prices, window=20, num_std=2):
rolling_mean = np.convolve(prices, np.ones(window) / window, mode='valid')
rolling_std = np.std(prices, axis=0)
upper_band = rolling_mean + (num_std rolling_std)
lower_band = rolling_mean - (num_std rolling_std)
return upper_band, lower_band
# Получение массива с индикатором RSI
rsi = compute_rsi(data['close'].values)
upper_band, lower_band = compute_bollinger_bands(data['close'].values)
# Конвертация в DataFrame
rsi_df = pd.DataFrame(rsi, columns=['rsi'])
bollinger_bands_df = pd.DataFrame({'upper_band': upper_band, 'lower_band': lower_band})
# Добавление столбца с RSI в DataFrame data
data = pd.concat([data, rsi_df], axis=1)
data = pd.concat([data, bollinger_bands_df], axis=1)
# CCI (Commodity Channel Index)
typical_price = (data['high'] + data['low'] + data['close']) / 3
mean_price = typical_price.rolling(window=20).mean()
mean_deviation = abs(typical_price - mean_price).rolling(window=20).mean()
data['cci'] = (typical_price - mean_price) / (mean_deviation 0.015)
block_size = 20
train_labels = []
for i in range(len(data) - block_size):
prev_close = data.iloc[i + block_size - 1]['close']
curr_close = data.iloc[i + block_size]['close']
price_change = curr_close - prev_close
price_change_percentage = price_change / prev_close 100
if price_change_percentage > 1:
train_label = [1, 0, 0, 0] # Цена поднялась на 1% или более
elif price_change_percentage < -1:
train_label = [0, 0, 0, 1] # Цена упала на 1% или более
elif price_change_percentage > 0:
train_label = [0, 1, 0, 0] # Цена поднялась на менее чем 1%
else:
train_label = [0, 0, 1, 0] # Цена упала на менее чем 1%
train_labels.append(train_label)
train_labels = np.array(train_labels)
# Стандартизируем данные
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
train_data_blocks = []
for i in range(len(data) - block_size):
train_data_block = scaled_data[i:i + block_size]
train_data_blocks.append(train_data_block)
train_data = np.array(train_data_blocks)
train_data[np.isnan(train_data)] = 0
# Генетический алгоритм
# Гиперпараметры генетического алгоритма
population_size = 2
num_generations = 5
mutation_rate = 0.2
# Создание начальной популяции
def generate_population(population_size):
population = []
for _ in range(population_size):
individual = generate_individual()
population.append(individual)
return population
# Генерация случайного индивидуума
def generate_individual():
individual = []
num_layers = random.randint(3, 10)
for index in range(num_layers):
layer_type = random.choice(['dense', 'lstm'])
if layer_type == 'dense':
units = random.randint(16, 256)
activation = random.choice(['relu', 'sigmoid', 'tanh'])
layer = Dense(units=units, activation=activation)
individual.append(layer)
if random.random() < 0.5:
dropout_rate = random.uniform(0.1, 0.5)
dropout_layer = Dropout(rate=dropout_rate)
individual.append(dropout_layer)
elif layer_type == 'lstm':
units = random.randint(16, 256)
activation = random.choice(['tanh', 'sigmoid', 'relu'])
return_sequences = True
layer = LSTM(units=units, activation=activation, return_sequences=return_sequences)
individual.append(layer)
if random.random() < 0.5:
dropout_rate = random.uniform(0.1, 0.5)
dropout_layer = Dropout(rate=dropout_rate)
individual.append(dropout_layer)
batch_size = random.randint(1024, 8192)
validation_split = random.uniform(0.2, 0.5)
epochs = random.randint(8, 16)
set_lstm_return_sequences(individual) # Перемещение перед выводом слоев
# Вывод имен слоев и параметров return_sequences
print("Layers:")
for layer in individual:
if isinstance(layer, LSTM):
layer_name = layer.__class__.__name__
layer_return_sequences = layer.return_sequences
print(f"{layer_name} (Return Sequences: {layer_return_sequences})")
else:
layer_name = layer.__class__.__name__
print(layer_name)
print("")
individual.append({'batch_size': batch_size, 'validation_split': validation_split, 'epochs': epochs})
return individual
# Оценка приспособленности популяции
def evaluate_population(population):
fitness_scores = []
for individual in population:
model = create_model_from_individual(individual)
# Компиляция и обучение модели на тренировочных данных
batch_size = individual[-1]['batch_size']
epochs = individual[-1]['epochs']
validation_split = individual[-1].get('validation_split', 0.3)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics='accuracy')
model.fit(train_data, train_labels, batch_size=batch_size, epochs=epochs, validation_split=validation_split)
fitness = evaluate_model(model, validation_split)
fitness_scores.append(fitness)
return fitness_scores
# Создание модели на основе индивидуума
def create_model_from_individual(individual):
inputs = tf.keras.Input(shape=(20, 22))
if isinstance(individual[0], tf.keras.layers.Dense):
x = tf.keras.layers.Flatten()(inputs) # Преобразование в одномерный формат
x = tf.keras.layers.Dense(units=20 * 22)(x) # Преобразование размерности
x = tf.keras.layers.Reshape((20, 22))(x) # Изменение размерности перед LSTM
else:
x = inputs
for i, layer in enumerate(individual[:-1]):
x = layer(x)
x = tf.keras.layers.Flatten()(x) # Преобразование в одномерный формат
outputs = tf.keras.layers.Dense(units=4, activation='softmax')(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
return model
# Оценка модели (приспособленность индивидуума)
def evaluate_model(model, validation_split):
# Разделение данных на обучающую и валидационную выборки
train_data_1, val_data, train_labels_1, val_labels = train_test_split(train_data, train_labels, test_size=validation_split, random_state=random.randint(1, 100))
train_loss, train_accuracy = model.evaluate(train_data_1, train_labels_1, verbose=0)
val_loss, val_accuracy = model.evaluate(val_data, val_labels, verbose=0)
# Разница между точностью и потерями
diff_accuracy = 1 - (train_loss + val_loss) / 2
if diff_accuracy < 0:
return 0.01
else:
return diff_accuracy
# Выбор родителей для скрещивания
def select_parents(population, fitness_scores):
parents = []
total_fitness = sum(fitness_scores)
probabilities = [score / total_fitness for score in fitness_scores]
for _ in range(len(population) // 2):
parent1_idx = roulette_wheel_selection(probabilities)
# Поиск второго родителя с ненулевой вероятностью
parent2_idx = None
while parent2_idx is None or parent2_idx == parent1_idx:
parent2_idx = roulette_wheel_selection(probabilities)
parent1 = population[parent1_idx]
parent2 = population[parent2_idx]
parents.append((parent1, parent2))
probabilities[parent1_idx] = 0.0
probabilities[parent2_idx] = 0.0
print('select_parents')
return parents
def crossover(parents, population_size):
offspring = []
for parent1, parent2 in parents:
child1 = crossover_individuals(parent1, parent2)
child2 = crossover_individuals(parent2, parent1)
offspring.append(child1)
offspring.append(child2)
if len(offspring) > population_size:
offspring = offspring[:population_size]
print('crossover')
return offspring
def mutate(offspring, mutation_rate):
mutated_offspring = []
for individual in offspring:
mutated_individual = mutate_individual(individual, mutation_rate)
print('Layers for mutated individual:')
for layer in mutated_individual:
print(layer)
print('-----------------------------')
mutated_offspring.append(mutated_individual)
print('mutate')
return mutated_offspring
def get_best_individual(population, fitness_scores):
best_idx = np.argmax(fitness_scores)
best_individual = population[best_idx]
print('get_best_individual')
return best_individual
def roulette_wheel_selection(probabilities):
r = random.random()
cumulative_prob = 0.0
for i, prob in enumerate(probabilities):
cumulative_prob += prob
if r <= cumulative_prob:
return i
print('roulette_wheel_selection')
# Если не был выбран ни один родитель, вернуть случайный индекс
return random.randint(0, len(probabilities) - 1)
def crossover_individuals(parent1, parent2):
min_length = min(len(parent1), len(parent2))
crossover_point = random.randint(0, min_length - 1)
child = parent1[:crossover_point] + parent2[crossover_point:]
set_lstm_return_sequences(child)
print('crossover_individuals')
return child
def generate_random_layer():
layer_type = random.choice(['dense', 'lstm'])
if layer_type == 'dense':
units = random.randint(32, 256)
activation = random.choice(['relu', 'sigmoid', 'tanh'])
layer = Dense(units=units, activation=activation)
elif layer_type == 'lstm':
units = random.randint(32, 256)
activation = random.choice(['tanh', 'sigmoid', 'relu'])
return_sequences = True
layer = LSTM(units=units, activation=activation, return_sequences=return_sequences)
return layer
def set_lstm_return_sequences(individual):
lstm_indices = [i for i, layer in enumerate(individual) if isinstance(layer, LSTM)]
if len(lstm_indices) <= 0:
return individual
for i, layer_index in enumerate(lstm_indices):
if i == len(lstm_indices) - 1:
individual[layer_index].return_sequences = False
else:
individual[layer_index].return_sequences = True
return individual
def mutate_individual(individual, mutation_rate):
mutated_individual = individual.copy()
batch_size_mutated = False # Флаг для отслеживания применения мутации к batch_size
epochs_mutated = False # Флаг для отслеживания применения мутации к epochs
val_mutated = False # Флаг для отслеживания применения мутации к validation_split
for i, layer in enumerate(mutated_individual):
if isinstance(layer, dict): # Проверяем, является ли элемент словарем
if random.random() < mutation_rate:
if 'batch_size' in layer and not batch_size_mutated and not any(isinstance(l, dict) and 'batch_size' in l for l in mutated_individual): # Проверяем флаг и наличие словарей с batch_size
new_batch_size = layer['batch_size'] + random.randint(-64, 64)
new_batch_size = max(64, min(1024, new_batch_size))
layer['batch_size'] = new_batch_size
batch_size_mutated = True # Устанавливаем флаг
elif 'epochs' in layer and not epochs_mutated and not any(isinstance(l, dict) and 'epochs' in l for l in mutated_individual): # Проверяем флаг и наличие словарей с epochs
new_epochs = layer['epochs'] + random.randint(-4, 4)
new_epochs = max(16, min(64, new_epochs))
layer['epochs'] = new_epochs
epochs_mutated = True # Устанавливаем флаг
elif 'validation_split' in layer and not val_mutated and not any(isinstance(l, dict) and 'validation_split' in l for l in mutated_individual): # Проверяем флаг и наличие словарей с validation_split
new_val_split = layer['validation_split'] + random.uniform(-0.1, 0.1)
new_val_split = max(0.1, min(0.7, new_val_split))
layer['validation_split'] = new_val_split
val_mutated = True # Устанавливаем флаг
for i, layer in enumerate(mutated_individual):
if random.random() < mutation_rate:
if random.random() < 0.5:
new_layer = generate_random_layer()
if i < len(mutated_individual) - 1 and not isinstance(mutated_individual[i + 1], Dropout):
mutated_individual.insert(i + 1, new_layer)
elif len(mutated_individual) > 1:
if isinstance(layer, Dropout):
mutated_individual.pop(i)
elif i < len(mutated_individual) - 1 and isinstance(mutated_individual[i + 1], Dropout):
mutated_individual.pop(i + 1)
if len(mutated_individual) > 0 and isinstance(mutated_individual[-1], Dropout):
mutated_individual.pop(i - 1)
else:
mutated_individual.pop(i)
for i, layer in enumerate(mutated_individual):
if isinstance(layer, Dense):
units = random.randint(32, 256)
activation = random.choice(['relu', 'sigmoid', 'tanh'])
mutated_layer = Dense(units=units, activation=activation)
elif isinstance(layer, LSTM):
units = random.randint(32, 256)
activation = random.choice(['tanh', 'sigmoid', 'relu'])
return_sequences = layer.return_sequences
mutated_layer = LSTM(units=units, activation=activation, return_sequences=return_sequences)
elif isinstance(layer, Dropout):
rate = random.uniform(0.1, 0.5)
mutated_layer= Dropout(rate=rate)
else:
mutated_layer = layer
mutated_individual = mutated_layer
set_lstm_return_sequences(mutated_individual)
return mutated_individual
# Генетический алгоритм
def genetic_algorithm(population_size, num_generations, mutation_rate):
population = [generate_individual() for _ in range(population_size)]
best_fitness_scores = []
i = 0;
for generation in range(num_generations):
fitness_scores = evaluate_population(population)
best_individual = get_best_individual(population, fitness_scores)
best_fitness_scores.append(max(fitness_scores))
print(f"Generation {generation+1}, Best Fitness: {max(fitness_scores)}, Best Individual: {best_individual}")
np.save('best_individual_2.npy', best_individual)
parents = select_parents(population, fitness_scores)
offspring = crossover(parents, population_size)
mutated_offspring = mutate(offspring, mutation_rate)
population = mutated_offspring # Обновление списка population
best_individual = get_best_individual(population, fitness_scores)
best_fitness_scores.append(max(fitness_scores))
print(f"Generation {num_generations}, Best Fitness: {max(fitness_scores)}, Best Individual: {best_individual}")
return best_individual, best_fitness_scores
# Применение генетического алгоритма к модели
best_individual = genetic_algorithm(population_size, num_generations, mutation_rate)
# Сохранение лучших данных
np.save('best_individual_4.npy', best_individual)
>Которые ты считаешь статичными, а они меняются от любой спекуляции.
Мой молодой дружок, если бы ты немного учил матчасть то знал, что паттерны как раз и создаются спекуляциями, а не меняются от них, в общем подучи экономику хотя бы чуть чуть прежде чем срать сюда, от тебя тухлятиной старой пахнет
>мям ну я его назвал рибёнком, ну чиво он меня пролдолжает чморить, а? ну я больсой мальчик! я СТРАТЕГИЮ плидумываю
Норм тема кста. Если что местные и законтрибьютят чего
Средняя точность предсказания 77%, сейчас проверяю на тестнет binance. Один минус, тут нет стоп лоссов, в коде их прописал, но возвращает ошибку, так что тестирую пока без них, думаю дня два подержать и отправить на реальное поле смотреть что получится
Ну это ещё пара дней, пока нормальный код стайл забабахаю и комментарии оставлю везде + readme составить, в общем в процессе
При этом предсказание повышения 50%, предсказание понижения 80%, это примерно
Привет, пытаюсь сделать то же самое но мой лучший результат - 55%, можешь пожалуйста гидхабом поделиться или дать совет какой.
Заранее спасибо
Дополнение к тому что написал:
Тоже сделал нейронку с эволюцией, но взял больше индикаторов и взял их по разным временным промежуткам, так же взял больше данных, но точность все равно говно (55%)
Я не понимаю что не так, был бы рад обсудить код, обменяться идеями, если у тебя или анонов есть время/желание - пишите @howmanyeyes
Реклама нейрокухни, репорт. Вообще весь тред гнилой.
а в чем реклама то?
и есть ли похожие треды где-то?
!!!ОСТОРОЖНО НЕЙРОКУХНЯ!!!
Я в данный момент занимаюсь правками и написанием readme.md для гитхаба, как всё будет готово, я вкину сюда ссылку на весь проект.
Реклама чего? что я код пишу уже пол месяца? или может я деньги требую за это? нет, я просто делюсь инфой, которую сам копаю, кто то мб поможет, кто то просто возьмёт потестить, реф ссыль на бинанс я не оставляю, мне не надо. Уже любая доброта в этом мире считается наёбкой и рекламой, этот мир прогнил
Слишком хорошие цифры у тебя получились. Либо ты где то ошибся в обучении (например в нормализации/стандартизации данных) и в боевом режиме соснеш, либо ты гений.
Какую модель используешь?
Вот я надеюсь что не соснул в стандартизации) Прошлые цифры были реальней, но я тут просто эпох 50 поставил + ещё dropout слоёв нету, ген алгоритм выдал модель с двумя LSTM слоями, сколько в них нейронов я хз. Возможно она переобучилась и сейчас на тестах даст мне пизды, так что ждём
BTCUSDT свечи по 5 минут, на них же тренировал и на них буду работать
Там же вроде всегда плавный тренд без резких обвалов?
И чье апи используешь? На бинансе сейчас как-то стремно
Трейдить крипту интрадей плохая идея, весь профит сожрет комиссия. Тренировать на таком можно, но трейд должен быть максимум раз в час
Вопрос не в частоте, а в профите, который должен быть выше комиссии (хотя это очевидно). Можно хоть по 0,2% забирать и это норм
Я как раз api с бинанса и юзаю) Только через библиотеку binance python, там полегче чуть чуть
Согласен, но тут ещё вопрос в колве вливаемых денег, так как чем больше вольёшь, тем больше она сможет отбивать и обьём торгов будет большой, там и глядишь комиссия меньше будет если обьём за месяц набьёшь
https://github.com/FreeTile/Binance
!ВНИМАНИЕ!
Код на данный момент говнище, куча костылей, информации выводится дохера, даже та, которая не нужна, плюс проект не обновлён, код старый пока что, сам допиливаю. Зато тут есть полностью расписанный readme, правда на английском, писал сам проверял дохера времени, но там всё интуитивно понятно.
По поводу торгов, комиссия да, пока сжирает много, но тут ещё факт в том что закинул минималку, из за чего она спотыкается буквально обо всё (в ограничения баланса) + из за этого не работает откуп после нескольких продаж и наоборот, пришлось закомментить эти строки. Позавчера шла норм, почти 10% сделала, сегодня такой пиздец на бирже, шо даже я не могу хоть примерно предсказать чё будет дальше, иногда цена просто в коридор встаёт и ни туда ни сюда, благо нейронка тут умнее и просто предсказывает повышение, ничего не покупая, так как баланс не позволяет) Стоп лоссы ставит нормально, правда иногда всё равно идёт такое пробитие, что не успевает его выставить, тут я думаю try/except применить, чтобы не умирала в таких случаях. В общем работаю как могу, кому интересно код наверно в воскресенье обновлю, можете глянуть, может захотите оптимизировать (не дай боже, вы там глаза нахуй сломаете)
Базу глаголишь, суть программ для торговли в получении пассивного дохода. Даже 0.01% в день уже больше чем ебучие вклады в банке по 7% годовых)
Зачем оно пытается докупить один биток или продать все что сверху одного битка?
Файл не обновлён, я его немного переписал, но суть этого куска также есть. Если нейронка несколько раз покупает и некст предикт будет на снижение, то она на этих хаях продаёт весь обьём что купила до этого. И наоборот с продажей, на лоях докупает всё что продала
А, не, это вообще про другое, это ещё вообще со старого кода функция, нужна была для тестовой сети, в принципе делает то же самое, что я написал ответом выше, только для тестового баланса где 10000 USDT и 1 BTC
Торгует то да, но вот раньше прибыль была, сейчас я немного код перекопал и сеть заново обучил, и получается пока трешатина какая то, идёт в минус. Сегодня докопаю его и сделаю пуш в репоз, следите там за апдейтом
По итогу соснешь
Спасибо большое!
К сожалению оказывается что либо я тупоголовый, либо не умею читать, можешь пожалуйста помочь с использованием?
Согласно Readme запустил LoadData, получил файлы "train_data.npy" и "train_labels.npy", запустил Average_shadows, новых файлов не появилось, старые не изменились.
Запустил Genetic_Algorithm, появился файл "best_individual.npy", другие не менялись, НО выскочила ошибка:
Traceback (most recent call last):
Файл "C:\Users\SSD500GB\Desktop\bot_dvach_2\Genetic_Algorithm.py", строка 361, из <module> np.save('best_individual.npy', best_individual)
Файл "<__array_function__ internals>", строка 200, из save Файл "C:\Users\SSD500GB\AppData\Local\Programs\Python\Python310\Lib\site-packages\numpy\lib\npyio.py", строка 521, из save arr = np.asanyarray(arr)
builtins.ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.
Как ее решить и что она вообще значит, я так и не понял.
Далее пробовал запускать TrainBestModel, но каждый раз она выдает одни и те же цифры (хотя несколько раз менял конфиг, уменьшая/увеличивая кол-во данных, поколений и нейронок в поколении) Ощущение будто TrainBestModel каждый раз сама подгружает данные, и на них уже тренируется.
Так и не смог получить новую версию модели. Я что то делаю не так? Может просто есть ошибки в коде? Или я не в том порядке запускаю все? Опирался на инструкцию из ReadMe, свой конфиг прикрепляю ниже. Если тебе проще связаться и лично ответить на мои вопросы, то я только рад: @howmanyeyes
Ключ и секрет без кавычек указываются, всё в readme без кавычек, убери их и ещё раз все файлы прогони, вообще удивительно что у тебя ошибки на load data не было, и да, как уже написали, не палите свои ключи, мы на двачах
>>445669
Ключи поменял, файл Trading работает (правда уже на 1% в минус ушел), стала вылетать новая ошибка:
Traceback (most recent call last):
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\eager\polymorphic_function\autograph_util.py", строка 41, из autograph_handler return api.converted_call(
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\autograph\impl\api.py", строка 439, из converted_call result = converted_f(effective_args, kwargs)
Файл "C:\Users\SSD500GB\AppData\Local\Temp\__autograph_generated_fileh6i3j33c.py", строка 15, из tf__train_function retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\autograph\impl\api.py", строка 377, из converted_call return _call_unconverted(f, args, kwargs, options)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\autograph\impl\api.py", строка 460, из _call_unconverted return f(args)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", строка 1322, из step_function outputs = model.distribute_strategy.run(run_step, args=(data,))
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\distribute\distribute_lib.py", строка 1673, из run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\distribute\distribute_lib.py", строка 3250, из call_for_each_replica return self._call_for_each_replica(fn, args, kwargs)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\distribute\distribute_lib.py", строка 4048, из _call_for_each_replica return fn(args, kwargs)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\autograph\impl\api.py", строка 690, из wrapper return converted_call(f, args, kwargs, options=options)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\autograph\impl\api.py", строка 377, из converted_call return _call_unconverted(f, args, kwargs, options)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\autograph\impl\api.py", строка 459, из _call_unconverted return f(args, kwargs)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", строка 1303, из run_step outputs = model.train_step(data)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", строка 1080, из train_step y_pred = self(x, training=True)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\utils\traceback_utils.py", строка 70, из error_handler raise e.with_traceback(filtered_tb) from None
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\input_spec.py", строка 298, из assert_input_compatibility raise ValueError(
builtins.ValueError: Input 0 of layer "model" is incompatible with the layer: expected shape=(None, 20, 22), found shape=(None, 30, 22)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
Файл "C:\Users\SSD500GB\Desktop\bot_dvach_3\Genetic_Algorithm.py", строка 358, из <module> best_individual = genetic_algorithm(population_size, num_generations, mutation_rate)
Файл "C:\Users\SSD500GB\Desktop\bot_dvach_3\Genetic_Algorithm.py", строка 338, из <module> fitness_scores = evaluate_population(population)
Файл "C:\Users\SSD500GB\Desktop\bot_dvach_3\Genetic_Algorithm.py", строка 107, из <module> model.fit(train_data, train_labels, batch_size=batch_size, epochs=epochs, validation_split=validation_split)
Файл "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\utils\traceback_utils.py", строка 70, из error_handler raise e.with_traceback(filtered_tb) from None
Файл "C:\Users\SSD500GB\AppData\Local\Temp\__autograph_generated_fileh6i3j33c.py", строка 15, из tf__train_function retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
builtins.ValueError: in user code:
File "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", line 1338, in train_function
return step_function(self, iterator)
File "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", line 1322, in step_function
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", line 1303, in run_step *
outputs = model.train_step(data)
File "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\training.py", line 1080, in train_step
y_pred = self(x, training=True)
File "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\utils\traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\SSD500GB\AppData\Roaming\Python\Python310\site-packages\keras\src\engine\input_spec.py", line 298, in assert_input_compatibility
raise ValueError(
ValueError: Input 0 of layer "model" is incompatible with the layer: expected shape=(None, 20, 22), found shape=(None, 30, 22)
Trading пока не запускай, там надо ещё переработать немного, а то он говняк начинает делать, просто туда сюда гоняет валюту)
По поводу ошибки в GA, тут у тебя ожидается вектор размерностью 20 22, а подаётся 30 22, не менял block size в config.txt? Если менял, то поставь пока назад 20
Объясни пожалуйста, зачем нужен файл Genetic_Algorithm, если он в итоге выплевывает "best_individual.npy", который больше НИГДЕ не используется?
По контексту догадываюсь что Genetic_Algorithm должен выплевывать "best_individual.pkl", но как бы я ни старался, этого не происходит. (Пробовал в тупую разрешение файла менять, заставлять сохранять в нужном формате, ждать конца работы программы, прерывать ее выполнение насильно). В любом случае файла либо нет, либо (после смены разрешения) он неюзабелен. Что я делаю не так? Помогите пожалуйста.
Бля, я что ли расширения наебнул или что, он должен выплёвывать файл с расширением которое принимает trainbestmodel. Глянь что в trainbestmodel вначале загружается, pkl или npy, я чуть позже сам проверю всё ещё раз, с последним коммитом вроде всё работало
Переписал немного ген алгоритм, добавил пикл и сохраняю в pkl, там всё через него должно было работать, видимо я с того момента как нейронку обучил хер забил, сейчас попробуй, если что отпиши
Вот теперь все работает, спасибо тебе анон. Только несколько вопросов появилось.
Зачем еще раз (в TrainBestModel) тренировать модель, если ее до этого уже натренировали?
Последняя модель на гите торгует на каком интервале и какая у нее точность?
И надо ли тебе логирование, которое скинул выше?
Тестирую сейчас торговлю, и либо с кодом проблема, либо я чего то не понимаю.
Нейронка работает по следующему алгоритму:
1) Определить пойдет ли цена вверх (допустим идет)
2) Обменять USDT на BTC
3) Создать стоп-лосс
4) Подождать 15 минут
5) Закрыть все ордеры
6) Начать шаг 1
Если я правильно читаю код и интерпретирую историю ордеров, то выходит что нейронка не фиксирует прибыль и надеется на то что предсказания будут меняться (т.е. ввер-вниз-вверх-...)
Если это так и задумано, то укажи что торговать следует от 100$, если нет, то пиздец, надо переделывать переделкой сейчас занимаюсь
В Ген алгоритме фиксированные 10 (вроде) эпох, по которым вычисляется наиболее приспособленная модель для тренировки, так что там сохраняется не натренированная модель, а файл с конфигурацией модели, то есть сколько слоёв, какие слои, сколько в них нейронов, размер батча и так далее, а в trainbestmodel ты уже выгружаешь эту лучшую модель и тренируешь её не на 10 эпохах а на 20+, то есть чтобы обучилась лучше, но тут опять же нужно следить на переобучением. В принципе можно сделать так чтобы это всё происходило в ген алгоритме, но тогда при отключении света или просто краше, чем бы он не был вызван, у тебя сохранится последняя плохо обученная модель. Можно сделать так чтобы каждая модель в ген алгоритме проходила 20+ эпох, тогда он будет работать лучше и в любом случае сохранит последнюю модель обученную, но тогда время работы возрастёт многократно, могу создать отдельную ветку на гитхабе где будет реализован только ген алгоритм сразу с большим кол-вом эпох и сохранением лучшей модели, а не её конфигурации
Она должна фиксировать прибыль если след свеча по предсказаниям пойдёт в обратную сторону. То есть допустим верх-верх шло, она два раза закупилась, если следующее предсказание вниз, то она продаёт всё что купила до этого, и наоборот. Стоп лоссы ставит для случая если ошиблась с предиктом. Да, там нужно немного доработать стоп лосс, чтобы он выставлялся на весь обьём, что до этого скупила/продала нейронка, тогда всё будет работать лучше, и да, чем больше залито, тем лучше в теории будет торговля, но это не точно, модель всё таки не идеальная, на повышение предсказания идут хуже чем на понижение, плюс надо поиграться с временем свечей и понять при каком наименьшем промежутке волатильности достаточно + нейронка достаточно точна для получения ощутимой прибыли. В общем тут ещё есть над чем работать, самое главное что оно уже выполняет главные действия без лютых затупов.
Продолжение ответа
На гите сейчас лежит код для 15 минутных свеч, модель соответственно для этого же промежутка вроде БЛять нет, я еблан сори, ну там они не очень различались, закоммитил модель для 15 минут) Сразу говорю что предсказывает херово, пока разбираюсь с trading.py, у кого есть ресурсы можете методом проб и ошибок найти наиболее волатильные промежутки свеч и ебануть для них ген алгоритм
Логирование на данный мне не нужно, но можешь вкинуть, кому то может понадобится, я сам просто вывожу в текстовики инфу которая мне нужна позарез, остальные цифры это уже для тонкой подгонки нужны будут в будущем
Может есть смысл на альтках тренировать и использовать? Там же волатильности дохуя
ОП, ты молоток.
Нынче еще в моде предсказания проводить исходя из гипотезы, что прогноз это трехмерная поверхность в времени, например цена-объем-количество сделок.
Да, думаю что есть, биток просто беру за его обьём, однако можешь попробовать на альтах, если если они хотя бы год существуют, а то мало данных для обучения будет, модель можно использовать наверно ту же что и для пары BTCUSDT
Спасибо, ну я чисто делаю что могу и выкладываю для тех, кому интересно, может поможет кому то. На счёт гипотезы, я про такую не слышал, но звучит интересно, можешь кинуть ссылку на какой нибудь источник об этом? Может смогу что нибудь придумать чтобы усовершенствовать код
слева на право - баланс, изм. относительно предыдущего баланса, изм. относительно начального баланса
Всего профит с бота - 0.51%
Профит если держать биток - 0.29%
Т.е. бот хоть хуево и криво но работает
Тут не совсем правильные испытания. Учитывай контекст рынка - битов в тренде роста\падения или там боковик. На росте даже заведомо проигрышная стратегия может показывать профит
Учитывая что в коде есть много косяков, это удивительно что он не уходит потихоньку вниз, у меня есть идея разработать интерфейс чтобы высчитывать наиболее пригодные к торговле пары посредством среднего между волатильностью и кол-вом данных для обучения, и затем брать модель и обучать её по быстрому на этом альте, после чего отправлять, и допустим делать все эти телодвижения в 00 00 GMT0, но это я сделаю чуть попозже, одновременно просто два проекта разрабатываю, пока этот на опенсурс выложил, копаюсь в другом, в ближайшее время возьмусь за допил
>>450745
Кстати верно, если модель хорошо предсказывает падения и биток пойдёт вниз, то это не значит что модель верная, нужно брать больше выборку с большим кол-вом пар. У меня допустим модель шла в минус когда у битка боковик был
https://www.researchbank.ac.nz/bitstream/handle/10652/5956/Borna,%20K.%20(2022).pdf
Ебать приколюха, сегодня почитаю днём, спасибо большое
Ош>>452358
Проблема в кол-ве при отправки ордера, в теории всё должно работать, если ты не альткойны выбрал, для них нужно немного скрипт переработать. Если запускаешь прям из коробки со своим апишником, то должно канать всё
Не, битки. Оно закупает на 10%, но при этом возвращает ошибку. Возможно это лишь в каком-то конкретном кейсе, но я тогда очень невезуч.
Была такая проблема на стадии разработки, на данный момент не возникало вообще такого рода проблем
Она и сейчас есть, даже если удается запустить. NOTIONAL либо ошибка с суммой ордера вылетает и скрипт крашится. Максимум у меня получилось (спасибо рандому) трейдить 5 часов без краша. Тестить невозможно, как пофиксить не понимаю, пробовал менять сумму трейдов на фиксу в 10.1$, тогда чаще вылетает ошибка мин. ордера, что еще делать не понимаю.
Вроде как, если я не ошибаюсь, эта ошибка завязана на размере ордера. Возможно вы пытаетесь запускать скрипт с большим количеством денег на спот акке. Я для теста пока 100 баксов закинул чего видимо мало и у меня постоянно это вылетает.
На сотне как раз должна реже вылезать, могу кинуть файл мой, у меня +-работает @howmanyeyes
Ты ОП? Если там важный фикс, то лучше же просто в гит закинуть, даже если не оп можно пул реквест сделать. Алсо, попробую сам понять в чем проблема и фиксануть и закинуть реквест. Я не питонист, но постараюсь.
Я хотел изначально запилить take profit ордеры, но потом забил, так как в таком случае она может обрезать большую часть прибыли, решил оставить только стоп лоссы, но опять же, посмотри на практике, может реально в них смысл есть
>>453496
>>453499
Эта ошибка у меня была вначале разработки, когда неправильное кол-во отправлялось, так как мы только вначале основного скрипта вытаскиваем цену битка, то при отправке заявки она может упасть и вместо заявки на 10 баксов, мы отправим заявку на 9.9, от чего бинанс вернёт ошибку, а также поставил чтобы цена была на 10.1 баксов, а сравнивалась с балансом 10.15 так как тоже корреляция валюты много решает
Всё это по хорошему фиксится просто запрашиванием цены при таких важных операциях, допустим чекаем баланс, если больше 10, то запрашиваем цену койна и высчитываем кол-во на 10 баксов и сразу же отправляем.
Кароче сейчас буду чистить код, вносить поправки, как закончу вкину в гит
Это уже оп, просто галка слетела, а ставить забываю)
А у тебя ipynb для нейронки есть или ты в таком формате сразу нейронку пилил? Я хочу ее попробовать улучшить. Если нет то тогда могу запилить и закинуть в репу с комментариями если разбирусь
Я не оп, фикс, как оказалось, работает по случайности. В гите не разбираюсь, позже может займусь еблей с ним.
Вообще общее впечатление от нейронки странное: вроде и предсказывает верно (чисто за 5 дней наблюдений и тестирования), а баланс все равно уменьшается. Мое предположение в комиссиях: они дохуя высокие. Чтобы нейронка заработала хоть что то она должна покрыть комсу 2 раза (допустим цена идет вверх, тогда на покупку и на последущую продажу), получается 0.075%*2 (0.075 тк кому в BNB плачу), т.е. 0.15%, я ставил тейк профит на 0.2%, чтобы работать хотя бы не в минус, 0.2% от цены битка это ~60$ что для 15-ти минутных свечей примерно дохуя. Остается два варианта: переобучать для часовых свечей либо же перелопачивать код для фьючерсов. Оп, если у тебя есть силы и тот арендованный сервер, затрень пожалуйста модель на час, буду очень благодарен. Я пока что займусь переработкой под фьючерсы или поищу какие то други способы решения проблемы
А я говорил что интрадей крипта это такое себе. И вообще надо бы обучить сетку на каком-нибудь высоковолатильном альткоине. Кстати надо еще рассмотреть варианты с шортами
>0.075%
Кек
Когда торгуешь фьючерсы с комсой в 45 копеек за контракт..
Надо бы, но я не оп, крутого сервера у меня нет, если задонатите то обучу на любой паре
Если кто еще гадает откуда тут десятые процента - ответ прост: комиссии ебаные
>>453948
Ебался с написания поста над фьючерсами, они выебали меня. Перешел на пару BTCTUSD, в душе неебу что за тюсд такой, но должен обозначать доллар, график у него такой же, а комиссия нулевая. Поставил профит ордер на 0.01%, за день должно набегать почти 0.1%, если предсказания будут верны.
Извините что оффтоп, но пиздец я заебался с этим сраным ебучим блять ботом, все соки из меня выпил, всю неделю вместо подготовки к комсе готовлю суп из своих глаз. Тем не менее спасибо ОП'у большое, давно я так не увлекался чем - то, правда, спасибо тебе огромное
Вот как выглядит ~6-8 часов трейдов, на описаном профит ордере. Хуита, сейчас фиксировать буду только в конце свечи.
Для торговли по часовому графику вообще не требуется много ресурсов, свечей не так много будет даже за 5 лет, нужно брать больше промежуток, плюс если на альткойне будем работать, там вообще может быть данных только за последние пару лет, смотря когда она выпустилась.
По поводу фьючерсов по факту код тот же самый, немного подправить чтобы он работал с фьючами а не со спотом, ну и изменить разрешения api в самом бинансе, сейчас буду исправлять базу в trading.py
Можете предложить пару, с которой можно попробовать поторговать и промежуток, который хотите потестить, у меня на бинансе залито, могу протестировать, поправить код и посмотреть как работает
>>454351
Ну у тебя хотя бы не рулит вниз, у меня при низкой волатильности комса жрала деньги, либо сейчас сам сгорю и на фьючи перейду, либо буду брать другую пару
Ещё раз повторюсь, сервер арендуйте только для генетического алгоритма, trainbestmodel.py робит даже на самых слабых видюхах, особенно если будете брать свечи от получаса и больше, там данных меньше, модель обучится гораздо быстрее. Если всё таки нужен ген алгоритм, можем устроить сбор, там день удержания сервера стоит 2к деревянных, учитывая что ген алгоритм с часовыми свечами можно прогнать достаточно быстро, выйдет в районе тысячи+-, в общем решайте, в крайнем случае я сам тогда вкину свои деньги, обучу и вкину на гит, но когда у меня появятся свободные средства я хз, может сегодня, а может в сентябре)
В чем профит ген алгоритма, для чего он тут вообще? Я имею в виду что мы получаем на выходе после его работы? Наилучший вариант нейронки под конкретную пару?
По факту да, но на практике можно поставить любую пару, сама суть в том, что он нужен, чтобы найти наилучшую нейросеть для предсказания курса, потому что как ни крути, а временные ряды разные бывают, и единой модели для них не существует. Так что да, в нашем случае ген алгоритм нужен чтобы найти наилучшую модель нейросети для торговли криптовалютой, по факту нужно просто ещё раз прогнать его на selectel, после всех фиксов что я сделал, потом её можно не трогать вообще, а использовать для всех пар одну исходную модель, просто обученную по разному
Если оно реально так хорошо предсказывает падения, то нужно будет запилить шорты
Оно работает и в лонг и в шорт, если надо чтобы работало только в шорт, можно закомментить пару строк и будет сделано. А вообще такое значение скорее всего потому что шортов просто больше чем лонгов на этом промежутке, вот и показывается что предсказывает лучше. На деле скорее всего там усредненное значение и предсказывает оно 70-75 процентов и лонг и шорт
Там есть модели, но их надо чуть по другому назвать, я сейчас тут допилю кое что и вкину с уже переименованными моделями в гит, в общем модели есть там.
https://github.com/FreeTile/Binance
прикрепляю ещё раз ссылочку на гит, чтобы не терялись
я залил на гит чтобы все могли потрейдить любые пары на любых промежутках, если я в последний раз всё закоммитил норм. В данный момент я почти допилил интерфейс, так что чтобы потестить разные варики даже не надо будет в коде копаться, достаточно будет запустить interface.py. В обще скоро шик будет
Спасибо ОП. Пока их коробки не работает, там какие-то проблемы с неймингами и размерностью нейронки и входных данных. Моего опыта в создании нейронки на распознавание рукописных циферок не хватило чтобы это пофиксить. Надо бы поучить питон и tf, помочь с проектом, а то внезапно самих знаний по нейронкам у меня неплохо так, но вот на практике только чужие реализации ковырял и изменял.
При клоне не пашет? Хм, а должно, значит где то что то лишнее наковырял, в ближайшее время исправлю. У кого то есть такие же проблемы? Предлагайте ещё чё доделать в нынешнем коде
Взял бы NiceGUI в качестве интерфейса. Там простой конструктор типа Gradio. Ну или тот же Gradio, но он прям ограниченный в чем-то кроме тестирования моделей. По ткинтеру хз
>>461779
Я бы написал, но есть несколько нюансов, в данный момент пока работаю над корректировками и пользовательским интерфейсом, так что брать сервак пока просто смысла не вижу. Второе но, это то что галку опа поставить не могу, так что заранее всем говорю, ОСТАВЛЮ СВОЙ ТГ НА ГИТХАБЕ, тут оставлять не буду так как ника нельзя подтвердить что он мой. В общем можешь со мной связаться, обсудим, что надо, но когда буду арендовывать сервер, я пока хз
Пусть другие отчитаются по тому, есть ли прогнозы или нет, в шорт хорошо предсказывает, так что в шорт сделки хорошо идут, можешь их только потестить
15 свечь? Не маловато ли? Да и к тому же нейронная сеть не учитывает внешние факторы, которые могут повлиять на стоимость.
Так а больше свечей поставишь смысла не будет, не надо же учитывать для текущей цены цену которая была в 2015, правильно? Пусть ищет зависимости от последних 15 свеч
Проект: https://github.com/FreeTile/Binance
Моя телега: https://t.me/JoJobBizzareAdventure
Сделал интерфейс, скрин его прикрепляю, теперь по функционалу.
Здесь вы можете поставить абсолютно любую желаемую пару, можете найти в списке либо вбить вручную (К сожалению из за ограничений библиотеки не смог реализовать чтобы начать набирать и находить в списке). То есть теперь бот поддерживает абсолютно все пары которые есть на бинансе.
Вы можете выбрать с каким промежутком свечей работать, сколько их брать для предсказания, насколько большой датасет будете брать для своих целей.
Быстрый старт для тех кто только попал в тред.
1) выбираем пару, время свечей, сколько свечей будем использовать для предсказания, за сколько прошедших дней собираем датасет.
2) Загружаем датасет, можем сразу вычислить тени свечей, можем позже, главное не забудьте перед стартом торгов каждый раз высчитывать средние свечи, так как они не добавляются в отдельный файл, а идут в конфиг, то есть для разных пар вы можете случайно заюзать разные тени, ничего страшного конечно не будет, но вы заруините себе стоп лоссы.
3) (ОПЦИОНАЛЬНО) Тут вы можете запустить ген алгоритм если комп позволяет, проставить ему параметры и попытаться создать болванчика для торговли получше.
4) Бля пускай будет 4, не забудьте API ключ и секрет указать, а то торговать не сможете.
5) Выставляете путь для лучшего индивидуума. У вас уже в корне проекта есть папочка individuals, там один чувак для BTCUSDT, ну его можно для всех пар юзать,я так думаю. Выбираете его и запускаете тренировку модели, пока кол-во эпох я оставил неизменяемым, в будущем сделаю две версии интерфейса, продвинутую где можно выбирать чуть ли блять не строчки кода на которых будет работать бот, и обычную, где время свечей допустим пол часа, кол-во 15 и датасет за последний год, так сказать версия упрощённая для лошков.
Всё, у нас всё есть, и сейчас я понял что я говноед и забыл воткнуть кнопку для старта торговли, кароче как все параметры проставили, всё натренировали, выбираем в пути для модели путь к вашей модели для торговли вашей парой с вашими промежутками и тд. и прописываем в консоли запуск trading.py. Прошу, не создавайте миллиард моделей для всевозможных пар со всевозможными параметрами, так как в названиях моделей не указано кол-во последних свечей, у вас будут сохраняться разные модели с одним названием и хуй вы потом поймёте сколько свеч она на вход хочет, так что пока юзайте по моему поехавшему мануалу, который я из последних сил пишу, в будущем переделаю чтобы всё работало как часы. Сейчас же можете выставить параметры как хотите для какой то пары, обучить модель и запустить trading.py и смотреть как она справляется, всем удачи, если есть какие то идеи, предлагайте, читаю всё что успеваю
>At this time there only one language supported, Russian.
At this time there is only...
Поправь, а то западный барин косо посмотрит
>для предсказания движения курса
Какой же вы батенька долбоеб, капец просто. Если вы ещё не поняли, что эти ваши колебания курсов это просто искусственный дроч? Встал дядя Сэм утром, зачесалось у него правое яйцо, деньги на венеролога понадобились, он нажал кнопочку вниз и курс упал. Так вот и происходят эти ваши колебания.
Не благодари за тайные знания. Я самодостаточен.
Та мне уже так похуй было в это время, потом поправлю
>>463976
Во первых дядя сэм должен владеть кучей активов чтобы так влиять на курс, во вторых даже если он и владеет, то сам курс сильно не опустит а лишь создаст уровень, из за чего хомяки начнут паниковать, так вот открою секрет, эта нейросеть это всё видит и просто предсказывает действия хомяков, зарабатывая на них, энивей она анализирует всё быстрее чем самый умный человек на земле. Но в одном ты прав, если придёт большой дядя сэм, то нейронка не сможет ничё сделать, поэтому я и прописал ей стоп лоссы, вместо того чтобы просто обосрать меня, можешь пойти и почитать что я там написал, может интересно будет, может переделаешь и будешь барином 300кнаносек
> и будешь барином 300кнаносек
Л - Логика Лудомана
Я лучше репортов накину, чтоб твою нейрокухню снесли с доски.
очередной шиз.
Тред никуда не зазывает и нет ссылок на телеги и все такое.
Есть сетка, есть работа для нее. В чем твоя проблема?
На маке пустое окно при попытке открыть интерфейс, ошибок в консоли нет, ща на винде чекну
та потомушто ебаный пайтон вообще не хочет связываться с интерфейсами, я его сделал чтобы можнно было разные конфигурации тестить
ебать парень, я просто кинул свой проект на гите за бесплатно, я не требую долларов за какую то подписку или еще что то. Да, я не супер программист и код мой просто треш, но я просто делюсь опытом, который получаю и пытаюсь его донести простыми словами а также помочь людям которые делают что то подобное в этой сфере, если не нравится, то не трясись а просто сьеби и не позорься
ну кстати как раз в последнем сообщении я оставил свою телегу) Но только для вопросов в реальном времени, не более, ну или если потом захотим скинуться для сервера, я не призываю идти скидывать мне, если хотите, то обучайте сами, код есть, в телегу мне пишите если вопросы по нейронке будут.
В данный момент кстати файл trading работает неккоректо, фикшу, всё остальное вроде работает, так что можете пока обучать свои модельки, чуть позже запушу обнову для trading.py
Пролистал тред - нихуя не понял.
Аноны, можете кратко, для залётного объяснить, что это такое и зачем оно нужно?
Это софт для обучения нейросети для торговли криптой?
Это софт для торговли криптой, в котором уже есть обученная сеть, с возможностью дообучения под себя?
Если я хочу в это вкатиться, что конкретно нужно сделать.
Установить эту лабуду, подключить API Бинанса и торговать? Или я должен сначала что-то "обучить"? Как это сделать, где брать датасет? Может ли эта хуйня в тестовую торговлю, вместо проёбывания реальных шекелей?
"Интуитивно" нихуя не понятно.
Пока другие аноны тестят разные конфиги, я допиливаю код чтобы он работал без ошибок и был удобен в конце концов. На реальных тестах плюс минус предсказывает хорошо, но из за багов нормального профита пока нет, так что работаем
Я оп, ща всё обьясню. Для начала да, берёшь с гита проект и в принципе готово. Нынешняя версия предназначена для торговли в реальных условиях, но я могу немного подредачить, чтобы можно было переключать между тестовой и нетестовой торговли. Софт представляет из себя несколько скриптов, пара из них нацелена на обучение нейросети для торговли криптой и ещё пара для самой торговли, также есть несколько вспомогательных скриптов. На гите полноценный проект с индивидуумом для создания моделей для разных пар с разным промежутком свечей. Также там есть уже обученная модель для торговли BTCUSDT на промежутке 1час. Если не шаришь в нейросетках и программировании, то я советую просто ждать, пока я допиливаю это всё, так как ты можешь просто запустить чтобы оно работало, но оно может дать тебе по жопе, так что лучше пока не лезть. К сожалению всё так долго происходит так как над ней работает один человек, это я. А так как у меня не так много времени и я не квалифицированный программист, умножай время на 10
Есть такие-нибудь годные книги/гайды по тензору кроме самой доки? По какому материалу ты учился?
Учился по всему что нарыл, сначала у GPT спросил про основы, он написал какие библиотеки используются, затем я пошёл читать про сами нейросети, там узнал про их типы, преимущества разных типов, потом узнал как можно сделать то или иное через keras, через GPT узнавал потихоньку как писать код и как он работает.
В общем, без шуток. самый лучший учитель это ГПТ, он простыми словами всё тебе объяснит и поможет написать код, но если он начинает тупить, лучше не добиваться от него чего то большего, а идти в инет копать проблему.
Годных книг, гайдов по тензору нет, да и не нужны они особо, просто покопайся во всевозможной инфе пол дня, просто там набери создание нейросети через тензорфлов, и просто по цепочке смотри и смотри что тебе надо, через пол дня полностью поймёшь как он работает, по крайней мере так получилось у меня
Не проще натренировать две модели - одну на лонг, вторую на шорт?
Так а почему биток то не шортить? Бинанс же позволяет, просто надо нормальные промежутки выбрать.
>>465526
А какая разница? Это сильно качество не поднимет. Надо просто как-то переобучить поудачнее, мб поиграться с параметрами индикаторов
Ну типо отбор будет не по двум, а по одному параметру, что легче. Чисто имхо, я не тренил еще.
Там немного не так работает, предсказывать будет с таким же успехом
Глубокое обучение с R и Keras. Шолле
Прикладное машинное обучение Жерон
Сколько времени ушло до первого прототипа софтины?
Ну, нормального прототипа нет как такового, есть основы, есть куча фич, но всё воедино собрать идеально я пока не очень пытаюсь, стараюсь сделать это всё более гибким, чтобы люди могли делать свои модели и торговать на их основе, как только будет видно что стабильно есть хотя бы пол процента профита неважно за какое время), тогда буду пытаться делать уже человеческую версию для удобного пользования.
Если говорить немного о другом, то изначально кал полный был, в начале июля, в начале августа это уже что то рабочее с чем можно долбиться по мужски
Анон, а на каком фреймворке ты делаешь? Это Тензорфлоу?
>>466099
И еще, анон. Ты подготавливаешь данные (нормализация и все такое) для обучения или заливаешь значения свечей прямо в датасет?
Да, сначала хотел на (да не)Торче, но потом решил на Keras, это оболочка для tensorflow
>>466116
Использую стандартизацию относительно среднего значения (хз, правильно ли по русски это выразил, вот ссылка https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html )
По идее можно и без стандартизации заливать, смысла в ней особо нет, тем более что все значения положительные. Ну может потом попробую переделать
И ещё вдогонку: можно сделать чтоб оно не пыталось торговать, а просто выводила на экран прогноз на 1минуту, 5 минут, 15, 30, час по моим обученным моделям.
P.S. меня похоже в колабе забанили, когда я пытался учить модель((((((((((((((
> Возможно ли попытаться лижайшие цели допустим спрогнозировать?
Ну тоесть пытаемся спрогнозировать ближайший локальный максимум/минимум у следущих 10-15 свечей. Если отклонение от текущей цены слабое-то флет и не торгуем, а если сильное смещение в какую либо сторону то это явный сигнал.
Просто мысли вслух пока обучаю сетку
Идея неплохая, но обычно такие сильные отклонения видит даже человек без большого опыта в торговле вроде меня, нейросеть же я пишу чтобы она по факторам, которые человек может не учесть предсказывала даже наименьшие колебания
>>466710
можно но несколько свечей подряд ещё сложнее прогнозировать, так как если ошибётся в одной, посыпятся все, поэтому я и сделал чтобы она по одной свече предсказывала
>>466739
Чтобы оно не торговало а выводило на экран прогнозы, это максимально легко, могу потом как нибудь сделать такое если надо прям сильно
нахуя вы тред назвали так обобщенно, если в треде четкая направленность - заработок ботами на криптоговне?
Создавать теперь отдельные треды и ебаться с новыми шапками и описаниями ОП-поста если хочешь заработок иного типа?
Ну, в подобных тредах обычно вопрос ответ идёт, а я создал тред о своём проекте, пишу тут рассуждения и выводы, правила не нарушаю, вкладываться никуда не призываю, просто делюсь мыслями, в другом треде по кд писать такую чепуху, которую я тут пишу, меня бы там возненавидели, так что лучше отдельно создать тред, где можно вывалить это всё. А на счёт названия да, обосрался чуток, но могу парировать твои замечания что на пикриле уже видно с чем работаем и в самой шапке описано что делаем
В конце оно переебалось из за ошибки, поэтому последние две строки можно не учитывать, самое главное что при верном предсказании оно теперь в минус не убивается, как было на споте/фьючах BTCUSDT
Да, можно переделать под другие биржи, но только если биржа api предоставляет, это единственный критерий, в остальном всё то же самое
Блин, я бы с удовольствием пошёл туда, но, на обычных бумагах больше упор идёт на новости, нежели на крипте, плюс волатильность меньше намного, ну и туда же идёт тот факт что не 24 на 7 работает, так что пока посижу тут) Может перейду на другую криптобиржу, если у них есть api, пока просто тесты с моим проёбанным балансом, вам торговать на реале не советую, пока только жрёт, если хотите, проверяйте на тестовом балансе. Если не знаете как это сделать, то в строке создания клиента укажите в переменных testnet=true, если не могёте я чуть попозже сделаю отдельную ветвь на гите с тестовой сетью
Там можно отыгрывать другие стратегии с предсказанием поведения цены.
И там есть всякие фьючерсы типа газа, если тебе волатильности мало%)
На таких биржах я даже не думал пользоваться ботами, во первых я хз разрешено ли это там, во вторых я там предпочитаю просто инвестором быть, вкладываюсь в сезонные компании в разные времена года и делаю прибыль, вот с русагро и НЛМК за лето 10+% сделал просто положив в июне туда бабло
Не буду спорить;)
Но мне интересно именно такое применение
>во первых я хз разрешено ли это там
Вполне - https://www.comon.ru/users/camry759/
Это просто следование стратегии, один чел сам там что то покупает а ты делаешь то же самое, это по идее не одно и то же что и торговый бот
P.s, Обосрался с названий его стратегий
Посмотрел его профиль, какой то чел продвигающий УСПЕХ ДЛЯ ВСЕХ S&P500 СМОТРИТ НАВЕРХ, ебать кринжанул
Бирже пофиг, если твой бот не спамит заявками каждую мсек. Доступ все равно через Апи брокера
Ты не понял. Это ЕГО доходность полученная советниками на начальную сумму. Тебе никто не запрещает использовать программу, если это не нарушает правила биржи.
Чтобы предсказывать движение курса, надо по идее не тех.аналитическую хуиту собирать, а то, от чего он собственно движется, т.е. новостной поток. Свечки и стакан тут вторичны. Но думаю если бы это работало, то уже бы работало. Хотя может у кого-то и работает, просто не палят тему.
Крипта меньше завязана на новостях так как сама по себе является валютой используемой во всём мире, поэтому она волатильней любых фиатных валют, новости сильно влияют на акции компаний, отчёты компаний и так далее, для такого тоже можно написать нейросеть, но тут уже никаких моих средств не хватит чтобы обучить её, да и датасет собрать будет та ещё задача, так что ну нахер на данный момент. Есть уже работающие аналоги, но не основанные на нейросети, поэтому я пытаюсь работать с нейросетью
А давно ты в этой теме? На волне всех этих нейронок и жизненных перемен меня это все наконец заинтересовало, но программистский базис у меня совершенно в другую сторону. Есть смысл вкуривать?
Ну, по факту можешь вкурить, но не обязательно мою тему, просто нейронки могут достаточно много, начиная от всяких чат помощников и ботов для каверов и заканчивая чуть ли не полноценным собеседником, но последнее уже посложнее. В общем тут куча применений может быть, а базу выучить можно дня за два, дальше уже чтобы углубиться это да, книги нужны, выше уже кидали. В общем я не могу тебе точно советовать вкатываться в нейросети, но могу сказать, что они могут довольно много, так что думай сам. Я в этой теме месяца 2-3 и увидел достаточно, чтобы утверждать, что нейросети в наши дни могут довольно много и очень полезны
Вижу фанатеешь по теме, у тебя все получится 100%!!!!
Если сначала почитаешь тред, то увидишь что не получилось, или я плохо пока владею теми временными рядами или это просто очень сложно или вообще невозможно, там нейронка просто пытается наебать меня и сдвигает график вправо, так что примерную цену прогнозировать не получится
А как учитываются внешние факторы? Политика, геополитика, природные явления и прочее, что может влиять на него? Просто курс в вакууме не интересен.
Никак, пока пытаюсь онли на внутренней статистике прогнозировать, для новостей нужно отдельную нейросеть писать чтобы основная использовала другую и смотрела где от новостей идёт прирост а где отток, так что это ещё на пол года разроботки.
А теперь вопрос, задал вопрос уже на оверстаке, ну потому что пипец, чё делать https://stackoverflow.com/questions/77018998/problem-with-pickle-load-after-creating-model-with-gen-algorithm
Как всегда в таких делах, чуть ли не самым важным является то как ты настроил валидацию и бектестинг. Как устроено у тебя? Ты же валидацию с обучением по времени разнёс так чтобы валидировалось у тебя на ряде позже по времени чем обучение, да? Проводил ли ты руками анализ какой-то сам, как у тебя распределение таргета меняется в зависимости от времени и сезонности, что будет давать твоя моделька если ты протестируешь на отрезке ряда где распределение отличается от трейна? Это всё важно на практике
Нахуя тебе пикл?
Чем save_weights/load_weights или save_model/load_model из кераса не устраивает?
>RL
В чем смысл его применять, если тебе не известно сеть с какими параметрами наилучшим образом подходит для этой задачи?
У меня с ними тоже траблы были, самый лёгкий путь был через pkl, но сейчас почему то поломалась фигня после выгрузки с сервера
Я без понятия что это за пиздень и что произошло, но если эта модель реально так хорошо работает на понижение, а это я потещу сегодня, то это прям успех.
(Но мне кажется это всё пиздёж и что то пошло не так, пока обучается другая модель я перепроверю код)
Кстати спешу заметить что тут мат обьёбка идёт, так то оно может постоянно говорить что цена будет падать и в 77% будет права, просто потому что свечей падения больше, так что такая модель скорее всего будет пососной, сейчас проверим
Как я и отметил, произошёл обьёб, ген алгоритм вывел наилучшую модель для наебалова а именно она постоянно ставит на понижение и из за того что свечей на понижение физически больше раза в 3+, поэтому они и отбирались как и лучше, сейчас тестирую другую модельку а также чуть позже подправлю ген алгоритм чтобы он лучше отбирал модели
хотел сначала в csv, но потом решил в npy, выгружаю с бинанса, обрабатываю и складываю всё в один лист, который и сохраняю как .npy
Да ни в чём по факту, там просто без разницы в чём сохранять, может из какого то формата быстрее считываться будет, но лично мне непринципиально, главное чтобы нормально считывалось и в нейросеть загружалось
>обучения нейронки для предсказания движения курса
Проорал с дебила.
Упростил твой код немного:
import random
print(random.randint(0, 1))
ну то есть никто, я так понял? Пол треда пыталось помочь, другая половина пыталась обосрать но обосрались сами
Такие нейронки используются в корпорациях, они уже много лет работают и работают на охуенно мощных кластерах.
Господи что это за говно? в чем смысла этого оверфита? какой нахуй плюс от этого прогнозирования. Я ебал. Дурачки думают что без базовых знаний ассет менеджмента и инвестирования можно фитнуть кривую модель и это что будет предсказывать. Я смеюсь с вас.
>без базовых знаний ассет менеджмента и инвестирования
>тред про алготрейдинг на базовых индикаторах
Где-то узнал новые слова и решил применить их ни к месту?
>какой нахуй плюс от этого прогнозирования
Прикольный опыт например??? Я вот например в отличии от ОПа ни строчки кода не написал, всё сделали ИИ ассистенты и даже модель и параметры помогли подобрать. Самое смешное что это говно неплохо скальпирует
К какому месту тут твой высер про инвестирование и AM? Ты тред-то читал, клоун? Тут достаточно базовых знаний о risk ruin, соотношении RR и WR, можно ещё recovery factor смотреть.
>>500709
Залетуха вообще не в теме.
>>488577
Ты - нагляднейший пример того, почему макаки без высшего образования - зло.
У тебя же напрочь отсутствует понимание того, что ты вообще блять делаешь и почему нельзя движение рынков предсказать статистически.
Если бы ты знал хотя бы основы матстата, этот тред бы просто не появился.
Поэтому мой код абсолютно валидный: >>486613
Более того, я не удивлюсь, если он дает предсказания точнее твоего.
Кому интересно можете писать тут или в телеге, буду отвечать по возможности только на нормальную адекватную критику и предложения.
По существу у меня есть несколько идей как переделать саму нейросеть, и да, для тех кто проскипал весь тред, она анализирует не просто свечи а много других факторов (пока без новостей, так как у меня просто не хватит мощностей чтобы такую нейросеть сделать)
Чел, забей, тут два с половиной дегенерата троллят. Просто нихуя не было нового, никто по существу и не пишет
Ну а я и не делал потому что ничего пока нового. Вот сейчас переделываю датасет чтобы состоял только из индикаторов, возможно будет лучше. Но тут сразу же возникла проблема с тренировкой, видимо херово датасет обработал, кароч решил немного ковырнуть, теперь проблем на неделю себе сделал
никому нахуй не нужен твой говнокод. Вот кстати тебе литература.
https://github.com/FreeTile
>я уже дал ссылку на гит
Да уж, гитхаб впечатляет, не то слово.
>вышкой с кафедры вышмата нихуя не понял
Если верить написанному на твоем гитхабе:
>Hi, my name is Mark, I am 20 years old. I like coding and playing video games, more information you can find by pressing button below.
Ты 20 летний задрот в игры.
А вышка твоя, в силу возраста, это всего 2 курса непонятно какой шараги.
Но клоуны тут, разумеется, все, кто не согласен с ОПом. Кстати, сабж на пике.
Ну пока по факту разноса кода не увидел, так что можешь говорить что хочешь
>Кстати. сабж на пике.
Ебать, скопировал мою фотку с гитхаба который я кинул тут же, вот это достойный деанон
Ну если не нужен, нахуй ты в тред то зашёл, чтобы написать это?)
За книгу спасибо, просмотрю в свободное время
Кстати да, то что ты нашёл это дзха для другого вуза, в который я сейчас ушёл, так что док-ва взятые со сраной хтмл странички по дз, это как минимум странно, если удобно, давай я залочу этот репоз и оставлю только тот, о котором идёт речь
если он анализирует количество свечей и просто статвероятность это смерть. на рынке боьшую часть времени нет активности и смотреть на свечи в это время бесполезно. нужно смотреть объемы
Делаете русский дубляж любой популярной игры, которая щас на хайпе, с помощью нейронки HeyGen. Но только трейлер! Далее постите по всем парашам (дтф, маилы и пр.). И сыграв на националистическом настроении гоев - просите бабки на фул перевод такой игры (и похуй, что это не реал, гои поведутся). Мол, вот, они скоты и фашысты ушли с нашего рынка, хуесосят нас и пр.
И сразу в трейлере припишете (уже озвученном нейронкой HeyGen), что собираете донат на покупку нового железа и пр. (и похуй, что у HeyGen синтез идёт на собственных сервах). Оставляя ссылочку с кошельком на WebMoney.
Я клянусь эти ебланы поведутся.
Даю идею работягам, которые пока незнают как заработать на нейронках.
Так я вытаскиваю всё что предоставляет бинанс, там и обьёмы есть в том числе, единстенное чего нет это стакана, но его и в теории быть не может, иначе приходилось бы вытаскивать его каждую секунду
>>506731
К сожалению такой возможности нет (Как минимум у бинанса)
Да тут дохуя методов заработка (моя нейронка не считается на данный момент, так как недоделана), но я чисто ради опыта клепаю и делюсь результатами.
P. S. Если нейронка бабки не теряет это уже частично успех. Обычай её скальпингу раз она у тебя предсказывает только одну свечу дальше.
Надеюсь ты еще тут появляешься, ОП.
Стало интересно, и я посмотрел в сторону ByBit, там тоже есть API, есть либа для питона, но вот когда получаешь инфу о свечах - параметров меньше чем у бинанса, не могу пока понять, насколько это критично.
А нет именно
quote_asset_volume
number_of_trades
'taker_buy_base_asset_volume
taker_buy_quote_asset_volume
Но есть Turnover (Unit of figure: quantity of quota coin)
Я подумал, что может быть еще стоит Open Interest так же добавить в данные для обучения.
И вообще, как идут/шли дела? На чем остановился?
это работать не будет, не трать в пустую время