Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
EMA Crossover Diff
创建于
4年前
差异永不过期
清除
导出
分享
解释
3 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
114 行
全部复制
5 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
116 行
全部复制
复制
已复制
复制
已复制
## https://www.quantconnect.com/forum/discussion/12768/share-kalman-filter-crossovers-for-crypto-and-smart-rollingwindows/p1/comment-38206
from datetime import timedelta
from datetime import timedelta
from AlgorithmImports import *
from AlgorithmImports import *
import math
import math
# from Shared.IntradayMomentumIndex importIn
# from Shared.IntradayMomentumIndex importIn
from SmartRollingWindow import *
from SmartRollingWindow import *
def truncate(number, decimals=0):
def truncate(number, decimals=0):
"""
"""
Returns a value truncated to a specific number of decimal places.
Returns a value truncated to a specific number of decimal places.
"""
"""
if not isinstance(decimals, int):
if not isinstance(decimals, int):
raise TypeError("decimal places must be an integer.")
raise TypeError("decimal places must be an integer.")
elif decimals < 0:
elif decimals < 0:
raise ValueError("decimal places has to be 0 or more.")
raise ValueError("decimal places has to be 0 or more.")
elif decimals == 0:
elif decimals == 0:
return math.trunc(number)
return math.trunc(number)
factor = 10.0 ** decimals
factor = 10.0 ** decimals
return math.trunc(number * factor) / factor
return math.trunc(number * factor) / factor
class Asset():
class Asset():
def __init__(self, algorithm, symbol):
def __init__(self, algorithm, symbol):
self.symbol = symbol
self.symbol = symbol
self.algorithm = algorithm
self.algorithm = algorithm
def InitIndicators(self, slowPeriod, fastPeriod, resolution):
def InitIndicators(self, slowPeriod, fastPeriod, resolution):
self.fast = self.algorithm.EMA(self.symbol, fastPeriod, Resolution.Daily)
self.fast = self.algorithm.EMA(self.symbol, fastPeriod, Resolution.Daily)
self.slow = self.algorithm.EMA(self.symbol, slowPeriod, Resolution.Daily)
self.slow = self.algorithm.EMA(self.symbol, slowPeriod, Resolution.Daily)
self.slowWindow = SmartRollingWindow('float', 2)
self.slowWindow = SmartRollingWindow('float', 2)
self.fastWindow = SmartRollingWindow('float', 2)
self.fastWindow = SmartRollingWindow('float', 2)
self.priceWindow = SmartRollingWindow('float', 2)
self.priceWindow = SmartRollingWindow('float', 2)
复制
已复制
复制
已复制
def
UpdateIndicators
(self):
def
UpdateAssetWindows
(self):
self.slowWindow.Add(self.slow.Current.Value)
self.slowWindow.Add(self.slow.Current.Value)
self.fastWindow.Add(self.fast.Current.Value)
self.fastWindow.Add(self.fast.Current.Value)
self.priceWindow.Add(self.algorithm.Securities[self.symbol].Price)
self.priceWindow.Add(self.algorithm.Securities[self.symbol].Price)
def PrefixWithSymbol(self, str):
def PrefixWithSymbol(self, str):
return "{}: {}".format(self.symbol.Value, str)
return "{}: {}".format(self.symbol.Value, str)
def Plot(self, chartName):
def Plot(self, chartName):
self.algorithm.Plot(chartName, self.PrefixWithSymbol("Price"), self.algorithm.Securities[self.symbol].Price)
self.algorithm.Plot(chartName, self.PrefixWithSymbol("Price"), self.algorithm.Securities[self.symbol].Price)
self.algorithm.Plot(chartName, self.PrefixWithSymbol("Slow"), self.slow.Current.Value)
self.algorithm.Plot(chartName, self.PrefixWithSymbol("Slow"), self.slow.Current.Value)
self.algorithm.Plot(chartName, self.PrefixWithSymbol("Fast"), self.fast.Current.Value)
self.algorithm.Plot(chartName, self.PrefixWithSymbol("Fast"), self.fast.Current.Value)
class FocusedYellowGreenJellyfish(QCAlgorithm):
class FocusedYellowGreenJellyfish(QCAlgorithm):
def Initialize(self):
def Initialize(self):
self.InitAlgoParams()
self.InitAlgoParams()
self.InitBacktestParams()
self.InitBacktestParams()
self.InitAssets()
self.InitAssets()
self.InitIndicators()
self.InitIndicators()
def InitAlgoParams(self):
def InitAlgoParams(self):
self.benchmarkTicker = 'BTCUSDT';
self.benchmarkTicker = 'BTCUSDT';
self.tickers = ["SOLUSDT", "ETHUSDT", "BNBUSDT"]
self.tickers = ["SOLUSDT", "ETHUSDT", "BNBUSDT"]
self.assets = {}
self.assets = {}
self.ticker = "SOLUSDT"
self.ticker = "SOLUSDT"
self.resolution = Resolution.Minute
self.resolution = Resolution.Minute
self.slowPeriod = int(self.GetParameter('slowPeriod'))
self.slowPeriod = int(self.GetParameter('slowPeriod'))
self.fastPeriod = int(self.GetParameter('fastPeriod'))
self.fastPeriod = int(self.GetParameter('fastPeriod'))
def InitBacktestParams(self):
def InitBacktestParams(self):
self.SetAccountCurrency("USDT")
self.SetAccountCurrency("USDT")
self.SetCash(100000)
self.SetCash(100000)
self.SetStartDate(2020, 1, 1)
self.SetStartDate(2020, 1, 1)
def InitAssets(self):
def InitAssets(self):
self.SetBrokerageModel(BrokerageName.Binance, AccountType.Cash)
self.SetBrokerageModel(BrokerageName.Binance, AccountType.Cash)
self.benchmarkSymbol = self.AddCrypto(self.benchmarkTicker, self.resolution).Symbol
self.benchmarkSymbol = self.AddCrypto(self.benchmarkTicker, self.resolution).Symbol
for ticker in self.tickers:
for ticker in self.tickers:
symbol = self.AddCrypto(ticker, self.resolution).Symbol
symbol = self.AddCrypto(ticker, self.resolution).Symbol
self.assets[ticker] = Asset(self, symbol)
self.assets[ticker] = Asset(self, symbol)
self.SetBenchmark(self.benchmarkTicker)
self.SetBenchmark(self.benchmarkTicker)
def InitIndicators(self):
def InitIndicators(self):
self.SetWarmUp(self.slowPeriod * 2, self.resolution)
self.SetWarmUp(self.slowPeriod * 2, self.resolution)
for asset in self.assets.values():
for asset in self.assets.values():
asset.InitIndicators(self.slowPeriod, self.fastPeriod, self.resolution)
asset.InitIndicators(self.slowPeriod, self.fastPeriod, self.resolution)
self.Consolidate(self.benchmarkSymbol, Resolution.Daily, self.OnConsolidatedBarClose)
self.Consolidate(self.benchmarkSymbol, Resolution.Daily, self.OnConsolidatedBarClose)
def UpdateRollingWindows(self):
def UpdateRollingWindows(self):
for asset in self.assets.values():
for asset in self.assets.values():
复制
已复制
复制
已复制
asset.
UpdateIndicators
()
asset.
UpdateAssetWindows
()
def ShouldExit(self, asset):
def ShouldExit(self, asset):
return asset.priceWindow.isBelow(asset.slowWindow) or asset.slowWindow.isAbove(asset.fastWindow)
return asset.priceWindow.isBelow(asset.slowWindow) or asset.slowWindow.isAbove(asset.fastWindow)
def ShouldEnter(self, asset):
def ShouldEnter(self, asset):
return asset.fastWindow.isAbove(asset.slowWindow) and asset.priceWindow.isAbove(asset.fastWindow)
return asset.fastWindow.isAbove(asset.slowWindow) and asset.priceWindow.isAbove(asset.fastWindow)
def OnEndOfDay(self):
def OnEndOfDay(self):
self.PlotCharts()
self.PlotCharts()
复制
已复制
复制
已复制
self.UpdateRollingWindows()
def OnConsolidatedBarClose(self, bar):
def OnConsolidatedBarClose(self, bar):
复制
已复制
复制
已复制
self.UpdateRollingWindows()
for asset in self.assets.values():
for asset in self.assets.values():
if not asset.slowWindow.IsReady():
if not asset.slowWindow.IsReady():
return
return
if self.Portfolio[asset.symbol].Invested and self.ShouldExit(asset):
if self.Portfolio[asset.symbol].Invested and self.ShouldExit(asset):
self.Liquidate(asset.symbol)
self.Liquidate(asset.symbol)
elif not self.Portfolio[asset.symbol].Invested and self.ShouldEnter(asset):
elif not self.Portfolio[asset.symbol].Invested and self.ShouldEnter(asset):
percent = truncate(1 / len(self.assets.values()), 1)
percent = truncate(1 / len(self.assets.values()), 1)
cost = self.Portfolio.TotalPortfolioValue * percent
cost = self.Portfolio.TotalPortfolioValue * percent
cash = self.Portfolio.TotalPortfolioValue - self.Portfolio.TotalHoldingsValue
cash = self.Portfolio.TotalPortfolioValue - self.Portfolio.TotalHoldingsValue
self.Log("Cost: {}, Cash: {}".format(cost, cash))
self.Log("Cost: {}, Cash: {}".format(cost, cash))
if (cost > cash):
if (cost > cash):
percent = truncate(cash / self.Portfolio.TotalPortfolioValue, 1)
percent = truncate(cash / self.Portfolio.TotalPortfolioValue, 1)
self.SetHoldings(asset.symbol, percent);
self.SetHoldings(asset.symbol, percent);
def PlotCharts(self):
def PlotCharts(self):
chartName = "Charts"
chartName = "Charts"
# self.Plot('Benchmark', "Benchmark", self.Securities[self.benchmarkSymbol].Price)
# self.Plot('Benchmark', "Benchmark", self.Securities[self.benchmarkSymbol].Price)
for asset in self.assets.values():
for asset in self.assets.values():
asset.Plot(chartName)
asset.Plot(chartName)
已保存差异
原始文本
打开文件
from datetime import timedelta from AlgorithmImports import * import math # from Shared.IntradayMomentumIndex importIn from SmartRollingWindow import * def truncate(number, decimals=0): """ Returns a value truncated to a specific number of decimal places. """ if not isinstance(decimals, int): raise TypeError("decimal places must be an integer.") elif decimals < 0: raise ValueError("decimal places has to be 0 or more.") elif decimals == 0: return math.trunc(number) factor = 10.0 ** decimals return math.trunc(number * factor) / factor class Asset(): def __init__(self, algorithm, symbol): self.symbol = symbol self.algorithm = algorithm def InitIndicators(self, slowPeriod, fastPeriod, resolution): self.fast = self.algorithm.EMA(self.symbol, fastPeriod, Resolution.Daily) self.slow = self.algorithm.EMA(self.symbol, slowPeriod, Resolution.Daily) self.slowWindow = SmartRollingWindow('float', 2) self.fastWindow = SmartRollingWindow('float', 2) self.priceWindow = SmartRollingWindow('float', 2) def UpdateIndicators(self): self.slowWindow.Add(self.slow.Current.Value) self.fastWindow.Add(self.fast.Current.Value) self.priceWindow.Add(self.algorithm.Securities[self.symbol].Price) def PrefixWithSymbol(self, str): return "{}: {}".format(self.symbol.Value, str) def Plot(self, chartName): self.algorithm.Plot(chartName, self.PrefixWithSymbol("Price"), self.algorithm.Securities[self.symbol].Price) self.algorithm.Plot(chartName, self.PrefixWithSymbol("Slow"), self.slow.Current.Value) self.algorithm.Plot(chartName, self.PrefixWithSymbol("Fast"), self.fast.Current.Value) class FocusedYellowGreenJellyfish(QCAlgorithm): def Initialize(self): self.InitAlgoParams() self.InitBacktestParams() self.InitAssets() self.InitIndicators() def InitAlgoParams(self): self.benchmarkTicker = 'BTCUSDT'; self.tickers = ["SOLUSDT", "ETHUSDT", "BNBUSDT"] self.assets = {} self.ticker = "SOLUSDT" self.resolution = Resolution.Minute self.slowPeriod = int(self.GetParameter('slowPeriod')) self.fastPeriod = int(self.GetParameter('fastPeriod')) def InitBacktestParams(self): self.SetAccountCurrency("USDT") self.SetCash(100000) self.SetStartDate(2020, 1, 1) def InitAssets(self): self.SetBrokerageModel(BrokerageName.Binance, AccountType.Cash) self.benchmarkSymbol = self.AddCrypto(self.benchmarkTicker, self.resolution).Symbol for ticker in self.tickers: symbol = self.AddCrypto(ticker, self.resolution).Symbol self.assets[ticker] = Asset(self, symbol) self.SetBenchmark(self.benchmarkTicker) def InitIndicators(self): self.SetWarmUp(self.slowPeriod * 2, self.resolution) for asset in self.assets.values(): asset.InitIndicators(self.slowPeriod, self.fastPeriod, self.resolution) self.Consolidate(self.benchmarkSymbol, Resolution.Daily, self.OnConsolidatedBarClose) def UpdateRollingWindows(self): for asset in self.assets.values(): asset.UpdateIndicators() def ShouldExit(self, asset): return asset.priceWindow.isBelow(asset.slowWindow) or asset.slowWindow.isAbove(asset.fastWindow) def ShouldEnter(self, asset): return asset.fastWindow.isAbove(asset.slowWindow) and asset.priceWindow.isAbove(asset.fastWindow) def OnEndOfDay(self): self.PlotCharts() self.UpdateRollingWindows() def OnConsolidatedBarClose(self, bar): for asset in self.assets.values(): if not asset.slowWindow.IsReady(): return if self.Portfolio[asset.symbol].Invested and self.ShouldExit(asset): self.Liquidate(asset.symbol) elif not self.Portfolio[asset.symbol].Invested and self.ShouldEnter(asset): percent = truncate(1 / len(self.assets.values()), 1) cost = self.Portfolio.TotalPortfolioValue * percent cash = self.Portfolio.TotalPortfolioValue - self.Portfolio.TotalHoldingsValue self.Log("Cost: {}, Cash: {}".format(cost, cash)) if (cost > cash): percent = truncate(cash / self.Portfolio.TotalPortfolioValue, 1) self.SetHoldings(asset.symbol, percent); def PlotCharts(self): chartName = "Charts" # self.Plot('Benchmark', "Benchmark", self.Securities[self.benchmarkSymbol].Price) for asset in self.assets.values(): asset.Plot(chartName)
更改后文本
打开文件
## https://www.quantconnect.com/forum/discussion/12768/share-kalman-filter-crossovers-for-crypto-and-smart-rollingwindows/p1/comment-38206 from datetime import timedelta from AlgorithmImports import * import math # from Shared.IntradayMomentumIndex importIn from SmartRollingWindow import * def truncate(number, decimals=0): """ Returns a value truncated to a specific number of decimal places. """ if not isinstance(decimals, int): raise TypeError("decimal places must be an integer.") elif decimals < 0: raise ValueError("decimal places has to be 0 or more.") elif decimals == 0: return math.trunc(number) factor = 10.0 ** decimals return math.trunc(number * factor) / factor class Asset(): def __init__(self, algorithm, symbol): self.symbol = symbol self.algorithm = algorithm def InitIndicators(self, slowPeriod, fastPeriod, resolution): self.fast = self.algorithm.EMA(self.symbol, fastPeriod, Resolution.Daily) self.slow = self.algorithm.EMA(self.symbol, slowPeriod, Resolution.Daily) self.slowWindow = SmartRollingWindow('float', 2) self.fastWindow = SmartRollingWindow('float', 2) self.priceWindow = SmartRollingWindow('float', 2) def UpdateAssetWindows(self): self.slowWindow.Add(self.slow.Current.Value) self.fastWindow.Add(self.fast.Current.Value) self.priceWindow.Add(self.algorithm.Securities[self.symbol].Price) def PrefixWithSymbol(self, str): return "{}: {}".format(self.symbol.Value, str) def Plot(self, chartName): self.algorithm.Plot(chartName, self.PrefixWithSymbol("Price"), self.algorithm.Securities[self.symbol].Price) self.algorithm.Plot(chartName, self.PrefixWithSymbol("Slow"), self.slow.Current.Value) self.algorithm.Plot(chartName, self.PrefixWithSymbol("Fast"), self.fast.Current.Value) class FocusedYellowGreenJellyfish(QCAlgorithm): def Initialize(self): self.InitAlgoParams() self.InitBacktestParams() self.InitAssets() self.InitIndicators() def InitAlgoParams(self): self.benchmarkTicker = 'BTCUSDT'; self.tickers = ["SOLUSDT", "ETHUSDT", "BNBUSDT"] self.assets = {} self.ticker = "SOLUSDT" self.resolution = Resolution.Minute self.slowPeriod = int(self.GetParameter('slowPeriod')) self.fastPeriod = int(self.GetParameter('fastPeriod')) def InitBacktestParams(self): self.SetAccountCurrency("USDT") self.SetCash(100000) self.SetStartDate(2020, 1, 1) def InitAssets(self): self.SetBrokerageModel(BrokerageName.Binance, AccountType.Cash) self.benchmarkSymbol = self.AddCrypto(self.benchmarkTicker, self.resolution).Symbol for ticker in self.tickers: symbol = self.AddCrypto(ticker, self.resolution).Symbol self.assets[ticker] = Asset(self, symbol) self.SetBenchmark(self.benchmarkTicker) def InitIndicators(self): self.SetWarmUp(self.slowPeriod * 2, self.resolution) for asset in self.assets.values(): asset.InitIndicators(self.slowPeriod, self.fastPeriod, self.resolution) self.Consolidate(self.benchmarkSymbol, Resolution.Daily, self.OnConsolidatedBarClose) def UpdateRollingWindows(self): for asset in self.assets.values(): asset.UpdateAssetWindows() def ShouldExit(self, asset): return asset.priceWindow.isBelow(asset.slowWindow) or asset.slowWindow.isAbove(asset.fastWindow) def ShouldEnter(self, asset): return asset.fastWindow.isAbove(asset.slowWindow) and asset.priceWindow.isAbove(asset.fastWindow) def OnEndOfDay(self): self.PlotCharts() def OnConsolidatedBarClose(self, bar): self.UpdateRollingWindows() for asset in self.assets.values(): if not asset.slowWindow.IsReady(): return if self.Portfolio[asset.symbol].Invested and self.ShouldExit(asset): self.Liquidate(asset.symbol) elif not self.Portfolio[asset.symbol].Invested and self.ShouldEnter(asset): percent = truncate(1 / len(self.assets.values()), 1) cost = self.Portfolio.TotalPortfolioValue * percent cash = self.Portfolio.TotalPortfolioValue - self.Portfolio.TotalHoldingsValue self.Log("Cost: {}, Cash: {}".format(cost, cash)) if (cost > cash): percent = truncate(cash / self.Portfolio.TotalPortfolioValue, 1) self.SetHoldings(asset.symbol, percent); def PlotCharts(self): chartName = "Charts" # self.Plot('Benchmark', "Benchmark", self.Securities[self.benchmarkSymbol].Price) for asset in self.assets.values(): asset.Plot(chartName)
查找差异