216 lines
6.0 KiB
Python
216 lines
6.0 KiB
Python
"""
|
|
Example Usage of Trading Agents
|
|
|
|
This script demonstrates how to use the trading agents system.
|
|
"""
|
|
import asyncio
|
|
import logging
|
|
from src.agents.atlas import AtlasAgent
|
|
from src.agents.orion import OrionAgent
|
|
from src.agents.nova import NovaAgent
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
|
|
|
|
async def example_atlas_agent():
|
|
"""
|
|
Example: Running Atlas agent (Conservative)
|
|
"""
|
|
print("\n" + "="*60)
|
|
print("Example 1: Atlas Agent (Conservative)")
|
|
print("="*60)
|
|
|
|
# Create agent with $1000 initial equity
|
|
agent = AtlasAgent(equity=1000.0)
|
|
|
|
# Start the agent
|
|
await agent.start()
|
|
|
|
print(f"\nAgent Status: {agent.status.value}")
|
|
print(f"Initial Equity: ${agent.equity:.2f}")
|
|
print(f"Allowed Pairs: {agent.config.allowed_pairs}")
|
|
print(f"Max Positions: {agent.config.max_positions}")
|
|
print(f"Max Drawdown: {agent.config.max_drawdown}%")
|
|
|
|
# Simulate receiving a BUY signal
|
|
print("\n--- Simulating BUY signal for BTCUSDT ---")
|
|
signal = {
|
|
'symbol': 'BTCUSDT',
|
|
'action': 'buy',
|
|
'confidence': 0.85,
|
|
'price': 45000.0
|
|
}
|
|
|
|
await agent.on_signal(signal)
|
|
|
|
# Check metrics
|
|
print("\n--- Agent Metrics ---")
|
|
metrics = agent.get_metrics()
|
|
for key, value in metrics.items():
|
|
print(f"{key}: {value}")
|
|
|
|
# Stop the agent
|
|
await agent.stop()
|
|
|
|
|
|
async def example_orion_agent():
|
|
"""
|
|
Example: Running Orion agent (Moderate)
|
|
"""
|
|
print("\n" + "="*60)
|
|
print("Example 2: Orion Agent (Moderate)")
|
|
print("="*60)
|
|
|
|
# Create agent
|
|
agent = OrionAgent(equity=5000.0)
|
|
await agent.start()
|
|
|
|
print(f"\nAgent: {agent.config.name}")
|
|
print(f"Profile: {agent.config.profile.value}")
|
|
print(f"Equity: ${agent.equity:.2f}")
|
|
|
|
# Simulate multiple signals
|
|
signals = [
|
|
{'symbol': 'BTCUSDT', 'action': 'buy', 'confidence': 0.75, 'price': 45000.0},
|
|
{'symbol': 'ETHUSDT', 'action': 'buy', 'confidence': 0.70, 'price': 2800.0},
|
|
{'symbol': 'BNBUSDT', 'action': 'buy', 'confidence': 0.68, 'price': 350.0},
|
|
]
|
|
|
|
print("\n--- Processing signals ---")
|
|
for signal in signals:
|
|
print(f"\nSignal: {signal['symbol']} {signal['action']} @ ${signal['price']:.2f}")
|
|
await agent.on_signal(signal)
|
|
|
|
# Show positions
|
|
print(f"\n--- Open Positions: {len(agent.positions)} ---")
|
|
for pos in agent.positions:
|
|
print(f" {pos.symbol}: {pos.side.upper()} {pos.quantity:.6f} @ ${pos.entry_price:.2f}")
|
|
print(f" SL: ${pos.stop_loss:.2f}, TP: ${pos.take_profit:.2f}")
|
|
|
|
await agent.stop()
|
|
|
|
|
|
async def example_nova_agent():
|
|
"""
|
|
Example: Running Nova agent (Aggressive)
|
|
"""
|
|
print("\n" + "="*60)
|
|
print("Example 3: Nova Agent (Aggressive)")
|
|
print("="*60)
|
|
|
|
# Create agent
|
|
agent = NovaAgent(equity=10000.0)
|
|
await agent.start()
|
|
|
|
print(f"\nAgent: {agent.config.name}")
|
|
print(f"Profile: {agent.config.profile.value}")
|
|
print(f"Max Trades/Day: {agent.config.max_trades_per_day}")
|
|
print(f"Max Positions: {agent.config.max_positions}")
|
|
|
|
# Simulate high-frequency signals
|
|
print("\n--- Processing multiple signals ---")
|
|
for i in range(5):
|
|
signal = {
|
|
'symbol': f"{['BTC', 'ETH', 'BNB', 'ADA', 'XRP'][i]}USDT",
|
|
'action': 'buy',
|
|
'confidence': 0.60 + (i * 0.05),
|
|
'price': 100.0 * (i + 1)
|
|
}
|
|
print(f"Signal {i+1}: {signal['symbol']} {signal['action']}")
|
|
await agent.on_signal(signal)
|
|
|
|
# Show metrics
|
|
metrics = agent.get_metrics()
|
|
print(f"\n--- Metrics ---")
|
|
print(f"Total Trades: {metrics['total_trades']}")
|
|
print(f"Positions: {metrics['positions']}")
|
|
print(f"Win Rate: {metrics['win_rate']:.2f}%")
|
|
|
|
await agent.stop()
|
|
|
|
|
|
async def example_risk_management():
|
|
"""
|
|
Example: Risk management in action
|
|
"""
|
|
print("\n" + "="*60)
|
|
print("Example 4: Risk Management")
|
|
print("="*60)
|
|
|
|
agent = AtlasAgent(equity=1000.0)
|
|
await agent.start()
|
|
|
|
# Test 1: Max positions limit
|
|
print("\n--- Test: Max Positions Limit ---")
|
|
for i in range(5): # Try to open 5 positions (max is 3 for Atlas)
|
|
signal = {
|
|
'symbol': f"TEST{i}USDT",
|
|
'action': 'buy',
|
|
'confidence': 0.85,
|
|
'price': 100.0
|
|
}
|
|
can_open = agent.can_open_position()
|
|
print(f"Position {i+1}: {'✓ Can open' if can_open else '✗ Cannot open (max reached)'}")
|
|
if can_open:
|
|
# Manually add position for testing
|
|
from src.agents.base import Position
|
|
pos = Position(
|
|
symbol=signal['symbol'],
|
|
side='buy',
|
|
quantity=0.01,
|
|
entry_price=signal['price'],
|
|
current_price=signal['price']
|
|
)
|
|
agent.add_position(pos)
|
|
|
|
# Test 2: Drawdown limit
|
|
print("\n--- Test: Drawdown Limit ---")
|
|
agent.update_equity(1000.0) # Reset
|
|
agent.peak_equity = 1000.0
|
|
|
|
print(f"Initial: Equity=${agent.equity:.2f}, Peak=${agent.peak_equity:.2f}")
|
|
|
|
# Simulate losses
|
|
agent.update_equity(970.0) # -3%
|
|
print(f"After -3% loss: Drawdown={agent.metrics.current_drawdown:.2f}%")
|
|
|
|
agent.update_equity(950.0) # -5%
|
|
print(f"After -5% loss: Drawdown={agent.metrics.current_drawdown:.2f}%")
|
|
|
|
# Check if can trade
|
|
can_trade = await agent.check_risk_limits()
|
|
print(f"Can trade: {'✓ Yes' if can_trade else '✗ No (max drawdown reached)'}")
|
|
|
|
await agent.stop()
|
|
|
|
|
|
async def main():
|
|
"""Run all examples"""
|
|
print("\n" + "="*60)
|
|
print("OrbiQuant Trading Agents - Usage Examples")
|
|
print("="*60)
|
|
|
|
# Run examples
|
|
await example_atlas_agent()
|
|
await asyncio.sleep(1)
|
|
|
|
await example_orion_agent()
|
|
await asyncio.sleep(1)
|
|
|
|
await example_nova_agent()
|
|
await asyncio.sleep(1)
|
|
|
|
await example_risk_management()
|
|
|
|
print("\n" + "="*60)
|
|
print("All examples completed!")
|
|
print("="*60 + "\n")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|