-
BT(买分):今日收盘价高于昨日收盘价时,BT赋值为今日振幅;若不是,则BT为0。 -
TR(真实波幅):TR是以下三者中的最大值:今日最高价 – 今日最低价、今日最高价 – 昨日收盘价的绝对值、昨日收盘价 – 今日最低价。 -
ATR(平均真实波幅):TR的一定周期(通常为7天)的移动平均。

-
买入信号:当UOS值从下向上穿过触发线(例如35),视为买入信号。 -
卖出信号:当UOS值从上向下穿过触发线(例如65),视为卖出信号。 -
趋势确认:UOS值在超买区域上升,确认上升趋势;在超卖区域下降,确认下降趋势。
import pandas as pd
import numpy as np
df['BT'] = np.where(df['Close'] > df['Close'].shift(1), df['High'] - df['Low'], 0)
df['TR'] = np.maximum.reduce([df['High'] - df['Low'],
abs(df['High'] - df['Close'].shift(1)),
abs(df['Low'] - df['Close'].shift(1))])
df['ATR'] = df['TR'].rolling(window=7).mean()
df['UOS'] = (100 * (df['BT'] - df['ATR']) / (df['TR'] + df['ATR'])).rolling(window=3).mean()
df['Signal'] = np.where(
((df['UOS'] > 65) & (df['UOS'].shift(1) < 65)) |
((df['UOS'] < 35) & (df['UOS'].shift(1) > 35)),
1, 0
)
df['Position'] = np.where(df['Signal'] == 1, 'Buy', '')
df['Position'] = np.where(df['Signal'] == -1, 'Sell', df['Position'])
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 7))
plt.plot(df['UOS'], label='UOS')
plt.plot(df['Close'], label='Close Price', alpha=0.5)
plt.scatter(df.index[df['Signal'] == 1], df['UOS'][df['Signal'] == 1], label='Buy Signal', color='green')
plt.scatter(df.index[df['Signal'] == -1], df['UOS'][df['Signal'] == -1], label='Sell Signal', color='red')
plt.legend()
plt.show()
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/106011
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!