shadowmage 发表于 2024-11-24 10:25:10

这个区,居然没人分享什么是策略吗?

今天看到有量化区,一时手痒,进来看看,居然没人说到怎么个量化,怎么个交易……
那我今天先抛个砖,希望能引各位的玉进来。
先说移动平均数吧,就是MA,就是从当前日期往上回溯若干天,取算数平均数,运算这么简单,当然就叫简单平均数。SMA,比如SMA5就是5天移动平均数,在坐标系里把这些数连起来,就成为一条线,这个叫趋势线。
最简单的策略是双均线策略,就是短期趋势线上穿长期趋势线,就是SMA5>SMA20这样,叫金叉,SMA5<SMA20,叫死叉。当然,参数5跟20可以自行更改。

既然有简单移动平均线,那当然有稍微复杂一点的,一般用一个叫指数移动平均线的,EMA,这个计算方法有点复杂,拿SMA当初始值,然后加权计算剩下的EMA值。感兴趣的可以自行上网搜索。

到这一步,拿Excel公式就可以搞定,当然,用Python的Pandas库可能会更快。

小甲鱼的二师兄 发表于 2024-11-24 11:45:37

举手,我发过一篇量化分析入门之移动平均线 -> https://fishc.com.cn/thread-240175-1-1.html

shadowmage 发表于 2024-11-24 15:32:40

哦,二师兄好厉害,问题是,均线怎么用在量化上?

小甲鱼的二师兄 发表于 2024-11-24 15:39:14

shadowmage 发表于 2024-11-24 15:32
哦,二师兄好厉害,问题是,均线怎么用在量化上?

我们不妨来问一下 AI 吧~

@FishC 请介绍均线在量化交易中的应用。

FishC 发表于 2024-11-24 15:52:53

小甲鱼的二师兄 发表于 2024-11-24 15:39
我们不妨来问一下 AI 吧~

@FishC 请介绍均线在量化 ...

均线(Moving Average, MA)是量化交易中常用的技术指标,用于平滑价格数据,帮助识别趋势方向。以下是均线在量化交易中的一些应用:

1. 趋势识别:
均线可以帮助交易者识别市场的趋势。一般来说,价格在均线上方表示上升趋势,在均线下方表示下降趋势。

2. 支撑和阻力:
均线常被用作动态的支撑和阻力。当价格接近均线时,可能会遇到支撑或阻力,交易者会密切关注这些位置以做出交易决策。

3. 交叉信号:
一种常见的策略是使用两条均线(例如短期与长期均线),当短期均线上穿长期均线时,产生买入信号;短期均线下穿长期均线时,产生卖出信号。

4. 捕捉回调:
在趋势市场中,交易者可能会利用均线捕捉价格的回调机会,在均线附近进行交易。

5. 波动性分析:
均线可以用于分析市场的波动性。通过观察均线的斜率变化,交易者可以判断当前市场的力度和速度。

注意事项:均线因其滞后性,通常与其他指标结合使用,避免市场的假突破或信号噪声。

了解均线的应用可以帮助交易者更好地制定策略,但需结合实际市场情况及风险管理。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-24 15:55:46

FishC 发表于 2024-11-24 15:52
均线(Moving Average, MA)是量化交易中常用的技术指标,用于平滑价格数据,帮助识别趋势方向。以下是 ...

请给个python示例,让我看看具体如何使用均线指标

FishC 发表于 2024-11-24 15:55:56

shadowmage 发表于 2024-11-24 15:55
请给个python示例,让我看看具体如何使用均线指标

下面是一个简单的Python示例,演示如何使用pandas库计算和应用均线指标:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据,假设这是收盘价
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100)
prices = np.cumsum(np.random.randn(100)) + 100

# 创建DataFrame
df = pd.DataFrame(data={'Close': prices}, index=dates)

# 计算移动平均线
df['SMA5'] = df['Close'].rolling(window=5).mean()# 5天均线
df['SMA20'] = df['Close'].rolling(window=20).mean()# 20天均线

# 绘图
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Close'], label='Close Price', color='lightgrey')
plt.plot(df.index, df['SMA5'], label='SMA5', color='blue')
plt.plot(df.index, df['SMA20'], label='SMA20', color='red')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Price with SMA5 and SMA20')
plt.legend()
plt.show()

