Я создал очень простую модель RL для торговли акциями, но ее вывод одинаково независимо от вводаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Я создал очень простую модель RL для торговли акциями, но ее вывод одинаково независимо от ввода

Сообщение Anonymous »

Я пытался построить основную нейронную сеть, которая анализирует цену акции и выбирает, стоит ли покупать, продавать или держать. < /p>
# Importing Libraries
import torch
import torch.nn as nn
import torch.optim as optim

import random
import numpy as np
from datetime import datetime, timedelta
import pickle

# Defining Hyperparameters
input_num = 8
output_num = 3
episodes = 100000

# Layer architecture parameters
hidden_size = 100
recurrent_size = 50

# For the trading environment
portfolio = []
buying_power = 0
goal = 999999999 # So the model goes as high as possible

# Define neural network class
class NN(nn.Module):
def __init__(self, in_f, out_f, h_size, r_size):
super().__init__()
# Variables
self.epsilon = 1
self.epsilon_end = 0.01
self.decay = 0.9999
# MLP
self.fc1 = nn.Linear(in_features=in_f, out_features=h_size)
self.fc2 = nn.Linear(in_features=h_size, out_features=h_size)
self.fc3 = nn.Linear(in_features=h_size, out_features=h_size)
# LSTM
self.rnn = nn.LSTM(input_size=h_size, hidden_size=r_size,
num_layers=5, batch_first=True)
#FFN
self.ffn = nn.Linear(in_features=r_size, out_features=out_f)

# Defining EGreedy
def epsilon_decay(self):
self.epsilon = (self.epsilon_end + (self.epsilon - self.epsilon_end)
* np.exp(-1. * self.decay))

def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = torch.relu(self.fc3(x))
# LSTM
x, (hn, cn) = self.rnn(x) # separate the output and hidden state
x = torch.tensor(x, requires_grad=True)
x = torch.relu(self.ffn(x))
return x

def select_action(self, x):
x = self.forward(x)
if np.random.rand() < self.epsilon:
action = torch.randint(0, 10, (1, 3), dtype=torch.float32)
else:
action = x
self.epsilon_decay()
return action

model = NN(input_num, output_num, hidden_size, recurrent_size)

# Defining Loss
criterion = nn.MSELoss() # Mean Squared Error loss function
optimizer = optim.Adam(model.parameters(), lr=0.01) # Adam optimizer

# Load stock data
with open('stock_data.pkl', 'rb') as data:
stock_data = pickle.load(data)
# List of stocks
ticker_list = [
'AAPL', 'NVDA', 'MSFT', 'AMZN', 'GOOGL', 'META', 'TSLA', 'TSM', 'BRK-A',
'AVGO', 'WMT', 'LLY', 'JPM', 'V', 'XOM', 'ORCL', 'MA', 'UNH', 'COST', 'HD',
'PG', 'NFLX', 'NVO', 'BAC', 'JNJ', 'CRM', 'ABBV', 'SAP', 'ASML', 'CVX', 'KO',
'TMUS', 'MRK', 'ACN', 'WFC', 'NOW', 'CSCO', 'TM', 'BX', 'PEP', 'IBM', 'BABA',
'MCD', 'AMD', 'AXP', 'ADBE', 'LIN', 'DIS', 'AZN', 'MS'
]

# Defining functions for buying and selling
def buy(stock, date):
global buying_power
close = stock_data[stock].loc[date]['Close']
price = float(close)
if price
Если вам интересно с файлом stock_data, это всего лишь словарь, где ключи - это тикеры, а значения - это рамки пандов по ценам этой акции. Вы можете создать один и тот же файл с этой программой. < /P>

#Importing Libraries
import yfinance as yf
import os
import numpy as np
import pandas as pd

# Testing libraries
import matplotlib.pyplot as plt

# The Window we will use for every stock
start_window='2020-01-01'
end_window='2023-12-31'

# Defining dictionary
stock_data = {}

# Data collecting function
def collect(stock):
history = yf.download(stock,
start=start_window,
end=end_window,
progress=False,
)
stock_data[stock] = history

# list of stocks based on -- What I like :)
ticker_list=['AAPL','NVDA','MSFT','AMZN','GOOGL','META',
'TSLA','TSM','BRK-A','AVGO','WMT','LLY','JPM','V',
'XOM','ORCL','MA','UNH','COST','HD','PG','NFLX',
'NVO','BAC','JNJ','CRM','ABBV','SAP','ASML','CVX',
'KO','TMUS','MRK','ACN','WFC','NOW','CSCO','TM',
'BX','PEP','IBM','BABA','MCD','AMD','AXP','ADBE',
'LIN','DIS','AZN','MS']

# adding histories to stock data
for ticker in ticker_list:
collect(ticker)

# Writing to file
import pickle

with open('stock_data.pkl', 'wb') as f:
pickle.dump(stock_data, f)
print('Data stored')
< /code>
Независимо от того, какой ввод придается модели, он всегда дает один и тот же выход. Только время от времени модель дает другой выход из -за исследования Egreedy. Также попытался квадрат цены в надежде, что это создаст разницу между ценами, которые модель может увидеть. p>
Кроме этого, я не могу придумать ничего, что испортило бы вывод. < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... the-same-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»