TAMath ops
DIV - 向量除法
TA.DIV() - 数组元素相除
语法
python
result = TA.DIV(array1, array2)参数
| 参数 | 类型 | 说明 |
|---|---|---|
| array1 | array | 被除数数组 |
| array2 | array | 除数数组 |
返回值
返回一个新数组,每个元素是 array1[i] / array2[i]。
计算方法
plaintext
result[i] = array1[i] / array2[i]⚠️ 注意:除数不能为0,否则返回错误或无穷大。
使用场景
- 百分比计算:变化量除以基准值
- 比率分析:两个指标的比值
- 标准化:数据归一化处理
基础示例
python
def onTick():
exchange.SetContractType("swap")
records = exchange.GetRecords()
if len(records) < 30:
return
# 计算涨跌幅
closes = [r.Close for r in records]
current_prices = closes[1:]
prev_prices = closes[:-1]
# 涨跌幅 = (当前价 - 前一价) / 前一价
price_change = TA.SUB(current_prices, prev_prices)
pct_change = TA.MULT(TA.DIV(price_change, prev_prices), [100] * len(price_change))
Log("最新涨跌幅:", pct_change[-1], "%")高级应用
1. 相对强弱比较
python
def onTick():
# BTC数据
records_btc = exchange.GetRecords()
btc_closes = [r.Close for r in records_btc]
# ETH数据
exchange.SetCurrency("ETH_USDT")
records_eth = exchange.GetRecords()
eth_closes = [r.Close for r in records_eth]
# BTC/ETH价格比率
ratio = TA.DIV(btc_closes, eth_closes)
# 比率均线
ratio_ma = TA.MA([{'Close': r} for r in ratio], 20)
if ratio[-1] > ratio_ma[-1] * 1.05:
Log("BTC相对ETH走强,比率偏高")
# 可以考虑卖BTC买ETH
elif ratio[-1] < ratio_ma[-1] * 0.95:
Log("ETH相对BTC走强,比率偏低")
# 可以考虑买BTC卖ETH2. 收益率计算
python
def onTick():
records = exchange.GetRecords()
closes = [r.Close for r in records]
# 不同周期的收益率
periods = [1, 7, 30]
for period in periods:
if len(closes) > period:
current = closes[-1]
past = closes[-period-1]
# 收益率 = (当前价 / 过去价) - 1
return_rate = (current / past - 1) * 100
Log(f"{period}日收益率: {return_rate:.2f}%")3. 波动率标准化
python
def onTick():
records = exchange.GetRecords()
closes = [r.Close for r in records]
# 计算收益率
returns = []
for i in range(1, len(closes)):
ret = (closes[i] - closes[i-1]) / closes[i-1]
returns.append(ret)
# 计算波动率
volatility = TA.STDDEV([{'Close': r} for r in returns], 20)
# 标准化收益率(除以波动率)
std_returns = TA.DIV(returns[-len(volatility):], volatility)
# Z-score大于2视为异常波动
if abs(std_returns[-1]) > 2:
Log("异常波动!Z-score:", std_returns[-1])4. 指标归一化
python
def onTick():
records = exchange.GetRecords()
# RSI (0-100)
rsi = TA.RSI(records, 14)
# 归一化到0-1
rsi_norm = TA.DIV(rsi, [100] * len(rsi))
# CCI (无界)
cci = TA.CCI(records, 14)
# 归一化到-1到1
cci_max = max([abs(c) for c in cci[-50:]])
cci_norm = TA.DIV(cci, [cci_max] * len(cci))
Log("归一化RSI:", rsi_norm[-1])
Log("归一化CCI:", cci_norm[-1])5. 市值占比
python
def calculate_portfolio_weight():
# 获取多个资产的价格和数量
assets = [
{"symbol": "BTC_USDT", "amount": 1},
{"symbol": "ETH_USDT", "amount": 10},
{"symbol": "BNB_USDT", "amount": 50}
]
values = []
for asset in assets:
exchange.SetCurrency(asset["symbol"])
ticker = exchange.GetTicker()
value = ticker.Last * asset["amount"]
values.append(value)
total_value = sum(values)
# 计算每个资产的占比
weights = TA.DIV(values, [total_value] * len(values))
for i, asset in enumerate(assets):
Log(f"{asset['symbol']} 占比: {weights[i]*100:.2f}%")
return weights6. 效率比率
python
def onTick():
records = exchange.GetRecords()
closes = [r.Close for r in records[-50:]]
# 净变化
net_change = abs(closes[-1] - closes[0])
# 总变化(所有日间变化的绝对值之和)
total_change = sum([abs(closes[i] - closes[i-1]) for i in range(1, len(closes))])
# 效率比率 = 净变化 / 总变化
if total_change > 0:
efficiency = net_change / total_change
Log("价格变化效率:", efficiency)
if efficiency > 0.5:
Log("趋势性行情,单边走势明显")
else:
Log("震荡行情,来回波动")注意事项
- 除零错误:确保除数不为0
- 精度损失:浮点数除法可能有精度问题
- 数组长度:两个数组长度必须相同
- 顺序重要:a/b ≠ b/a