# 打印交叉点
cross_buy = (df['SMA5'] > df['SMA20']) & (df['SMA5'].shift(1) <= df['SMA20'].shift(1))
cross_sell = (df['SMA5'] < df['SMA20']) & (df['SMA5'].shift(1) >= df['SMA20'].shift(1))

print("Buy signals on:")
print(df.index)

print("Sell signals on:")
print(df.index)

这个示例中:
1. 我们生成了一组模拟的收盘价数据。
2. 计算了5天和20天的简单移动平均线(SMA)。
3. 使用matplotlib绘制了收盘价和均线。
4. 检测并输出了"金叉"和"死叉"的日期,用于生成买入和卖出信号。

运行这个示例需要确保安装了pandas和matplotlib库。可以通过以下命令安装:

pip install pandas matplotlib

这样就可以在Python中使用均线策略进行简单的量化分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-25 09:56:43

FishC 发表于 2024-11-24 15:55
下面是一个简单的Python示例,演示如何使用pandas库计算和应用均线指标:




这个双均线写得很棒,可以用双均线配合RSI指标,写一个python程序吗?

FishC 发表于 2024-11-25 10:03:36

shadowmage 发表于 2024-11-25 09:56
这个双均线写得很棒,可以用双均线配合RSI指标,写一 ...

下面是一个结合双均线策略和RSI指标的简单Python示例,展示如何在量化交易中使用这两个技术指标。为了实现这个功能,你需要安装`pandas`、`matplotlib`和`ta`库:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import ta

# 生成模拟数据,假设这是收盘价
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=200)
prices = np.cumsum(np.random.randn(200)) + 100

# 创建DataFrame
df = pd.DataFrame(data={'Close': prices}, index=dates)

# 计算移动平均线
df['SMA5'] = df['Close'].rolling(window=5).mean()# 5天均线
df['SMA20'] = df['Close'].rolling(window=20).mean()# 20天均线

# 计算RSI
df['RSI'] = ta.momentum.RSIIndicator(df['Close'], window=14).rsi()

# 策略信号检测
df['Signal'] = 0
df.loc[(df['SMA5'] > df['SMA20']) & (df['RSI'] < 30), 'Signal'] = 1# 买入信号
df.loc[(df['SMA5'] < df['SMA20']) & (df['RSI'] > 70), 'Signal'] = -1# 卖出信号

# 绘制图形
plt.figure(figsize=(14, 7))
plt.plot(df.index, df['Close'], label='Close Price', color='lightgrey')
plt.plot(df.index, df['SMA5'], label='SMA5', color='blue')
plt.plot(df.index, df['SMA20'], label='SMA20', color='red')
plt.scatter(df.index == 1], df['Close'] == 1], marker='^', color='g', label='Buy Signal')
plt.scatter(df.index == -1], df['Close'] == -1], marker='v', color='r', label='Sell Signal')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Price with SMA and RSI-based signals')
plt.legend()
plt.show()

# 打印买卖信号
print("Buy signals on dates:")
print(df.index == 1])

print("Sell signals on dates:")
print(df.index == -1])

在这个示例中:

1. 计算了5天和20天的简单移动平均线(SMA)。
2. 使用`ta`库计算14天的RSI指标。
3. 生成了买入信号(短期均线在长期均线上方且RSI<30)和卖出信号(短期均线在长期均线下方且RSI>70)。
4. 使用`matplotlib`绘制了价格和买卖信号。

运行该代码示例前,请确保已安装必要的Python包(可以通过`pip install pandas matplotlib ta`命令进行安装)。这样你就可以使用双均线结合RSI指标的策略进行简单的量化分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-26 10:09:39

本帖最后由 shadowmage 于 2024-11-26 10:13 编辑

今天来讲一个“海龟策略”。
海龟策略是个适合股票、期货、外汇等等各种金融产品的策略。
主要原则:
1,市场选择:适用于各种市场,如股票、商品、外汇等。
2,入市信号:使用“突破”(Breakout)信号,价格突破一段时间内的最高价或最低价时,产生买入或卖出信号。
3,头寸规模:根据市场波动性确定交易的头寸规模,使用“波动性单位”(Volatility Unit)概念。
4,风险管理:设定止损点位,控制风险。
5,退出信号:使用“逆突破”(Reverse Breakout)信号,价格突破一段时间内的相反方向的最高价或最低价时,产生卖出或买入平仓信号。

