简单波动率策略,实现+网格搜索
This commit is contained in:
@@ -19,9 +19,10 @@ class SimpleLimitBuyStrategy(Strategy):
|
||||
|
||||
def __init__(self, context: Any, **parameters: Any): # context 类型提示可以为 BacktestContext
|
||||
super().__init__(context, **parameters)
|
||||
self.trade_volume = 1
|
||||
self.order_id_counter = 0
|
||||
self.limit_price_factor = parameters.get('limit_price_factor', 0.999) # 限价因子
|
||||
self.max_position = parameters.get('max_position', self.trade_volume * 2) # 最大持仓量
|
||||
self.max_position = parameters.get('max_position', self.trade_volume) # 最大持仓量
|
||||
|
||||
self._last_order_id: Optional[str] = None # 跟踪上一根Bar发出的订单ID
|
||||
self._current_long_position: int = 0 # 策略内部维护的当前持仓
|
||||
@@ -57,16 +58,14 @@ class SimpleLimitBuyStrategy(Strategy):
|
||||
每接收到一根Bar时,执行策略逻辑。
|
||||
"""
|
||||
current_portfolio_value = self.context.get_current_portfolio_value(bar)
|
||||
print(f"[{bar.datetime}] Strategy processing Bar. Current close price: {bar.close:.2f}. Current Portfolio Value: {current_portfolio_value:.2f}")
|
||||
# print(f"[{bar.datetime}] Strategy processing Bar. Current close price: {bar.close:.2f}. Current Portfolio Value: {current_portfolio_value:.2f}")
|
||||
|
||||
# 1. 撤销上一根K线未成交的订单
|
||||
if self._last_order_id:
|
||||
# 检查这个订单是否仍然在待处理订单列表中
|
||||
pending_orders = self.context._simulator.get_pending_orders() # 直接访问模拟器,或者通过context提供接口
|
||||
pending_orders = self.get_pending_orders() # 直接访问模拟器,或者通过context提供接口
|
||||
if self._last_order_id in pending_orders:
|
||||
success = self.context.send_order(Order(id=self._last_order_id, symbol=self.symbol,
|
||||
direction="CANCEL", volume=0,
|
||||
price_type="CANCEL")) # 使用一个特殊Order类型表示撤单
|
||||
success = self.cancel_order(self._last_order_id)
|
||||
# 这里发送的“撤单订单”会被simulator的send_order处理,并调用simulator.cancel_order
|
||||
if success: # simulator.send_order返回Trade或None,这里我们用一个特殊处理
|
||||
# Simulator的send_order返回的是Trade,如果实现撤单,最好Simulator的cancel_order返回bool
|
||||
@@ -109,10 +108,10 @@ class SimpleLimitBuyStrategy(Strategy):
|
||||
)
|
||||
|
||||
# 通过上下文发送订单
|
||||
trade = self.context.send_order(order)
|
||||
trade = self.send_order(order)
|
||||
if trade:
|
||||
print(
|
||||
f"[{bar.datetime}] 策略: 发送并立即成交限价买单 {trade.volume} 股 @ {trade.price:.2f} (订单ID: {order.id})")
|
||||
f"[{bar.datetime}] 策略: 发送并立即成交限价买单 {trade.volume} 股 @ {trade.price:.2f}(open:{bar.open}, close:{bar.close}) (订单ID: {order.id})")
|
||||
# 如果立即成交,_last_order_id 仍然保持 None
|
||||
else:
|
||||
# 如果未立即成交,将订单ID记录下来,以便下一根Bar撤销
|
||||
|
||||
Reference in New Issue
Block a user