mBA-Terminal / tests /test_profile_logic.py
algorembrant's picture
Upload 29 files
c99df4c verified
import sys
import os
import pandas as pd
import numpy as np
# Add project root to sys.path
current_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(current_dir)
sys.path.append(project_root)
from src.core.market_profile import MarketProfile
def test_market_profile_logic():
print("Testing Market Profile Logic (Bid + Ask + Timestamp Interpolation)...")
# 1. Setup Data
# Bid moves from 100.00 to 101.00 (Diff 1.0)
# Ask moves from 100.10 to 101.10 (Diff 1.0)
# Spread = 0.10
# Multiplier = 2.0 -> Bin Size = 0.20
# Expected Gaps for Bid: 1.0 / 0.20 = 5 steps.
# Bid points: 100.0, 100.2, 100.4, 100.6, 100.8, 101.0 -> 6 points.
# Expected Gaps for Ask: 1.0 / 0.20 = 5 steps.
# Ask points: 100.1, 100.3, 100.5, 100.7, 100.9, 101.1 -> 6 points.
# Total Ticks = 12.
multiplier = 2.0
data = {
'datetime': [pd.Timestamp('2023-01-01 10:00:00'), pd.Timestamp('2023-01-01 10:00:01')],
'bid': [100.00, 101.00],
'ask': [100.10, 101.10]
}
df = pd.DataFrame(data)
# 2. Initialize Profile
mp = MarketProfile(multiplier=multiplier)
# 3. Update
mp.update(df)
# 4. Verify
print(f"Total Ticks (Count sum): {mp.total_ticks}")
expected_ticks = 12
if mp.total_ticks == expected_ticks:
print("SUCCESS: Total Ticks match expected (Bid + Ask filled).")
else:
print(f"FAILURE: Expected {expected_ticks}, got {mp.total_ticks}")
print(f"Counts: {mp.counts}")
# Check specific prices
expected_bids = [100.00, 100.20, 100.40, 100.60, 100.80, 101.00]
expected_asks = [100.10, 100.30, 100.50, 100.70, 100.90, 101.10]
all_expected = expected_bids + expected_asks
missing = []
for p in all_expected:
p_rounded = round(p, 2)
if p_rounded not in mp.counts:
missing.append(p_rounded)
if not missing:
print("SUCCESS: All expected Bid and Ask gap prices found.")
else:
print(f"FAILURE: Missing prices: {missing}")
if __name__ == "__main__":
test_market_profile_logic()