SMMA
定义
public static IEnumerable<SmmaResult> GetSmma(int lookbackPeriods)
描述
SMMA 是一种独特的移动平均线,它在计算上类似于 EMA,但具有不同的平滑特性。
参数
| 参数名 |
类型 |
描述 |
| lookbackPeriods |
Int |
回溯周期 |
返回值
| 返回值 |
类型 |
描述 |
| Date |
DateTime |
时间戳 |
| Smma |
decimal? |
平滑移动平均值 |
QuoteHistoryDay(10, (dic) =>
{
if (dic.Count > 0)
{
foreach (var item in dic.Keys)
{
///获取指标结果
var resp = dic[item].GetSmma(2);
Console.WriteLine(resp.ToJson());
}
}
});
def init(self):
#初始化T+1 取消时间为120秒
self.SetConfig(1,120)
self.art = {}
self.invested = {}
logger.info("进入MyTestAlgorithm init方法:")
#添加单个指数 分钟为Resolution.Minute
self.index300 = self.AddIndex("000300.XSHG", Resolution.Daily).symbol
#添加指数下的所有 分钟为Resolution.Minute
stock_list=self.FillStocks(["000001.XSHE","000004.XSHE"],"",Resolution.Daily)
self.set_benchmark(self.index300)
# 创建SMMA指标 - QuantConnect中没有内置的SMMA类,需要自定义
# SMMA计算: SMMA = (Previous_SMMA * (n-1) + Current_Price) / n
self.smma_period = 14
self.smma = self.SMA(stock_list[0].Symbol, self.smma_period, Resolution.Daily)
self.smma_values = []
# 记录价格
self.previous_prices = []
#计算SMMA
def CalculateSmma(self, current_price):
"""手动计算SMMA"""
if len(self.previous_prices) < self.smma_period:
self.previous_prices.append(current_price)
return None
if len(self.smma_values) == 0:
# 第一个SMMA是简单移动平均
smma = sum(self.previous_prices) / len(self.previous_prices)
else:
# 后续SMMA使用平滑公式
previous_smma = self.smma_values[-1]
smma = (previous_smma * (self.smma_period - 1) + current_price) / self.smma_period
return smma
#数据来了触发事件
def ondata(self,slice):
logger.info(fr"Symbol:{self.Time} ")
if config.SymbolPool[0].symbol not in slice:
return
current_price = slice[config.SymbolPool[0].symbol].Price
# 计算SMMA
smma_value = self.CalculateSmma(current_price)
if smma_value is not None:
self.smma_values.append(smma_value)
# 保持数据长度
if len(self.smma_values) > 100:
self.smma_values.pop(0)
if len(self.previous_prices) > self.smma_period:
self.previous_prices.pop(0)
if len(self.smma_values) < 2:
return
current_smma = self.smma_values[-1]
previous_smma = self.smma_values[-2]
logger.info(fr"current_smma:{current_smma} previous_smma:{previous_smma}")