模板与要求
from strategies.base import StrategyBase
import pandas as pd
class MyStrategy(StrategyBase):
key = "my_key" # 必须与上方 key 一致
name = "策略名"
description = "策略说明"
default_params = {"period": 20}
param_schema = [
{"key": "period", "label": "周期",
"type": "int", "min": 5, "max": 250, "step": 1},
]
def _calculate(self, df: pd.DataFrame) -> pd.DataFrame:
df = df.copy()
df["MA"] = df["收盘"].rolling(int(self.params["period"])).mean()
return df
def _eval(self, df: pd.DataFrame) -> pd.Series:
buy = (df["收盘"] > df["MA"]) & (df["收盘"].shift(1) <= df["MA"].shift(1))
sell = (df["收盘"] < df["MA"]) & (df["收盘"].shift(1) >= df["MA"].shift(1))
sig = pd.Series(0, index=df.index, dtype=int)
sig[buy] = 1
sig[sell] = -1
return sig
def get_detail(self, df: pd.DataFrame) -> dict:
return {"MA": round(float(df["MA"].iloc[-1]), 4)}