决策价格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避免在“死水”中假突破

发表在 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 | 留下评论

拟合数据

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

发表在 None | 留下评论

量化交易 【交易量】VOL-MA OBV

【只能预测下个交易日】【不能盘中使用】

VOL-MA(也常写作 VMA),全称 Volume Moving Average,即成交量均线,是金融交易中最基础、最常用的技术指标之一。

VOL-MA5(5 日成交量均线)

VOL-MA10(10 日成交量均线)

VOL-MA20(20 日成交量均线)。

量价配合:股价上涨时,成交量 > VOL-MA,且VOL-MA5 上穿 VOL-MA10(金叉),通常视为资金进场、趋势强势的信号。

量价背离:股价上涨但成交量 < VOL-MA,或VOL-MA5 下穿 VOL-MA10(死叉),提示上涨动能不足,需警惕回调。

缩量确认:股价回调时,成交量萎缩至 VOL-MA 下方,抛压减轻,可能是阶段性底部信号。

import akshare as ak
import pandas as pd

# 日
# df = ak.stock_zh_a_hist(symbol="000021", period="daily", start_date="20250101", end_date="20260313", adjust="qfq")
# 周
# df = ak.stock_zh_a_hist(symbol="000021", period="weekly", start_date="20250101", end_date="20260313", adjust="qfq")



# df.to_csv("000021z.csv", index=False)
# print("数据已保存,共", len(df), "行")

df=pd.read_csv("000021z.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()

VOL-MA自己定义

OBV(能量潮)

OBV 是将成交量与股价涨跌结合的累计指标

  • OBV 与股价同步上涨:量价配合,上涨趋势健康;
  • OBV 上涨但股价横盘:资金悄悄进场,可能即将突破;
  • OBV 下跌但股价上涨:量价背离,上涨动能不足,警惕回调。

OBV 初始值设为 0(无前日数据,无法判断涨跌)

OBV=OBV昨日+(涨成交量/负成交量/0)

发表在 None | 留下评论