day 42 |● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

文章讲述了如何使用动态规划解决股票买卖问题,通过dp数组记录持有和卖出股票的不同状态,函数maxProfit计算在给定价格序列中的最大利润。两个版本的函数分别考虑了当天买入和之前持有的情况。

121. 买卖股票的最佳时机

dp数组需要记录两种状态,一种是当天时手中还持有股票,一种是当天时手中已卖出股票。

func maxProfit(prices []int) int {
    dp := make([][]int, len(prices))
    dp[0] = []int{-prices[0], 0}
    for i := 1; i < len(prices); i++{
        val0 := max(dp[i - 1][0], -prices[i])
        val1 := max(dp[i - 1][1], prices[i] + dp[i - 1][0]) 
        dp[i] = []int{val0,val1}
    } 
    return dp[len(prices) - 1][1]
}

func max(a ,b int)int{
    if a < b{
        return b
    }
    return a
}

122.买卖股票的最佳时机II

持有股票的状态可以是当天才持有,也可以是之前就持有
卖出的状态同理

func maxProfit(prices []int) int {
    dp := make([][]int, len(prices))
    dp[0] = []int{-prices[0], 0}

    for i := 1; i < len(prices); i++{
        val0 := max(dp[i - 1][0], dp[i - 1][1] - prices[i])
        val1 := max(dp[i - 1][0] + prices[i], dp[i - 1][1])
        dp[i] = []int{val0, val1}
    }
    return dp[len(prices) - 1][1]
}
func max(a, b int)int{
    if a < b{
        return b
    }
    return a
}
### 创建基于东方财富网数据的股票量化分析工具并实现买卖信号提示 为了开发一个基于东方财富网数据的股票量化分析工具,并实现买卖信号提示功能,可以按照以下方法进行设计和实现: #### 1. 数据获取 东方财富网提供了丰富的API接口,能够获取股票的历史行情数据、财务数据以及实时数据等。这些数据可以通过其官方API或第三方封装库获取[^2]。 例如,通过东方财富API,可以获取以下数据: - 股票历史行情数据(开盘价、收盘价、最高价、最低价、成交量等) - 公司财务数据(营收、利润等) - 龙虎榜数据(大资金动向) 以下是使用`requests`库从东方财富API获取数据的示例代码: ```python import requests def get_stock_data(stock_code, start_date, end_date): url = f"https://api.eastmoney.com/stock/kline?code={stock_code}&start={start_date}&end={end_date}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers) if response.status_code == 200: return response.json() else: return None ``` #### 2. 技术指标计算 在获取到股票数据后,可以利用TA-Lib库对数据进行技术指标计算,以辅助生成买卖信号。TA-Lib库涵盖了多种常用的技术分析指标,如移动平均线、RSI、MACD等[^4]。 以下是一个计算简单移动平均线(SMA)的示例代码: ```python import talib import numpy as np def calculate_sma(data, period=20): close_prices = np.array([day['close'] for day in data]) sma = talib.SMA(close_prices, timeperiod=period) return sma ``` #### 3. 买卖信号生成 根据计算出的技术指标,可以设定规则来生成买卖信号。例如,当短期移动平均线向上穿越长期移动平均线时,生成买入信号;当短期移动平均线向下穿越长期移动平均线时,生成卖出信号。 以下是一个生成买卖信号的示例代码: ```python def generate_signals(short_sma, long_sma): signals = [] position = 0 # 0: 持平, 1: 持有多头, -1: 持有空头 for i in range(1, len(short_sma)): if short_sma[i] > long_sma[i] and short_sma[i - 1] <= long_sma[i - 1]: signals.append(1) # 买入信号 position = 1 elif short_sma[i] < long_sma[i] and short_sma[i - 1] >= long_sma[i - 1]: signals.append(-1) # 卖出信号 position = -1 else: signals.append(0) # 持平 return signals ``` #### 4. 数据可视化 为了更直观地展示股票走势和技术指标,可以使用`matplotlib`库绘制图表。例如,绘制股票价格与移动平均线的对比图。 以下是一个绘图示例代码: ```python import matplotlib.pyplot as plt def plot_stock_data(data, short_sma, long_sma): close_prices = [day['close'] for day in data] dates = [day['date'] for day in data] plt.figure(figsize=(12, 6)) plt.plot(dates, close_prices, label="Close Price") plt.plot(dates, short_sma, label="Short SMA", linestyle="--") plt.plot(dates, long_sma, label="Long SMA", linestyle="--") plt.legend() plt.show() ``` #### 5. 系统集成 将上述模块整合到一个完整的系统中,用户可以通过输入股票代码、时间范围等参数,自动获取数据、计算技术指标、生成买卖信号并展示结果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值