量化交易框架

大盘结束:

  1. 历史数据 算出量化数据(MA VOL-MA ATR RSI)及可能趋势
  2. 根据之前的策略制定第二日的交易策略:止损 止盈 多 空

交易日「循环订盘」

  1. 实时观察交易的数据 价格 交易量 ,根据目前的仓位信息,风险数据 发出交易信号(买卖)

铁律:

  1. 没有信号不交易
  2. 当了仓位不买入
  3. 单股不超30% 20%-30%区间

如果一下子跌穿止损价,直接市价卖出。或者直接跌停 那么1%的损失就是为这个存在的,如果卖了不了只能认栽,如果立马突破价格涨停直接挂牌市价卖出。

如果超过买入价 就不买

开盘开盘跌停或者大幅度跌入买入价 不买

低一点就市价买入

发表在 None | 留下评论

仓位管理

1固定损失管理
单次交易最大总仓位1%-3%(1%起步)

仓位=1%*总金额/最大损失股价

可以选3-4只股票减少风险

严格管理40%-60%

发表在 None | 留下评论

决策价格ATR

静态

止损价=买入价-k*ATR

止盈价=买入价+k*ATR

动态:

当前最高价(或近期高点) – k × ATR

或者

多头止损价 = 最新收盘价 – k × ATR ← 但这容易被噪音触发

或者(稳健)

止损价 = 该最高价 – k × ATR (持仓期间最高价)


止盈触发条件:价格从持仓期间最高点回撤 ≥ k × ATR”

即你买入后 回撤 > k*ATR 立即卖出

从你买入那天起,到今天为止,价格曾经达到过的最高价

  • 入场价:100 元
  • 价格上涨到 130 元(持仓最高点 = 130)
  • ATR = 6 元,k = 2 → 允许回撤 = 12 元
  • 止盈触发价 = 130 – 12 = 118 元

“从最高点回撤 ≥ k×ATR” 就像给利润装了一个“弹性保险绳”——
涨得越高,允许它回调的空间越大;
一旦回调超过市场正常波动范围,就果断放手。”

只要价格 < MA5,就不允许新开多单。

  • 只在价格 > MA5 时,才启用 ATR 止损做多(避免逆势交易)
  • 当价格跌破 MA5,即使 ATR 很小,也强制减仓(趋势已坏)

 一、核心逻辑:买入 = 趋势 + 动能 + 风险可控

在空仓时,买入决策通常要同时满足三个条件:

表格

维度指标作用
1. 趋势方向MA5(或更长均线)避免逆势交易
2. 动能/突破价格突破关键位捕捉启动信号
3. 波动率过滤ATR避免在“死水”中假突破

买入 = 同时 3 条

1)趋势:价格 > MA5,MA5 向上

2)突破:今日收盘突破 N 日高点,且阳线,涨幅 > 0.7 倍 ATR

3)波动:当前 ATR 不低于近 20 日 25 分位(排除死水)

发表在 None | 留下评论

计算数据 MA VOL-MA ATR RSI

import pandas as pd
df=pd.read_csv("000021.csv")
# print(df.head())

# df["日期"] = pd.to_datetime(df["日期"])  # 转为时间格式
# df.sort_values("日期", inplace=True)    # 按日期正序排列


df['vol_ma5']=df["成交量"].rolling(window=5).mean()
df['vol_ma10']=df["成交量"].rolling(window=10).mean()
df['vol_ma20']=df["成交量"].rolling(window=20).mean()
df['vol_ma60']=df["成交量"].rolling(window=60).mean()

df['ma5']=df["收盘"].rolling(window=5).mean()
df['ma10']=df["收盘"].rolling(window=10).mean()
df['ma20']=df["收盘"].rolling(window=20).mean()
df['ma60']=df["收盘"].rolling(window=60).mean()

df['高低']=df['最高']-df['最低']
df['高收']=abs(df['最高']-df['收盘'].shift(1))
df['低收']=abs(df['最低']-df['收盘'].shift(1))
df['TR']=df[['高低','高收','低收']].abs().max(axis=1) #axis=1行计算

df['ATR'] = df['TR'].ewm(span=14, adjust=False).mean()

df['delta']=df['收盘'].diff()
df['gain']=df['delta'].where(df['delta']>0,0)
df['loss']=-df['delta'].where(df['delta']<0,0)
df['avg_gain']=df['gain'].rolling(14).mean()
df['avg_loss']=df['loss'].rolling(14).mean()


df['avg_loss'] = df['avg_loss'].replace(0, 1e-6)

df['rs']=df['avg_gain']/df['avg_loss']
df['rsi']=100-(100/(1+df['rs']))
df.to_csv("zzz.csv", index=False)

print(df.head(100))

import pandas as pd

df=pd.read_csv(“000021.csv”)

# print(df.head())

# df[“日期”] = pd.to_datetime(df[“日期”])  # 转为时间格式

# df.sort_values(“日期”, inplace=True)    # 按日期正序排列

df[‘vol_ma5’]=df[“成交量”].rolling(window=5).mean()

df[‘vol_ma10’]=df[“成交量”].rolling(window=10).mean()

df[‘vol_ma20’]=df[“成交量”].rolling(window=20).mean()

df[‘vol_ma60’]=df[“成交量”].rolling(window=60).mean()

df[‘ma5’]=df[“收盘”].rolling(window=5).mean()

df[‘ma10’]=df[“收盘”].rolling(window=10).mean()

df[‘ma20’]=df[“收盘”].rolling(window=20).mean()

df[‘ma60’]=df[“收盘”].rolling(window=60).mean()

df[‘高低’]=df[‘最高’]-df[‘最低’]

df[‘高收’]=abs(df[‘最高’]-df[‘收盘’].shift(1))

df[‘低收’]=abs(df[‘最低’]-df[‘收盘’].shift(1))

df[‘TR’]=df[[‘高低’,’高收’,’低收’]].abs().max(axis=1) #axis=1行计算

df[‘ATR’] = df[‘TR’].ewm(span=14, adjust=False).mean()

df[‘delta’]=df[‘收盘’].diff()

df[‘gain’]=df[‘delta’].where(df[‘delta’]>0,0)

df[‘loss’]=-df[‘delta’].where(df[‘delta’]<0,0)

df[‘avg_gain’]=df[‘gain’].rolling(14).mean()

df[‘avg_loss’]=df[‘loss’].rolling(14).mean()

df[‘avg_loss’] = df[‘avg_loss’].replace(0, 1e-6)

df[‘rs’]=df[‘avg_gain’]/df[‘avg_loss’]

df[‘rsi’]=100-(100/(1+df[‘rs’]))

df.to_csv(“zzz.csv”, index=False)

print(df.head(100))

发表在 None | 留下评论

大方向

ma atr vol-ma

rsi给参考

每日交易日结束给出计算结果

1 买入价

2 卖出价

第二日 触发买入价 买入 触发卖出价卖出

结合趋势制定 买入还是卖出

结合rsi判断

先搞一个分析。

输入股票代码 给出 日线周线及计算的rsi atr 等第二日 数据

重点 舱位管理

账本/ 损失管理/开多少仓 更具止损开仓位

发表在 None | 留下评论