具体步骤:
1.选择市场和时间周期。
2.确定入市和退出的突破参数(如20日最高价或最低价)。
3.计算头寸规模,通常基于账户风险的百分比和市场的波动性。
4.执行交易并设置止损点。
5.根据市场情况调整头寸,包括加仓和减仓。

优缺点:
优点:减少主观决策,提高交易的一致性和纪律性;在趋势明显的市场中能获取较大收益。
缺点:在震荡市场中可能产生较多的小额亏损;可能在极端行情下出现较大的回撤。

FishC 发表于 2024-11-26 10:09:54

shadowmage 发表于 2024-11-26 10:09
今天来讲一个“海龟策略”。
海龟策略是个适合股票、 ...

OK 海龟交易法则是一种经典的趋势跟踪策略,能够在各种金融市场中使用。让我们用Python实现一个简单的海龟策略例子:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据,假设这是收盘价
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100)
prices = np.cumsum(np.random.randn(100)) + 100

# 创建DataFrame
df = pd.DataFrame(data={'Close': prices}, index=dates)

# 计算20日最高价和最低价
df['20D_High'] = df['Close'].rolling(window=20).max()
df['20D_Low'] = df['Close'].rolling(window=20).min()

# 创建信号列
df['Signal'] = 0

# 入市信号:价格突破20日最高价时买入
df.loc > df['20D_High'].shift(1), 'Signal'] = 1

# 退出信号:价格突破20日最低价时卖出
df.loc < df['20D_Low'].shift(1), 'Signal'] = -1

# 绘制图形
plt.figure(figsize=(14, 7))
plt.plot(df.index, df['Close'], label='Close Price', color='lightgrey')
plt.plot(df.index, df['20D_High'], label='20D High', linestyle='--', color='green')
plt.plot(df.index, df['20D_Low'], label='20D Low', linestyle='--', color='red')
plt.scatter(df.index == 1], df['Close'] == 1], marker='^', color='g', label='Buy Signal')
plt.scatter(df.index == -1], df['Close'] == -1], marker='v', color='r', label='Sell Signal')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Price with Turtle Strategy Signals')
plt.legend()
plt.show()

# 打印买卖信号日期
print("Buy signals on dates:")
print(df.index == 1])

print("Sell signals on dates:")
print(df.index == -1])

在这个示例中:
1. 生成了一组模拟的收盘价数据。
2. 计算了20日内的最高价和最低价。
3. 产生了入市和退出的买卖信号。
4. 使用`matplotlib`绘制了价格和买卖信号的图形。

这个策略简单易懂,可以通过调整参数来适应不同的市场情况。在实际交易中,还需要加入头寸规模的计算和止损策略等风险管理措施。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-26 10:17:22

今天讲个海龟策略
海龟策略用于股票、期货、外汇等金融产品。
主要原则:
1,市场选择:适用于各种市场,如股票、商品、外汇等。
2,入市信号:使用“突破”(Breakout)信号,价格突破一段时间内的最高价或最低价时,产生买入或卖出信号。
3,头寸规模:根据市场波动性确定交易的头寸规模,使用“波动性单位”(Volatility Unit)概念。
4,风险管理:设定止损点位,控制风险。
5,退出信号:使用“逆突破”(Reverse Breakout)信号,价格突破一段时间内的相反方向的最高价或最低价时,产生卖出或买入平仓信号。

具体步骤:
1.选择市场和时间周期。
2.确定入市和退出的突破参数(如20日最高价或最低价)。
3.计算头寸规模,通常基于账户风险的百分比和市场的波动性。
4.执行交易并设置止损点。
5.根据市场情况调整头寸,包括加仓和减仓。

优缺点:
优点:减少主观决策,提高交易的一致性和纪律性;在趋势明显的市场中能获取较大收益。
缺点:在震荡市场中可能产生较多的小额亏损;可能在极端行情下出现较大的回撤。

FishC 发表于 2024-11-26 10:17:37

shadowmage 发表于 2024-11-26 10:17
今天讲个海龟策略
海龟策略用于股票、期货、外汇等金 ...

海龟交易法则是一种经典的趋势跟踪策略,适合在股票、期货、外汇等市场中使用。以下是策略的主要原则和步骤:

