你的位置:开云app官网入口网址·(中国)官方网站 > 新闻资讯 > 开云体育掌捏它需要不断学习和耐烦-开云app官网入口网址·(中国)官方网站

开云体育掌捏它需要不断学习和耐烦-开云app官网入口网址·(中国)官方网站

时间:2025-07-01 13:17 点击:158 次

图片

写在前边的话:本文手把手教养公共使用 Python 和 AI 进行股票来回估计。起始先容了不同的估计格式,止境是 LSTM 处理序列估计的才智。然后提供了认识考证才能,包括装配、创建名目等,还展示代码确立,如导入库、用函数磨练测试模子,终末还评估了模子的性能。

咱们探寻了多种估计股价的状貌,像 Facebook 的 Prophet 等估计器用、SARIMA 模子等统计技能、多项式追想等机器学习政策,还有基于东说念主工智能的轮回神经网罗(RNN)。在繁密东说念主工智能模子与时刻里,咱们发现短永劫缅念念(LSTM)模子能带来最理念念的扫尾。

LSTM 模子是递归神经网罗架构的一种变形,擅所长理序列估计勤勉。它与传统的前馈神经网罗不同,具有访佛缅念念的结构,能在多数序列中保留高下文数据。这一特色使其额外合当令刻序列估计、当然言语处理以过火他依赖序列数据的任务。它通过缓解消成仇梯度爆炸问题,措置了表率 RNN 的基本弱点,从而提高了模子识别数据集内长久依赖关连的才智。因此,LSTM 已成为需要永劫刻深切清爽数据的复杂任务的首选。

为了考证其灵验性,咱们开荒了一个认识考证。

一、准备职责

