stock/examples/05_work_trade_balance.py
2026-02-27 03:17:12 +08:00

115 lines
3.7 KiB
Python

"""Work/Trade Balance Example.
Demonstrates the decision-making between trading and learning
based on economic status.
"""
from openclaw.core.work_trade_balance import WorkTradeBalance, WorkTradeConfig
from openclaw.core.economy import TradingEconomicTracker
def simulate_agent(name: str, balance: float, skill: float, win_rate: float):
"""Simulate an agent with given parameters."""
tracker = TradingEconomicTracker(agent_id=name, initial_capital=balance)
config = WorkTradeConfig(
skill_level=skill,
win_rate=win_rate
)
balance_obj = WorkTradeBalance(
economic_tracker=tracker,
config=config
)
status = tracker.get_survival_status()
decision = balance_obj.decide_activity()
intensity = balance_obj.get_trade_intensity()
return {
'name': name,
'balance': tracker.balance,
'status': status,
'decision': decision.decision,
'position_multiplier': intensity.position_size_multiplier,
'max_positions': intensity.max_concurrent_positions,
'risk_per_trade': intensity.risk_per_trade,
}
def main():
"""Run the work/trade balance example."""
print("=" * 60)
print("OpenClaw Trading - Work/Trade Balance Example")
print("=" * 60)
# Simulate different economic scenarios
print("\n1. Different Economic Scenarios:")
print("-" * 60)
scenarios = [
("Rich Trader", 15000.0, 0.7, 0.65), # Thriving
("Average Trader", 10000.0, 0.5, 0.50), # Stable
("Struggling Trader", 8000.0, 0.4, 0.45), # Struggling
("Poor Trader", 3000.0, 0.3, 0.35), # Critical
]
for name, balance, skill, win_rate in scenarios:
result = simulate_agent(name, balance, skill, win_rate)
print(f"\n {name}:")
print(f" Balance: ${result['balance']:,.2f}")
print(f" Status: {result['status'].value}")
print(f" Decision: {result['decision']}")
print(f" Position Size: {result['position_multiplier']:.0%}")
print(f" Max Positions: {result['max_positions']}")
print(f" Risk/Trade: {result['risk_per_trade']:.1%}")
# Show decision rules
print("\n2. Decision Rules by Economic Status:")
print("-" * 60)
print("""
Thriving (>150%): 70% trade, 30% learn | Max 25% position, 3% risk
Stable (100-150%): 80% trade, 20% learn | Max 20% position, 2% risk
Struggling (50-100%): 90% trade, 10% learn | Max 10% position, 1% risk
Critical (<50%): 100% minimal trade | Max 5% position, 0.5% risk
""")
# Skill level impact
print("\n3. Skill Level Impact:")
print("-" * 60)
tracker = TradingEconomicTracker(agent_id="skill_test", initial_capital=15000.0)
for skill in [0.2, 0.5, 0.8]:
config = WorkTradeConfig(skill_level=skill, win_rate=0.5)
balance = WorkTradeBalance(
economic_tracker=tracker,
config=config
)
decision = balance.decide_activity()
print(f" Skill {skill:.0%}: Decision = {decision.decision}")
# Win rate impact
print("\n4. Win Rate Impact:")
print("-" * 60)
for win_rate in [0.3, 0.5, 0.7]:
config = WorkTradeConfig(skill_level=0.5, win_rate=win_rate)
balance = WorkTradeBalance(
economic_tracker=tracker,
config=config
)
intensity = balance.get_trade_intensity()
print(f" Win Rate {win_rate:.0%}: "
f"Position {intensity.position_size_multiplier:.0%}, "
f"Max Positions {intensity.max_concurrent_positions}")
print("\n" + "=" * 60)
print("Work/Trade balance example complete!")
print("=" * 60)
if __name__ == "__main__":
main()