主要原则:
1. 市场选择:适用于各种市场,如股票、商品、外汇等。
2. 入市信号: 使用“突破”(Breakout)信号,即价格突破一段时间内的最高价或最低价时,产生买入或卖出信号。
3. 头寸规模: 根据市场波动性确定交易的头寸规模,使用“波动性单位”(Volatility Unit)概念。
4. 风险管理: 设定止损点位控制风险。
5. 退出信号: 使用“逆突破”(Reverse Breakout)信号,即价格突破一段时间内的相反方向的最高价或最低价时,产生卖出或买入平仓信号。

具体步骤:
1. 选择市场和时间周期。
2. 确定入市和退出的突破参数(如20日最高价或最低价)。
3. 计算头寸规模,基于账户风险的百分比和市场的波动性。
4. 执行交易并设置止损点。
5. 根据市场情况调整头寸,包括加仓和减仓。

优缺点:
- 优点: 减少主观决策,提高交易的一致性和纪律性;在趋势明显的市场中能获取较大收益。
- 缺点: 在震荡市场中可能产生较多的小额亏损;可能在极端行情下出现较大的回撤。

海龟策略的关键在于严格遵守系统规则,集中于风险管理和头寸调整,从而在趋势明显的市场中获得收益。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-26 18:38:18

FishC 发表于 2024-11-26 10:17
海龟交易法则是一种经典的趋势跟踪策略,适合在股票、期货、外汇等市场中使用。以下是策略的主要原则和 ...

讲讲海龟交易法则的具体运用吧,比如入市信号以突破20日最高价买入,退出以逆突破20日最低价卖出,用半导体ETF(代码512480.SH)为例

FishC 发表于 2024-11-26 18:38:42

shadowmage 发表于 2024-11-26 18:38
讲讲海龟交易法则的具体运用吧,比如入市信号以突破20 ...

要在Python中实现海龟交易法则,以半导体ETF(代码512480.SH)为例,可以使用`pandas`和数据接口库(如`yfinance`或其他支持中国市场的数据源)来获取数据。以下是一个示例,演示如何计算并应用入市和退出信号:

import pandas as pd
import matplotlib.pyplot as plt

# 假设'get_data'是一个函数,能够获取给定代码的历史数据(可以根据实际数据源编写)
def get_data(code, start, end):
    # 在这里实现从某个数据源获取历史数据
    # 这里仅提供一个示例结构
    return pd.DataFrame()# 返回的数据框应该至少包含一个'Date'和'Close'列

# 获取半导体ETF数据(假定在2023年全年)
data = get_data('512480.SH', '2023-01-01', '2023-12-31')

# 确保数据按日期排序
data.sort_values(by='Date', inplace=True)

# 计算20日最高价和最低价
data['20D_High'] = data['Close'].rolling(window=20).max()
data['20D_Low'] = data['Close'].rolling(window=20).min()

# 创建信号列
data['Signal'] = 0

# 入市信号:价格突破20日最高价时买入
data.loc > data['20D_High'].shift(1), 'Signal'] = 1

# 退出信号:价格突破20日最低价时卖出
data.loc < data['20D_Low'].shift(1), 'Signal'] = -1

# 绘制信号图形
plt.figure(figsize=(14, 7))
plt.plot(data['Date'], data['Close'], label='Close Price', color='lightgrey')
plt.plot(data['Date'], data['20D_High'], linestyle='--', color='green', label='20D High')
plt.plot(data['Date'], data['20D_Low'], linestyle='--', color='red', label='20D Low')
plt.scatter(data['Date'] == 1], data['Close'] == 1],
            marker='^', color='g', label='Buy Signal')
plt.scatter(data['Date'] == -1], data['Close'] == -1],
            marker='v', color='r', label='Sell Signal')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Turtle Trading Signals for 512480.SH')
plt.legend()
plt.show()

# 打印买卖信号日期
buy_signals = data['Date'] == 1]
sell_signals = data['Date'] == -1]

print("Buy signals on dates:")
print(buy_signals)

print("Sell signals on dates:")
print(sell_signals)

在这个例子中:
1. 假设从某个数据源获取了“512480.SH”的历史数据。
2. 计算20日内的最高价和最低价以确定买入和卖出信号。
3. 生成入市和退出信号,并绘制了相应的价格图及信号标记。