你需要在你的野情绪中(或选拔使用 VSCode 会愈加简单)装配最新版块的 Python 和 PIP。(https://code.visualstudio.com/)

创建一个带有 “main.py “文献的 Python 名目。

在名目中添加 “data”目次。

建设并激活臆造环境。

trading-ai-lstm $ python3 -m venv venvtrading-ai-lstm $ source venv/.bin/activate(venv) trading-ai-lstm $

创建一个 “requirements.txt “文献。

pandasnumpyscikit-learnscipymatplotlibtensorfloweodhdpython-dotenv

确保已在臆造环境中升级 PIP 并装配依赖项。

(venv) trading-ai-lstm $ pip install --upgrade pip(venv) trading-ai-lstm $ python3 -m pip install -r requirements.txt

需要在”.env “文献中加入了 EODHD API 的 API 密钥。

API_TOKEN=<YOUR_API_KEY_GOES_HERE>

一切就绪。如果你正在使用  VSCode ,并但愿使用与咱们换取的”.vscode/settings.json “文献,请点击 Fork 本名目 GitHub 仓库(https://github.com/alexyu2013/trading-ai-lstm),以备备而无用。

{
  'python.formatting.provider': 'none',  'python.formatting.blackArgs': ['--line-length', '160'],  'python.linting.flake8Args': [    '--max-line-length=160',    '--ignore=E203,E266,E501,W503,F403,F401,C901'  ],  'python.analysis.diagnosticSeverityOverrides': {    'reportUnusedImport': 'information',    'reportMissingImports': 'none'  },  '[python]': {    'editor.defaultFormatter': 'ms-python.black-formatter'  }}
二、代码构建

第一步是导入必要的库。

import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'import pickleimport pandas as pdimport numpy as npfrom dotenv import load_dotenvfrom sklearn.metrics import mean_squared_error, mean_absolute_errorfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import LSTM, Dense, Dropoutfrom tensorflow.keras.models import load_modelfrom sklearn.preprocessing import MinMaxScalerimport matplotlib.pyplot as pltfrom eodhd import APIClient

TensorFlow 往往会自动生成诸多警告与调试信息。而咱们更倾向于粗略明了的输出,故而对这些奉告进行了领域。这不错在导入“os”模块后,借助 os.environ 来终了。

机器学习和东说念主工智能模子的磨练过程需要多数的微调,主如若通过所谓的超参数(hyperparameters)进行照应。这个问题犬牙相制,掌捏它需要不断学习和耐烦,最好超参数的选拔受到多样身分的影响。凭据咱们通过 EODHD API (https://eodhd.com/)赢得的表率普尔 500 指数逐日数据,咱们起始使用了一些广为认同的建设。咱们饱读吹您修改这些建设以提高扫尾。现时,提倡将序列长度保持在 20。

# Configurable hyperparametersseq_length = 20batch_size = 64lstm_units = 50epochs = 100

下一步是从咱们的”.env “文献中赢得 EODHD API 的 API_TOKEN。

# Load environment variables from the .env fileload_dotenv()# Retrieve the API keyAPI_TOKEN = os.getenv('API_TOKEN')if API_TOKEN is not None:    print(f'API key loaded: {API_TOKEN[:4]}********')else:    raise LookupError('Failed to load API key.')

需要确保领有灵验的 EODHD API 的 API_TOKEN 才能得胜走访数据。

咱们照旧确立了几个可雷同使用的函数,并将不才文中详实先容它们的功能。我把这些函数进行了代码凝视,以评释其操作。

def get_ohlc_data(use_cache: bool = False) -> pd.DataFrame:    ohlcv_file = 'data/ohlcv.csv'    if use_cache:        if os.path.exists(ohlcv_file):            return pd.read_csv(ohlcv_file, index_col=None)        else:            api = APIClient(API_TOKEN)            df = api.get_historical_data(                symbol='HSPX.LSE',                interval='d',                iso8601_start='2010-05-17',                iso8601_end='2023-10-04',            )            df.to_csv(ohlcv_file, index=False)            return df    else:        api = APIClient(API_TOKEN)        return api.get_historical_data(            symbol='HSPX.LSE',            interval='d',            iso8601_start='2010-05-17',            iso8601_end='2023-10-04',        )def create_sequences(data, seq_length):    x, y = [], []    for i in range(len(data) - seq_length):        x.append(data[i : i + seq_length])        y.append(data[i + seq_length, 3])  # The prediction target 'close' is the 4th column (index 3)    return np.array(x), np.array(y)def get_features(df: pd.DataFrame = None, feature_columns: list = ['open', 'high', 'low', 'close', 'volume']) -> list:    return df[feature_columns].valuesdef get_target(df: pd.DataFrame = None, target_column: str = 'close') -> list:    return df[target_column].valuesdef get_scaler(use_cache: bool = True) -> MinMaxScaler:    scaler_file = 'data/scaler.pkl'    if use_cache:        if os.path.exists(scaler_file):            # Load the scaler            with open(scaler_file, 'rb') as f:                return pickle.load(f)        else:            scaler = MinMaxScaler(feature_range=(0, 1))            with open(scaler_file, 'wb') as f:                pickle.dump(scaler, f)            return scaler    else:        return MinMaxScaler(feature_range=(0, 1))def scale_features(scaler: MinMaxScaler = None, features: list = []):    return scaler.fit_transform(features)def get_lstm_model(use_cache: bool = False) -> Sequential:    model_file = 'data/lstm_model.h5'    if use_cache:        if os.path.exists(model_file):            # Load the model            return load_model(model_file)        else:            # Train the LSTM model and save it            model = Sequential()            model.add(LSTM(units=lstm_units, activation='tanh', input_shape=(seq_length, 5)))            model.add(Dropout(0.2))            model.add(Dense(units=1))            model.compile(optimizer='adam', loss='mean_squared_error')            model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(x_test, y_test))            # Save the entire model to a HDF5 file            model.save(model_file)            return model    else:        # Train the LSTM model        model = Sequential()        model.add(LSTM(units=lstm_units, activation='tanh', input_shape=(seq_length, 5)))        model.add(Dropout(0.2))        model.add(Dense(units=1))        model.compile(optimizer='adam', loss='mean_squared_error')        model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(x_test, y_test))        return modeldef get_predicted_x_test_prices(x_test: np.ndarray = None):    predicted = model.predict(x_test)    # Create a zero-filled matrix to aid in inverse transformation    zero_filled_matrix = np.zeros((predicted.shape[0], 5))    # Replace the 'close' column of zero_filled_matrix with the predicted values    zero_filled_matrix[:, 3] = np.squeeze(predicted)    # Perform inverse transformation    return scaler.inverse_transform(zero_filled_matrix)[:, 3]def plot_x_test_actual_vs_predicted(actual_close_prices: list = [], predicted_x_test_close_prices = []) -> None:    # Plotting the actual and predicted close prices    plt.figure(figsize=(14, 7))    plt.plot(actual_close_prices, label='Actual Close Prices', color='blue')    plt.plot(predicted_x_test_close_prices, label='Predicted Close Prices', color='red')    plt.title('Actual vs Predicted Close Prices')    plt.xlabel('Time')    plt.ylabel('Price')    plt.legend()    plt.show()def predict_next_close(df: pd.DataFrame = None, scaler: MinMaxScaler = None) -> float:    # Take the last X days of data and scale it    last_x_days = df.iloc[-seq_length:][['open', 'high', 'low', 'close', 'volume']].values    last_x_days_scaled = scaler.transform(last_x_days)    # Reshape this data to be a single sequence and make the prediction    last_x_days_scaled = np.reshape(last_x_days_scaled, (1, seq_length, 5))    # Predict the future close price    future_close_price = model.predict(last_x_days_scaled)    # Create a zero-filled matrix for the inverse transformation    zero_filled_matrix = np.zeros((1, 5))    # Put the predicted value in the 'close' column (index 3)    zero_filled_matrix[0, 3] = np.squeeze(future_close_price)    # Perform the inverse transformation to get the future price on the original scale    return scaler.inverse_transform(zero_filled_matrix)[0, 3]def evaluate_model(x_test: list = []) -> None:    # Evaluate the model    y_pred = model.predict(x_test)    mse = mean_squared_error(y_test, y_pred)    mae = mean_absolute_error(y_test, y_pred)    rmse = np.sqrt(mse)    print(f'Mean Squared Error: {mse}')    print(f'Mean Absolute Error: {mae}')    print(f'Root Mean Squared Error: {rmse}')

咱们需细心指出的是,在种种函数中增添了“use_cache”变量。此政策意在裁减对 EODHD 应用行为接口的冗余 API 调用,防范足下换取的逐日数据对模子进行雷同的从头磨练。激活“use_cache”变量会将数据存储至“data/”目次下的文献里。若数据不存在,则会创建;若已存在,则会加载。当屡次运行剧本时,此格式能显赫提高遵循。若要在每次运行时赢得新数据,只需在调用函数时禁用“use_cache”选项或清空“data/”目次中的文献,就能得到换取的扫尾。

现时参加代码的中枢部分…

if __name__ == '__main__':    # Retrieve 3369 days of S&P 500 data    df = get_ohlc_data(use_cache=True)    print(df)

起始,咱们从 EODHD API  赢得 OHLCV 数据,并将其存入名为 “df “的 Pandas DataFrame。OHLCV 暗示开盘价、最高价、最廉价、收盘价和成交量,是来回烛炬图数据的表率属性。如前所述,咱们启用了缓存以简化经过。咱们还不错选拔在屏幕上披露这些数据。

图片

咱们将一次性先容以下代码块…

    features = get_features(df)    target = get_target(df)    scaler = get_scaler(use_cache=True)    scaled_features = scale_features(scaler, features)    x, y = create_sequences(scaled_features, seq_length)    train_size = int(0.8 * len(x))  # Create a train/test split of 80/20%    x_train, x_test = x[:train_size], x[train_size:]    y_train, y_test = y[:train_size], y[train_size:]    # Re-shape input to fit lstm layer    x_train = np.reshape(x_train, (x_train.shape[0], seq_length, 5))  # 5 features    x_test = np.reshape(x_test, (x_test.shape[0], seq_length, 5))  # 5 features

“features” 包括咱们将用来估计标的(即 “close”)的一系列输入。

“target” 包含一个标的值列表,如 “close“。

“scaler”代表一种用于将数字表率化的格式,使它们具有可比性。举例,咱们的数据集启动时的接近值可能是 784,终末可能是 3538。终末一瞥的数字越高,并不虞味着估计的意旨越大。归一化可确保可比性。

“scaled_features” 是缩放过程的扫尾,咱们将用它来磨练东说念主工智能模子。

“x_train” and “x_test” 辞别暗示咱们将用于磨练和测试东说念主工智能模子的数据集,经常的作念法是 80/20 分派。这意味着 80% 的来回数据用于磨练,20% 用于测试模子。x “暗示这些特征或输入。

“y_train” and “y_test” 的功能访佛,但只包含标的值,如 “close”。

终末,必须对数据进行重塑,以无礼 LSTM 层的条目。

咱们开荒了一种功能,既能对模子进行从头磨练,又能载入之前已磨练好的模子。

model = get_lstm_model(use_cache=True)

图片

从披露的图片中不错一窥磨练序列。你会发现,起始, “loss”和 “val_loss” 方针可能并不完全一致。不外,跟着磨练的进行,这些数据有望趋于一致,这标明磨练取得了进展。

Loss: 这是在磨练数据集上野心的均方错误(MSE)。它反馈了每个磨练期估计标签和真确标签之间的“cost” 或 “error” 。咱们的标的是通过流通的历时来减少这一数字。

Val_loss: 这个均方错误是在考证数据集上细则的,用于磋商模子在磨练过程中未碰到的数据上的线路。它是模子泛化到新的未见数据才智的方针。

检察测试集的估计收盘价列表,不错使用此代码。

    predicted_x_test_close_prices = get_predicted_x_test_prices(x_test)    print('Predicted close prices:', predicted_x_test_close_prices)

单看这些数据,可能并不啻境具有启发性或直不雅。不外,通过画图内容收盘价与估计收盘价的对比图(请精深,这只占通盘数据集的 20%),咱们不错得到更了了的图像,如下图所示。

# Plot the actual and predicted close prices for the test data    plot_x_test_actual_vs_predicted(df['close'].tail(len(predicted_x_test_close_prices)).values, predicted_x_test_close_prices)

图片

扫尾标明,在测试阶段,该模子在估计收盘价方面线路出色。

现时,咱们来望望最令东说念主期待的方面:咱们能细则翌日的估计收盘价吗?

   # Predict the next close price    predicted_next_close =  predict_next_close(df, scaler)    print('Predicted next close price:', predicted_next_close)Predicted next close price: 3536.906685638428

这是一个用于西宾办法的基本示例,只是是一个启动。从这里启动,您不错商量加入更多的磨练数据,退换超参数,或将模子应用于不同的市集和时刻区间。如果您念念对模子进行评估,不错将其包括在内。

 # Evaluate the model    evaluate_model(x_test)

在咱们的有谋略中的输出情况是

Mean Squared Error: 0.00021641664334765608Mean Absolute Error: 0.01157513692221611Root Mean Squared Error: 0.014711106122506767

“平均遍及错误”(mean_squared_error)和 “平均都备错误”(mean_absolute_error)函数来自 scikit-learn 的度量模块,辞别用于野心平均遍及错误(MSE)和平均都备错误(MAE)。均方根错误 (RMSE) 是通过对 MSE 取遍及根得出的。

这些方针为模子的准确性提供了数字化的评估,也为模子的性能进行了定量的分析,而图形化的展示则更有益于直不雅地对比估计值与内容数值,以及直不雅地相比估计值和内容值。

三、总结

在本文中我详实先容了用 Python 和 AI 作念来回估计的经过。起始是多样估计办法,像 Facebook 的 Prophet、SARIMA 模子、多项式追想,还有基于东说念主工智能的轮回神经网罗(RNN),这内部我合计 LSTM 模子最犀利。LSTM 模子是种特殊的递归神经网罗,能处理序列估计问题,还措置了表率 RNN 的消成仇梯度爆炸问题,合当令刻序列估计和当然言语处理这些任务。

接下来,我给公共提供了一个认识考证的准备才能,包括装配Python和PIP、创建名目和文献、建设臆造环境以及创建requirements.txt文献。还包括 VSCode的建设文献示例,以及本名办法 GitHub 代码仓库。

而在确立代码的部分,我详实评释了奈何导入必要的库和调用 EODHD API’s,并先容了一系列可重用的函数,这些函数用于赢得数据、创建序列、赢得特征和标的值、缩放特征、赢得LSTM模子、进行估计以及评估模子。此外,咱们还磋磨了奈何使用缓存来减少不必要的API调用和数据雷同加载。

终末,本文展示了奈何使用这些函数来磨练和测试LSTM模子,并展示了奈何估计下一个来回日的收盘价。通过相比内容收盘价和估计收盘价的图表,以及野心均方错误(MSE)、均方根错误(RMSE)和均都备错误(MAE)等方针,来评估模子的性能。粗陋总结起来即是底下6句话:

LSTM模子在来回估计中的遵循优于其他格式,因为它大概更好地处理长久依赖问题。

使用缓存机制不错提高数据处理的遵循,幸免雷同的API调用和模子磨练。

通过可视化内容和估计的收盘价,以及野心磋磨的错误方针,不错直不雅地评估模子的估计准确性。

模子的磨练和测试应该使用不同的数据集,以确保模子的泛化才智。

退换超参数和使用独特的磨练数据不错进一步提高模子的性能。

模子的估计扫尾不错动作来回决策的参考,但应严慎使用,因为估计并不老是准确的。

本文内容只是是时刻探讨和学习,并不组成任何投资提倡。

转发请注明原作家和出处开云体育。

本站仅提供存储办事,系数内容均由用户发布,如发现存害或侵权内容,请点击举报。

开云体育掌捏它需要不断学习和耐烦-开云app官网入口网址·(中国)官方网站

Alternate Text

开云体育掌捏它需要不断学习和耐烦-开云app官网入口网址·(中国)官方网站

图片 写在前边的话:本文手把手教养公共使用 Python 和 AI 进行股票来回估计。起始先容了不同的估计格式,止境是 LSTM 处理序列估计的才智。然后提供了认识考证才能,包括装配、创建名目等,还展示代码确立,如导入库、用函数磨练测试模子,终末还评估了模子的性能。 咱们探寻了多种估计股价的状貌,像 Facebook 的 Prophet 等估计器用、SARIMA 模子等统计技能、多项式追想等机器学习政策,还有基于东说念主工智能的轮回神经网罗(RNN)。在繁密东说念主工智能模子与时刻里,咱们发现

查看更多

开云体育“龙头股”一定是全商场赢利效应最佳-开云app官网入口网址·(中国)官方网站

Alternate Text

开云体育“龙头股”一定是全商场赢利效应最佳-开云app官网入口网址·(中国)官方网站

频繁情况下,行情是由“整理”和“败坏”两部分构成,并不隔断替。 咱们王人心爱作念“败坏”段的股票,因为涨速快,收益高。关联词当你看到一支股票如故败坏了,那么商场上的主力,庄家,机构,游资,散户也王人看到它败坏了,这时候你再追进买入,无非即是去赌这支票不错败坏的更高。追热门,打板,龙头战法等,大大王人王人包摄这类。 这种方式较量的即是临盘的反馈才略,对热门观念高涨空间的认知才略,强势股选票才略,终末即是拼手速,买龙头。固然,“龙头股”一定是全商场赢利效应最佳,何况亦然最安全的票。仅仅你必须要有一

查看更多

开yun体育网对阛阓科学的调控才略着实惩处-开云app官网入口网址·(中国)官方网站

Alternate Text

开yun体育网对阛阓科学的调控才略着实惩处-开云app官网入口网址·(中国)官方网站

问题关键是: 按缠论, 起初你要知说念我方是在什么级别上操作, 比如, 是在30分钟, 日仍是月。 要是是30分钟, 那么, 你起初要找到的是终末一个30分钟的核心; 要是是日, 就要找终末一个日核心。 问题来了, 要是我按30分钟操作, 那如何找30分钟的核心?大要是找这个30分钟的核心有好多不同的不雅点, 用的图也不一样。我的问题, 岂论你用什么找, 线段, 笔或显微镜, 惟一你找出来的有长入的趋向性, 是不是就对了, 不然, 可能不是。 因为, 按递归推, 细目是趋向一样的呀?我以为谁能

查看更多

体育游戏app平台记者在武汉欢畅谷官方公众号查询-开云app官网入口网址·(中国)官方网站

Alternate Text

体育游戏app平台记者在武汉欢畅谷官方公众号查询-开云app官网入口网址·(中国)官方网站

12 月 30 日,一网友在鸠合平台发帖称,当日在武汉欢畅谷乘坐"凤舞九天"过山车时,过山车陡然停在半空十几分钟,被援手下来后她条款欢畅谷退还门票用度遭拒。该网友暗意,其同业三东谈主中其中一东谈主系未成年东谈主,"精神逝世怎样办?" 在该网友提供的现场相片中,潇湘晨报记者追究到,过山车车厢罢手在该游乐门径高潮段轨谈中部,车厢内近 20 东谈主。当事网友称,该相片系欢畅谷另一游乐门径"东湖之眼"上的搭客拍摄,故较隐隐。 12 月 31 日,记者在武汉欢畅谷官方公众号查询,追究到"凤舞九天"神志在

查看更多
公司地址:

新闻资讯国际企业科技园4059号

关注我们:
官方网站:

www.xzdzcls.com

Powered by 开云app官网入口网址·(中国)官方网站 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024
开云app官网入口网址·(中国)官方网站-开云体育掌捏它需要不断学习和耐烦-开云app官网入口网址·(中国)官方网站