Pharos
Global

IsVirtual - 判断是否为回测环境

判断当前策略是否运行在回测环境中。

语法

python
is_backtest = IsVirtual()

参数

无参数。

返回值

返回布尔值(bool):

  • True - 回测环境(虚拟盘)
  • False - 实盘环境

示例

示例1: 基本用法

python
if IsVirtual():
    Log("当前运行在回测环境")
else:
    Log("当前运行在实盘环境")

示例2: 差异化配置

python
if IsVirtual():
    # 回测环境:使用较小的交易量进行快速测试
    trade_amount = 0.001
    check_interval = 100  # 100ms
else:
    # 实盘环境:使用实际交易参数
    trade_amount = 0.1
    check_interval = 5000  # 5秒

Log(f"交易数量: {trade_amount}")
Log(f"检查间隔: {check_interval}ms")

示例3: 条件功能启用

python
def init():
    Log("策略初始化...")
    
    if not IsVirtual():
        # 实盘环境才启用的功能
        setup_risk_control()
        setup_notifications()
        Log("✅ 风控和通知系统已启用")
    else:
        Log("⚠️  回测环境,风控和通知功能已禁用")

def setup_risk_control():
    """设置风控参数(仅实盘)"""
    _G("max_loss", 1000)
    _G("max_position", 10)

def setup_notifications():
    """设置通知(仅实盘)"""
    _G("notify_enabled", True)

示例4: 日志级别控制

python
def log_trade(action, price, amount):
    """记录交易日志"""
    message = f"{action} {amount} @ {price}"
    
    if IsVirtual():
        # 回测环境:简化日志
        Log(message)
    else:
        # 实盘环境:详细日志
        Log(f"========== 实盘交易 ==========")
        Log(f"操作: {action}")
        Log(f"价格: {price}")
        Log(f"数量: {amount}")
        Log(f"时间: {_D()}")
        Log(f"账户: {exchange.GetAccount()}")
        Log(f"================================")
        
        # 实盘环境可能还需要发送通知
        send_notification(message)

def send_notification(message):
    """发送通知(仅实盘)"""
    if not IsVirtual():
        # 发送邮件、短信、微信等通知
        pass

示例5: 调试模式

python
# 回测环境启用详细调试信息
DEBUG_MODE = IsVirtual()

def debug_log(message):
    """调试日志"""
    if DEBUG_MODE:
        Log(f"[DEBUG] {message}")

# 使用调试日志
debug_log("开始检查订单状态")
orders = exchange.GetOrders()
debug_log(f"当前订单数量: {len(orders)}")

示例6: 数据源选择

python
def get_market_data():
    """获取市场数据"""
    if IsVirtual():
        # 回测环境:使用历史数据
        Log("使用历史 K 线数据")
        records = exchange.GetRecords()
        return records
    else:
        # 实盘环境:使用实时数据
        Log("使用实时行情数据")
        ticker = exchange.GetTicker()
        depth = exchange.GetDepth()
        return {"ticker": ticker, "depth": depth}

示例7: 风险提示

python
def execute_high_risk_strategy():
    """执行高风险策略"""
    if not IsVirtual():
        # 实盘环境需要额外确认
        Log("⚠️  警告: 即将在实盘环境执行高风险操作", level="WARNING")
        
        # 检查账户余额
        account = exchange.GetAccount()
        if account['Balance'] > 1000:
            Log("✅ 账户余额充足,继续执行")
        else:
            Log("❌ 账户余额不足,停止执行", level="ERROR")
            return False
    else:
        Log("回测环境,直接执行")
    
    # 执行策略...
    return True

示例8: 性能优化

python
def optimize_for_environment():
    """根据环境优化性能"""
    if IsVirtual():
        # 回测环境:追求速度,减少延迟
        return {
            "sleep_interval": 10,      # 极短的睡眠间隔
            "cache_enabled": True,      # 启用缓存
            "log_level": "ERROR"        # 只记录错误
        }
    else:
        # 实盘环境:追求稳定,避免限流
        return {
            "sleep_interval": 1000,     # 1秒间隔
            "cache_enabled": False,     # 禁用缓存,确保数据实时
            "log_level": "INFO"         # 记录详细信息
        }

config = optimize_for_environment()
Log(f"当前配置: {config}")

注意事项

  1. 环境检测: 当前通过环境变量 IS_BACKTEST 或上下文配置 is_virtual 判断

  2. 默认值: 未设置环境变量时默认为 False(实盘环境)

  3. 应用场景:

    • 区分回测和实盘的不同行为
    • 实盘环境启用风控和通知
    • 回测环境优化性能
    • 调试信息的详细程度控制
  4. 注意区分:

    • 回测环境(IsVirtual() == True): 历史数据回放
    • 实盘环境(IsVirtual() == False): 真实交易
    • 模拟盘: 可能被识别为实盘环境,需要额外判断
  5. 安全性: 在执行真实交易前务必检查 IsVirtual(),避免误操作

相关 API

  • GetOS - 获取操作系统信息
  • _G - 持久化全局变量