**

第一部分 先分析dual_thrust_strategy.py的day_high和day_low等

**

from datetime import time
from vnpy_ctastrategy import (
CtaTemplate,
BarGenerator,
)

class DualThrustStrategy(CtaTemplate):

bars = []

day_open = 0
day_high = 0
day_low = 0

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.bg = BarGenerator(self.on_bar)
    self.bars = []

def on_init(self):
    """
    Callback when strategy is inited.
    """
    self.write_log("策略初始化")
    self.load_bar(10)

def on_bar(self, bar: BarData):

    self.bars.append(bar)
    if len(self.bars) <= 2:
        return
    else:                  # 相当于len(self.bars) >= 3
        self.bars.pop(0)
    last_bar = self.bars[-2]

    if last_bar.datetime.date() != bar.datetime.date():
        if self.day_high:  # 正常流程进入这一步,day_high为昨天的最高价

            # 计算 self.day_range, self.long_entry, self.short_entry
            self.day_range = self.day_high - self.day_low
            self.long_entry = bar.open_price + self.k1 * self.day_range
            self.short_entry = bar.open_price - self.k2 * self.day_range

        self.day_open = bar.open_price  
        self.day_high = bar.high_price    # day_high为当天的第一根K线的最高价
        self.day_low = bar.low_price  

        self.long_entered = False
        self.short_entered = False
    else:           # 相当于last_bar.datetime.date() = bar.datetime.date()

        # day_high在最开始实例化时为0,后面就有具体的值了
              # bar一直更新,到当天的最后一根K线,day_high就为当天的最高价
        self.day_high = max(self.day_high, bar.high_price)  

        # day_low在最开始实例化时为0,后面就有具体的值了
              # bar一直更新,到当天的最后一根K线,day_low就为当天的最低价 
        self.day_low = min(self.day_low, bar.low_price)     

    if not self.day_range:
        return

正常情况下,策略初始化时,
先是:
def on_init(self)
self.load_bar(10

self.load_bar(1)时,
else: # 相当于last_bar.datetime.date() = bar.datetime.date()

        # day_high在最开始实例化时为0,后面就有具体的值了
              # bar一直更新,到当天的最后一根K线,day_high就为当天的最高价
        self.day_high = max(self.day_high, bar.high_price)  

        # day_low在最开始实例化时为0,后面就有具体的值了
              # bar一直更新,到当天的最后一根K线,day_low就为当天的最低价 
        self.day_low = min(self.day_low, bar.low_price)    

接着:
if last_bar.datetime.date() != bar.datetime.date():
if self.day_high: # 正常流程进入这一步,day_high为昨天的最高价

            # 计算 self.day_range, self.long_entry, self.short_entry
            self.day_range = self.day_high - self.day_low
            self.long_entry = bar.open_price + self.k1 * self.day_range
            self.short_entry = bar.open_price - self.k2 * self.day_range

        self.day_open = bar.open_price  
        self.day_high = bar.high_price    # day_high为当天的第一根K线的最高价
        self.day_low = bar.low_price  

        self.long_entered = False
        self.short_entered = False