Pharos
TAMath ops

DIV - 向量除法

TA.DIV() - 数组元素相除

返回数学运算目录


语法

python
result = TA.DIV(array1, array2)

参数

参数类型说明
array1array被除数数组
array2array除数数组

返回值

返回一个新数组,每个元素是 array1[i] / array2[i]

计算方法

plaintext
result[i] = array1[i] / array2[i]

⚠️ 注意:除数不能为0,否则返回错误或无穷大。

使用场景

  1. 百分比计算:变化量除以基准值
  2. 比率分析:两个指标的比值
  3. 标准化:数据归一化处理

基础示例

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卖ETH

2. 收益率计算

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 weights

6. 效率比率

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("震荡行情,来回波动")

注意事项

  1. 除零错误:确保除数不为0
  2. 精度损失:浮点数除法可能有精度问题
  3. 数组长度:两个数组长度必须相同
  4. 顺序重要:a/b ≠ b/a

相关函数

  • ADD - 向量加法
  • SUB - 向量减法
  • MULT - 向量乘法

返回数学运算目录 | 返回TA指标