Phân tích phái sinh

Ứng dụng tính số điểm tăng/giảm ở các nến và thống kê khi nến 15 phút tăng trên 10 điểm:

import pandas as pd

from FiinQuantX import FiinSession

# Đăng nhập
username = 'REPLACE_WITH_YOUR_USER_NAME'
password = 'REPLACE_WITH_YOUR_PASS_WORD'

client = FiinSession(username=username, password=password).login()

# Lấy dữ liệu nến 15 phút của VN30F1M
event = client.Fetch_Trading_Data(
    realtime=False,
    tickers=["VN30F1M"],
    fields=["open", "close", "volume"],
    adjusted=True,
    by="15m",
    period=1000
)
 
df = event.get_data()
 
# Tính chênh lệch giá và volume trung bình 5 nến
df["diff"] = df["close"] - df["open"]
df["vol_avg_5"] = df["volume"].rolling(window=5).mean()
 
# Lọc nến tăng > 10 điểm
signal_bars = df[df["diff"] > 10].copy()
 
# Tính tỷ lệ volume so với trung bình
signal_bars["vol_ratio"] = signal_bars["volume"] / signal_bars["vol_avg_5"]
 
# Tính số điểm tăng/giảm ở các nến kế tiếp
results = []
for idx in signal_bars.index:
    try:
        base_price = df.loc[idx]["close"]
        point_changes = [
            df.loc[idx+1]["close"] - base_price,
            df.loc[idx+2]["close"] - base_price,
            df.loc[idx+3]["close"] - base_price,
        ]
    except:
        point_changes = [None, None, None]
    results.append(point_changes)
 
signal_bars[["n+1_pts", "n+2_pts", "n+3_pts"]] = pd.DataFrame(results, index=signal_bars.index)
 
# In kết quả chi tiết
print(signal_bars[["timestamp", "open", "close", "diff", "volume", "vol_ratio", "n+1_pts", "n+2_pts", "n+3_pts"]])
 
# Thống kê
print("\n📊 Thống kê khi nến 15' tăng > 10 điểm:")
print(f"Tổng số nến tín hiệu: {len(signal_bars)}")
print(f" - N+1 trung bình: {signal_bars['n+1_pts'].mean():.2f} điểm")
print(f" - N+2 trung bình: {signal_bars['n+2_pts'].mean():.2f} điểm")
print(f" - N+3 trung bình: {signal_bars['n+3_pts'].mean():.2f} điểm")
print(f" - Tỷ lệ volume TB (vol_ratio): {signal_bars['vol_ratio'].mean():.2f} lần")

Kết quả trả ra

Last updated