44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""Quick test of signal generation pipeline."""
|
|
import os, asyncio
|
|
os.environ['SMC_CREDIT'] = '0'
|
|
os.environ['SANDBOX_MODE'] = 'true'
|
|
os.environ['PYTHONIOENCODING'] = 'utf-8'
|
|
|
|
from execution.paper_exchange import PaperExchangeClient
|
|
from core.data_feed import DataFeed
|
|
from indicators.ict_engine import ICTEngine
|
|
from indicators.multi_timeframe import MultiTimeframeAnalyzer
|
|
from indicators.confluence import ConfluenceChecker
|
|
from strategy.signal_generator import SignalGenerator
|
|
from strategy.entry_rules import EntryRules
|
|
from strategy.exit_rules import ExitRules
|
|
|
|
async def test():
|
|
client = PaperExchangeClient(300)
|
|
await client.connect()
|
|
feed = DataFeed(client)
|
|
await feed.connect()
|
|
await feed.fetch_multi_timeframe('BTC/USDT')
|
|
|
|
engine = ICTEngine()
|
|
mtf = MultiTimeframeAnalyzer(engine)
|
|
confluence = ConfluenceChecker()
|
|
sg = SignalGenerator(engine, mtf, confluence, EntryRules(), ExitRules())
|
|
|
|
try:
|
|
signal = await sg.generate('BTC/USDT', feed)
|
|
if signal:
|
|
print(f'SIGNAL: {signal.direction.value} {signal.symbol} @ ${signal.entry_price:,.2f}')
|
|
print(f' SL: ${signal.stop_loss:,.2f} | TP: ${signal.take_profit:,.2f}')
|
|
print(f' R:R = {signal.risk_reward_ratio:.2f} | Confidence: {signal.confidence}/6')
|
|
print(f' Reasons: {signal.reasons}')
|
|
else:
|
|
print('No signal generated (market conditions not met)')
|
|
except Exception as e:
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
await client.disconnect()
|
|
|
|
asyncio.run(test())
|