"""Test Fibonacci retracement levels with real IDX stock data."""
import asyncio
import sys
from pathlib import Path
# Add src to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from src.tools.fibonacci import get_fibonacci_levels
async def test_fibonacci_levels():
"""Test Fibonacci with real stock data."""
test_stocks = ["BBCA", "BBRI", "TLKM"]
print("=" * 70)
print("Testing Fibonacci Retracement & Extension Levels")
print("=" * 70)
print()
for ticker in test_stocks:
print(f"\nπ Testing {ticker}.JK")
print("-" * 70)
try:
# Test Fibonacci levels with auto trend detection
result = await get_fibonacci_levels({
"ticker": ticker,
"period": "3mo",
"trend": "auto"
})
if "error" in result:
print(f"β Error: {result.get('message')}")
continue
# Display results
print(f"Ticker: {result['ticker']}")
print(f"Period: {result['period']}")
print(f"Current Price: Rp {result['current_price']:,.0f}")
print(f"Trend: {result['trend'].upper()}")
print()
# Swing Points
print("π Swing Points:")
print(f" Swing High: Rp {result['swing_high']:,.0f}")
print(f" Swing Low: Rp {result['swing_low']:,.0f}")
print(f" Range: Rp {result['price_range']:,.0f}")
print()
# Retracement Levels
print("π Fibonacci Retracement Levels:")
for level, price in result['retracement_levels'].items():
marker = " π CURRENT" if abs(price - result['current_price']) < result['price_range'] * 0.05 else ""
print(f" {level:6} β Rp {price:>8,.0f}{marker}")
print()
# Extension Levels
print("π Fibonacci Extension Levels:")
for level, price in result['extension_levels'].items():
print(f" {level:6} β Rp {price:>8,.0f}")
print()
# Support/Resistance Analysis
print("π― Support & Resistance Analysis:")
print(f" Nearest Support: {result['nearest_support']['level']:6} at Rp {result['nearest_support']['price']:,.0f}")
print(f" Nearest Resistance: {result['nearest_resistance']['level']:6} at Rp {result['nearest_resistance']['price']:,.0f}")
print(f" Current Position: {result['current_position']}")
print()
# Risk/Reward
if result['risk_reward_ratio'] > 0:
print(f"βοΈ Risk/Reward Ratio: {result['risk_reward_ratio']}")
if result['risk_reward_ratio'] >= 2:
print(f" β
Good R/R ratio (>= 2:1)")
elif result['risk_reward_ratio'] >= 1:
print(f" β οΈ Acceptable R/R ratio (>= 1:1)")
else:
print(f" β Poor R/R ratio (< 1:1)")
print()
# Trading Insights
print("π‘ Trading Insights:")
if result['trend'] == "uptrend":
print(f" β’ Look for buying opportunities at support levels")
print(f" β’ Target: {result['nearest_resistance']['level']} (Rp {result['nearest_resistance']['price']:,.0f})")
print(f" β’ Stop Loss: Below {result['nearest_support']['level']} (Rp {result['nearest_support']['price']:,.0f})")
else:
print(f" β’ Look for selling opportunities at resistance levels")
print(f" β’ Target: {result['nearest_support']['level']} (Rp {result['nearest_support']['price']:,.0f})")
print(f" β’ Stop Loss: Above {result['nearest_resistance']['level']} (Rp {result['nearest_resistance']['price']:,.0f})")
except Exception as e:
print(f"β Exception: {str(e)}")
import traceback
traceback.print_exc()
print("\n" + "=" * 70)
print("β
Fibonacci Testing Complete!")
print("=" * 70)
if __name__ == "__main__":
asyncio.run(test_fibonacci_levels())