crypto_quant/play.py

99 lines
4.5 KiB
Python
Raw Normal View History

import logging
from core.base import QuantTrader
from core.strategy import QuantStrategy
2025-07-21 05:05:59 +00:00
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
2025-07-21 07:46:48 +00:00
def main() -> None:
2025-07-21 05:05:59 +00:00
"""主函数"""
logging.info("=== 比特币量化交易系统 ===")
2025-07-21 05:05:59 +00:00
# 导入配置
try:
2025-07-24 10:23:00 +00:00
from config import API_KEY, SECRET_KEY, PASSPHRASE, SANDBOX, TRADING_CONFIG, TIME_CONFIG
2025-07-21 05:05:59 +00:00
except ImportError:
logging.error("找不到config.py文件请确保配置文件存在")
2025-07-21 05:05:59 +00:00
return
# 检查是否配置了API密钥
if API_KEY == "your_api_key_here":
logging.error("请先在config.py中配置你的OKX API密钥\n1. 登录OKX官网\n2. 进入API管理页面\n3. 创建API Key、Secret Key和Passphrase\n4. 将密钥填入config.py文件中的相应位置")
2025-07-21 05:05:59 +00:00
return
# 创建交易器实例
2025-07-24 10:23:00 +00:00
# sandbox = TRADING_CONFIG.get("sandbox", True)
symbol = TRADING_CONFIG.get("symbol", "BTC-USDT")
position_size = TRADING_CONFIG.get("position_size", 0.001)
trader = QuantTrader(
API_KEY, SECRET_KEY, PASSPHRASE,
2025-07-24 10:23:00 +00:00
sandbox=SANDBOX,
symbol=symbol,
position_size=position_size
)
strategy = QuantStrategy(
2025-07-21 05:05:59 +00:00
API_KEY, SECRET_KEY, PASSPHRASE,
2025-07-24 10:23:00 +00:00
sandbox=SANDBOX,
symbol=symbol,
position_size=position_size
2025-07-21 05:05:59 +00:00
)
# 显示菜单
while True:
logging.info("\n请选择操作:\n1. 查看账户余额\n2. 查看当前价格\n3. 执行移动平均线策略\n4. 执行RSI策略\n5. 执行网格交易策略\n6. 运行策略循环\n7. 买入测试\n8. 卖出测试\n9. 获取最小交易量\n0. 退出")
2025-07-21 07:46:48 +00:00
choice = input("请输入选择 (0-9): ").strip()
2025-07-21 05:05:59 +00:00
if choice == '0':
logging.info("退出程序")
2025-07-21 05:05:59 +00:00
break
elif choice == '1':
trader.get_account_balance()
elif choice == '2':
trader.get_current_price()
elif choice == '3':
sma_short_period = TRADING_CONFIG.get("sma_short_period", 5)
sma_long_period = TRADING_CONFIG.get("sma_long_period", 20)
strategy.simple_moving_average_strategy(sma_short_period, sma_long_period)
2025-07-21 05:05:59 +00:00
elif choice == '4':
period = TRADING_CONFIG.get("rsi_period", 14)
rsi_oversold = TRADING_CONFIG.get("rsi_oversold", 30)
rsi_overbought = TRADING_CONFIG.get("rsi_overbought", 70)
strategy.rsi_strategy(period, rsi_oversold, rsi_overbought)
2025-07-21 05:05:59 +00:00
elif choice == '5':
grid_levels = TRADING_CONFIG.get("grid_levels", 5)
grid_range = TRADING_CONFIG.get("grid_range", 0.02)
strategy.grid_trading_strategy(grid_levels, grid_range)
2025-07-21 05:05:59 +00:00
elif choice == '6':
strategy_name = input("选择策略 (sma/rsi/grid): ").strip()
interval = TIME_CONFIG.get("strategy_interval", 30)
strategy.run_strategy_loop(strategy_name, interval, TRADING_CONFIG)
2025-07-21 07:46:48 +00:00
elif choice == '7':
defalt_position_size = 0.01
2025-07-21 07:46:48 +00:00
input_size = input("请输入买入数量: ")
if input_size:
try:
position_size = float(input_size)
logging.info(f"买入{position_size}BTC")
2025-07-21 07:46:48 +00:00
trader.place_market_order('buy', position_size)
except ValueError:
logging.warning(f"输入无效,默认买入{defalt_position_size}BTC")
trader.place_market_order('buy', defalt_position_size)
else:
logging.info(f"默认买入{defalt_position_size}BTC")
trader.place_market_order('buy', defalt_position_size)
2025-07-21 07:46:48 +00:00
elif choice == '8':
defalt_position_size = 0.01
2025-07-21 07:46:48 +00:00
input_size = input("请输入卖出数量: ")
if input_size:
try:
position_size = float(input_size)
logging.info(f"卖出{position_size}BTC")
2025-07-21 07:46:48 +00:00
trader.place_market_order('sell', position_size)
except ValueError:
logging.warning(f"输入无效,默认卖出{defalt_position_size}BTC")
trader.place_market_order('sell', defalt_position_size)
else:
logging.info(f"默认卖出{defalt_position_size}BTC")
trader.place_market_order('sell', defalt_position_size)
2025-07-21 07:46:48 +00:00
elif choice == '9':
trader.get_minimun_order_size()
2025-07-21 05:05:59 +00:00
else:
logging.warning("无效选择,请重新输入")
2025-07-21 05:05:59 +00:00
if __name__ == "__main__":
main()