注意:实际使用中,你需要根据具体的数据源编写`get_data`函数来提取数据,并根据实际情况进行参数调整和优化。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-28 09:13:01

@FishC,今天给讲讲“Dual Thrust策略”吧。

FishC 发表于 2024-11-28 09:13:10

shadowmage 发表于 2024-11-28 09:13
@FishC,今天给讲讲“Dual Thrust策略”吧。

Dual Thrust策略是一种简单但有效的日内交易策略,广泛应用于期货和外汇市场。该策略通过计算前几日的价格范围,设置当日的突破区间来进行交易。以下是策略的基本原理和实现步骤:

基本原理:
1. 计算前N日(通常是1天)的最高价、最低价、开盘价、收盘价。
2. 计算出上突破和下突破的界限:
   - 上突破 = 当日开盘价 + K1 * (前N日最高价 - 前N日最低价)
   - 下突破 = 当日开盘价 - K2 * (前N日最高价 - 前N日最低价)
3. 当当日价格突破上界限时买入,突破下界限时卖出。
4. K1和K2是自行设定的系数,用于调整突破范围,通常根据市场波动性来设定。

实现步骤:
1. 获取目标市场的历史数据。
2. 计算前N日的最高价和最低价。
3. 根据开盘价和计算出的突破范围,设定当日的上、下突破界限。
4. 一旦价格突破界限,就进行相应的买入或卖出操作。

注意事项:
- 策略参数N, K1, K2需要根据具体市场进行优化。
- 需考虑交易成本、滑点等因素对策略的影响。

这个策略简单易于实现,适合于周期性范围震荡或波动性较高的市场。在实际应用中,如搭配其他风险管理措施,如止损、止盈,可以进一步提高策略的稳定性和收益。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-28 12:18:26

FishC 发表于 2024-11-28 09:13
Dual Thrust策略是一种简单但有效的日内交易策略,广泛应用于期货和外汇市场。该策略通过计算前几日的 ...

K1,K2如何根据市场进行优化说说看
比如N取1时,波动约3.6%;N取5时,波动约6.76%。
这种情况下,如何取到大致的K1,K2值?

FishC 发表于 2024-11-28 12:18:49

shadowmage 发表于 2024-11-28 12:18
K1,K2如何根据市场进行优化说说看
比如N取1时,波动 ...

在优化Dual Thrust策略的参数K1和K2时,需要考虑市场的波动性和特定市场的特性。通常会通过历史数据进行回测,根据回测结果来调整这两个参数以达到最佳效果。以下是一些常用的指导原则:

1. **根据市场波动性调整:**
   - 当市场波动较大时,可以适当增加K1和K2,以避免过多的假突破信号。较大的K值会导致突破区间更宽,从而减少噪声信号的干扰。
   - 当市场波动较小时,可以减小K1和K2,使策略更加敏感并捕捉小范围的价格波动。

2. **K值的一般范围:**
   - 对于较短的回溯天数(如N=1),市场波动可能较小,可以考虑K1和K2的范围在0.3到0.5之间。
   - 对于较长的回溯天数(如N=5),市场波动较大,可以考虑K1和K2的范围在0.7到1.0之间。

3. **回测优化:**
   - 可以使用历史数据对不同的K1、K2组合进行回测,通过优化优化算法来寻找一组在特定市场和时间段中表现良好的参数。
   - 注意回测时需要考虑交易成本、滑点等因素,这些因素会影响策略的表现。

4. **风险管理与调整:**
   - 在策略运行过程中,定期评估策略表现,根据市场变化或策略回测的过拟合迹象调整K值。

5. **使用工具优化:**
   - 借助如Python、R等语言的量化工具,可以运行大量的历史模拟,得出较优的参数设置。
   - 例如,可以使用`scipy.optimize`中的优化函数来自动调节K值以最小化假设的策略回撤或最大化收益。

通过多次调整,正确设置K1和K2对于提高策略的稳定性和收益至关重要。请注意市场是动态变化的,定期优化和回测策略参数是保持策略有效性的关键。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shadowmage 发表于 2024-11-29 11:31:10

@FishC,今天说说“阿尔法策略(Alpha Strategy)”,重点说说市场基准收益率是怎么算出来,以及阿尔法策略怎么筛选出超越市场基准收益率的股票
页: [1] 2
查看完整版本: 这个区,居然没人分享什么是策略吗?