|
|
import yfinance as yf |
|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
|
|
|
|
|
|
def combined_vsa_probability(ticker): |
|
|
data = yf.download(ticker, period='5d', interval='1d') |
|
|
|
|
|
latest_day = data.iloc[-1] |
|
|
open_price = latest_day['Open'].item() |
|
|
current_price = latest_day['Close'].item() if latest_day.name.time().strftime('%H:%M') >= '16:00' else yf.Ticker(ticker).history(period="1d", interval="1m").iloc[-1]['Close'].item() |
|
|
volume = latest_day['Volume'].item() |
|
|
avg_volume = data['Volume'].iloc[-4:-1].mean().item() |
|
|
|
|
|
spread = latest_day['High'].item() - latest_day['Low'].item() |
|
|
close_position = (current_price - latest_day['Low'].item()) / spread |
|
|
|
|
|
|
|
|
if (current_price > open_price) and (volume > avg_volume) and close_position > 0.7: |
|
|
probability = "Bullish (Strength): Xác suất ~75-80% tăng tiếp" |
|
|
elif (current_price >= open_price) and close_position > 0.5 and volume >= avg_volume: |
|
|
probability = "Bullish (Possible Strength): Xác suất ~60-65% tăng tiếp" |
|
|
elif (current_price < open_price) and close_position < 0.3 and volume >= avg_volume: |
|
|
probability = "Bearish (Weakness): Xác suất cao giảm hôm sau" |
|
|
else: |
|
|
probability = "Sideway hoặc chưa rõ tín hiệu: Quan sát thêm" |
|
|
|
|
|
return probability |
|
|
|
|
|
|
|
|
st.title("Dự đoán xác suất tăng/giảm hôm sau (Kết hợp VSA) cho SPY & QQQ") |
|
|
|
|
|
for ticker in ["QQQ", "SPY"]: |
|
|
probability = combined_vsa_probability(ticker) |
|
|
st.subheader(f"{ticker}: {probability}") |
|
|
|