本示例展示一个只输出日志的最小 QMT 策略，不涉及任何交易委托，适合用来验证 QMT 内置 Python 运行环境是否正常工作。策略在 `init` 中初始化股票池并打印一条日志，在 `handlebar` 中判断当前是否为最新 K 线并输出 Bar 位置信息。

## 示例目标

创建一个只输出日志的最小策略，确认 QMT 内置 Python 环境能够正常加载策略文件、执行 `init` 和 `handlebar` 回调，并在输出面板中显示日志。

## 适用环境

| 环境 | 是否支持 |
|------|----------|
| 回测环境 | 支持 |
| 模拟信号 | 支持 |
| 仿真交易环境 | 不适用（无需交易） |
| 真实交易环境 | 不适用（无需交易） |

## 运行位置

QMT 客户端 - 量化交易模块。

## 使用周期

日线（`1d`）。本策略对周期无特殊要求，任意周期均可运行。

## 是否可能产生真实委托

否。本策略不包含任何下单函数调用，不会产生真实委托或模拟委托。

## 需要修改的参数

无。代码可直接复制运行，无需修改任何参数。

## 完整代码

```python
def init(ContextInfo):
    """策略初始化，仅执行一次"""
    ContextInfo.set_universe(['600000.SH'])
    print('策略初始化完成')

def handlebar(ContextInfo):
    """每根 K 线触发一次"""
    if ContextInfo.is_last_bar():
        print('当前Bar时间:', ContextInfo.barpos)
```

## 代码分段说明

### init 函数

```python
def init(ContextInfo):
    ContextInfo.set_universe(['600000.SH'])
    print('策略初始化完成')
```

- `ContextInfo.set_universe(['600000.SH'])`：设置股票池为浦发银行（600000.SH）。股票池决定了策略可以获取哪些品种的行情数据。
- `print('策略初始化完成')`：在输出面板打印一条日志，用于确认 `init` 已被执行。

### handlebar 函数

```python
def handlebar(ContextInfo):
    if ContextInfo.is_last_bar():
        print('当前Bar时间:', ContextInfo.barpos)
```

- `ContextInfo.is_last_bar()`：判断当前 K 线是否为最新一根。在回测模式下，所有历史 K 线都会触发 `handlebar`，通过此判断可以只在最新 K 线执行逻辑。
- `ContextInfo.barpos`：当前 K 线的位置索引，用于确认 `handlebar` 被正确触发。
- `print(...)`：输出当前 Bar 位置信息。

## 运行步骤

1. 打开 QMT 客户端并登录账户。
2. 进入「量化交易」模块。
3. 点击「新建策略」，选择「Python 策略」。
4. 将上方完整代码粘贴到策略编辑器中。
5. 保存策略文件。
6. 选择「回测」模式，设置回测起止日期（如近 30 个交易日）。
7. 选择周期为「日线」。
8. 点击「开始回测」或「运行」按钮。

## 预期日志

回测运行后，输出面板应显示类似以下内容：

```
策略初始化完成
当前Bar时间: 1
当前Bar时间: 2
当前Bar时间: 3
...
当前Bar时间: 30
```

!!! note "提示"
    具体的 Bar 位置数值取决于回测起止日期和数据量，重点是确认日志正常输出且无报错。

## 成功判断标准

| 判断项 | 预期结果 |
|--------|----------|
| `init` 日志 | 输出面板显示「策略初始化完成」 |
| `handlebar` 日志 | 输出面板显示「当前Bar时间:」并附带数字 |
| 错误信息 | 输出面板无红色错误提示 |
| 运行状态 | 策略状态显示为「运行中」或「回测完成」 |

## 已知限制

- 本策略仅输出日志，不执行任何交易逻辑，不能用于实际交易。
- `print` 输出仅在 QMT 客户端的输出面板中可见，策略停止后日志不会自动保存（取决于客户端版本配置，以当前客户端版本为准）。
- 如果股票池中的品种数据未下载，`handlebar` 可能不会触发。请确保在运行前已下载对应品种的历史数据。
- 在模拟信号模式下，`handlebar` 仅在实时 K 线完成时触发，非交易时间内不会有新的日志输出。
