Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
SymbolData.py
创建于
4年前
差异永不过期
清除
导出
分享
解释
44 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
140 行
全部复制
19 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
132 行
全部复制
复制
已复制
复制
已复制
Charts
Statistics
Code
##################################
##################################
#
#
# SymbolData Class
# SymbolData Class
#
#
##################################
##################################
class SymbolData():
class SymbolData():
## Constructor
## Constructor
## -----------
## -----------
def __init__(self, theSymbol, algo):
def __init__(self, theSymbol, algo):
复制
已复制
复制
已复制
## Algo / Symbol / Price reference
## Algo / Symbol / Price reference
self.algo = algo
self.algo = algo
self.symbol = theSymbol
self.symbol = theSymbol
self.lastDailyClose = None
self.lastDailyClose = None
self.lastClosePrice = None
self.lastClosePrice = None
## Initialize our Indicators and rolling windows
## Initialize our Indicators and rolling windows
self.ema = ExponentialMovingAverage(self.algo.dailyEMAPeriod)
self.ema = ExponentialMovingAverage(self.algo.dailyEMAPeriod)
self.momentum = MomentumPercent(self.algo.hourlyMomPeriod)
self.momentum = MomentumPercent(self.algo.hourlyMomPeriod)
self.lastDailyCloseWindow = RollingWindow[float](2)
self.lastDailyCloseWindow = RollingWindow[float](2)
self.emaWindow = RollingWindow[float](2)
self.emaWindow = RollingWindow[float](2)
## These will hold our 'messages' used in our order notes
## These will hold our 'messages' used in our order notes
self.ClosePositionMessage = ""
self.ClosePositionMessage = ""
self.OpenPositionMessage = ""
self.OpenPositionMessage = ""
## Seed Daily indicators with history.
## Seed Daily indicators with history.
## -----------------------------------
## -----------------------------------
def SeedDailyIndicators(self, dailyHistory):
def SeedDailyIndicators(self, dailyHistory):
复制
已复制
复制
已复制
# Loop over the history data and update our indicators
# Loop over the history data and update our indicators
if dailyHistory.empty or 'close' not in dailyHistory.columns:
if dailyHistory.empty or 'close' not in dailyHistory.columns:
# self.algo.Log(f"No Daily history for {self.symbol}")
# self.algo.Log(f"No Daily history for {self.symbol}")
return
return
复制
已复制
复制
已复制
else:
else:
for timeIndex, dailyBar in dailyHistory.loc[self.symbol].iterrows():
for timeIndex, dailyBar in dailyHistory.loc[self.symbol].iterrows():
复制
已复制
复制
已复制
if(self.ema is not None):
self.ema.Update(timeIndex, dailyBar['close'])
self.ema.Update(timeIndex, dailyBar['close'])
self.lastDailyClose = dailyBar['close']
self.lastDailyClose = dailyBar['close']
self.timeOflastDailyClose = timeIndex
self.timeOflastDailyClose = timeIndex
复制
已复制
复制
已复制
self.lastDailyCloseWindow.Add(
dailyBar['close']
)
self.lastDailyCloseWindow.Add(
dailyBar['close']
)
self.emaWindow.Add(
self.ema.Current.Value
)
self.emaWindow.Add(
self.ema.Current.Value
)
## Seed intraday indicators with history
## Seed intraday indicators with history
## These indicators might be have eitehr hourly or minute resolution
## These indicators might be have eitehr hourly or minute resolution
## -----------------------------------------------------------------
## -----------------------------------------------------------------
def SeedIntradayIndicators(self, hourlyHistory=None, minuteHistory=None):
def SeedIntradayIndicators(self, hourlyHistory=None, minuteHistory=None):
复制
已复制
复制
已复制
# Loop over the history data and update our indicators
# Loop over the history data and update our indicators
if hourlyHistory is not None:
if hourlyHistory is not None:
if hourlyHistory.empty or 'close' not in hourlyHistory.columns:
if hourlyHistory.empty or 'close' not in hourlyHistory.columns:
self.algo.Log(f"Missing hourly history for {self.symbol}")
self.algo.Log(f"Missing hourly history for {self.symbol}")
else:
else:
for timeIndex, hourlyBar in hourlyHistory.loc[self.symbol].iterrows():
for timeIndex, hourlyBar in hourlyHistory.loc[self.symbol].iterrows():
复制
已复制
复制
已复制
if(self.momentum is not None):
self.momentum.Update(timeIndex, hourlyBar['close'])
self.momentum.Update(timeIndex, hourlyBar['close'])
复制
已复制
复制
已复制
# If you are using minuteHistory, you need to add "someIndicator" to manage it in this class (in __init__())
if minuteHistory is not None:
if minuteHistory is not None:
if minuteHistory.empty or 'close' not in minuteHistory.columns:
if minuteHistory.empty or 'close' not in minuteHistory.columns:
self.algo.Log(f"Missing minute history for {self.symbol}")
self.algo.Log(f"Missing minute history for {self.symbol}")
else:
else:
复制
已复制
复制
已复制
for timeIndex,
hourlyBar
in
hourlyHistory
.loc[self.symbol].iterrows():
for timeIndex,
minuteBar
in
minuteHistory
.loc[self.symbol].iterrows():
if
(
self.someIndicator is not None
):
if
self.someIndicator is not None
:
self.someIndicator.Update(timeIndex,
hourlyBar
['close'])
self.someIndicator.Update(timeIndex,
minuteBar
['close'])
return
return
## Daily screening criteria. Called by the main algorithm.
## Daily screening criteria. Called by the main algorithm.
## Returns true if daily screening conditions are met.
## Returns true if daily screening conditions are met.
## Replace with your own criteria.
## Replace with your own criteria.
## -------------------------------------------------------
## -------------------------------------------------------
复制
已复制
复制
已复制
@property
def DailyScreeningCriteriaMet(self):
def DailyScreeningCriteriaMet(self):
复制
已复制
复制
已复制
## Price is above ema.
## Price is above ema.
复制
已复制
复制
已复制
if
(
self.lastDailyCloseWindow[0]
> self.emaWindow[0]
):
if
self.lastDailyCloseWindow[0]
> self.emaWindow[0]
:
return True
return True
return False
return False
## Intraday screening criteria. Called by the main
## Intraday screening criteria. Called by the main
## algorithm. Returns true if entry conditions are met.
## algorithm. Returns true if entry conditions are met.
## Replace with your own criteria.
## Replace with your own criteria.
## ----------------------------------------------------
## ----------------------------------------------------
复制
已复制
复制
已复制
@property
def IntradayScreeningCriteriaMet(self):
def IntradayScreeningCriteriaMet(self):
复制
已复制
复制
已复制
## If we have positive momentum
## If we have positive momentum
复制
已复制
复制
已复制
if
(
self.momentum.Current.Value > 0
):
if
self.momentum.Current.Value > 0
:
## Informative message that will be submitted as order notes
## Informative message that will be submitted as order notes
self.OpenPositionMessage = f"OPEN (${round(self.lastDailyCloseWindow[0],3)} > EMA: {round(self.emaWindow[0],3)})"
self.OpenPositionMessage = f"OPEN (${round(self.lastDailyCloseWindow[0],3)} > EMA: {round(self.emaWindow[0],3)})"
return True
return True
return False
return False
## Trade Exit criteria. Called by the main algorithm.
## Trade Exit criteria. Called by the main algorithm.
## Returns true if exit conditions are met.
## Returns true if exit conditions are met.
## Replace with your own criteria.
## Replace with your own criteria.
## ---------------------------------------------------
## ---------------------------------------------------
复制
已复制
复制
已复制
@property
def ExitCriteriaMet(self):
def ExitCriteriaMet(self):
复制
已复制
复制
已复制
## Exit If price is below ema
## Exit If price is below ema
复制
已复制
复制
已复制
if
(
self.lastClosePrice < self.ema.Current.Value
)
:
if
self.lastClosePrice < self.ema.Current.Value
:
self.ClosePositionMessage = f"CLOSE (${round(self.lastClosePrice,3)} < EMA: {round(self.ema.Current.Value,3)})"
self.ClosePositionMessage = f"CLOSE (${round(self.lastClosePrice,3)} < EMA: {round(self.ema.Current.Value,3)})"
return True
return True
复制
已复制
复制
已复制
return False
return False
## Returns true if our daily indicators are ready.
## Returns true if our daily indicators are ready.
## Called from the main algo
## Called from the main algo
## -----------------------------------------------
## -----------------------------------------------
复制
已复制
复制
已复制
@property
def DailyIndicatorsAreReady(self):
def DailyIndicatorsAreReady(self):
复制
已复制
复制
已复制
return
(
self.ema.IsReady and self.lastDailyCloseWindow.IsReady
)
return
self.ema.IsReady and self.lastDailyCloseWindow.IsReady
## Returns true if our intraday indicators are ready.
## Returns true if our intraday indicators are ready.
## Called from the main algo
## Called from the main algo
## --------------------------------------------------
## --------------------------------------------------
复制
已复制
复制
已复制
@property
def IntradayIndicatorsAreReady(self):
def IntradayIndicatorsAreReady(self):
复制
已复制
复制
已复制
return
(
self.momentum.IsReady
)
return
self.momentum.IsReady
## Called by the main algorithm right after
## Called by the main algorithm right after
## a position is opened for this symbol.
## a position is opened for this symbol.
## ----------------------------------------
## ----------------------------------------
def OnPositionOpened(self):
def OnPositionOpened(self):
复制
已复制
复制
已复制
## Register & warmup the indicators we need to track for exits
## Register & warmup the indicators we need to track for exits
self.algo.RegisterIndicator(self.symbol, self.ema, timedelta(1))
self.algo.RegisterIndicator(self.symbol, self.ema, timedelta(1))
self.algo.WarmUpIndicator(self.symbol, self.ema, Resolution.Daily)
self.algo.WarmUpIndicator(self.symbol, self.ema, Resolution.Daily)
## Called by the main algorithm right after
## Called by the main algorithm right after
## a position is closed for this symbol.
## a position is closed for this symbol.
## ----------------------------------------
## ----------------------------------------
def OnPositionClosed(self):
def OnPositionClosed(self):
# cleanup
# cleanup
pass
pass
复制
已复制
复制
已复制
已保存差异
原始文本
打开文件
Charts Statistics Code ################################## # # SymbolData Class # ################################## class SymbolData(): ## Constructor ## ----------- def __init__(self, theSymbol, algo): ## Algo / Symbol / Price reference self.algo = algo self.symbol = theSymbol self.lastDailyClose = None self.lastClosePrice = None ## Initialize our Indicators and rolling windows self.ema = ExponentialMovingAverage(self.algo.dailyEMAPeriod) self.momentum = MomentumPercent(self.algo.hourlyMomPeriod) self.lastDailyCloseWindow = RollingWindow[float](2) self.emaWindow = RollingWindow[float](2) ## These will hold our 'messages' used in our order notes self.ClosePositionMessage = "" self.OpenPositionMessage = "" ## Seed Daily indicators with history. ## ----------------------------------- def SeedDailyIndicators(self, dailyHistory): # Loop over the history data and update our indicators if dailyHistory.empty or 'close' not in dailyHistory.columns: # self.algo.Log(f"No Daily history for {self.symbol}") return else: for timeIndex, dailyBar in dailyHistory.loc[self.symbol].iterrows(): if(self.ema is not None): self.ema.Update(timeIndex, dailyBar['close']) self.lastDailyClose = dailyBar['close'] self.timeOflastDailyClose = timeIndex self.lastDailyCloseWindow.Add( dailyBar['close'] ) self.emaWindow.Add( self.ema.Current.Value ) ## Seed intraday indicators with history ## These indicators might be have eitehr hourly or minute resolution ## ----------------------------------------------------------------- def SeedIntradayIndicators(self, hourlyHistory=None, minuteHistory=None): # Loop over the history data and update our indicators if hourlyHistory is not None: if hourlyHistory.empty or 'close' not in hourlyHistory.columns: self.algo.Log(f"Missing hourly history for {self.symbol}") else: for timeIndex, hourlyBar in hourlyHistory.loc[self.symbol].iterrows(): if(self.momentum is not None): self.momentum.Update(timeIndex, hourlyBar['close']) if minuteHistory is not None: if minuteHistory.empty or 'close' not in minuteHistory.columns: self.algo.Log(f"Missing minute history for {self.symbol}") else: for timeIndex, hourlyBar in hourlyHistory.loc[self.symbol].iterrows(): if(self.someIndicator is not None): self.someIndicator.Update(timeIndex, hourlyBar['close']) return ## Daily screening criteria. Called by the main algorithm. ## Returns true if daily screening conditions are met. ## Replace with your own criteria. ## ------------------------------------------------------- def DailyScreeningCriteriaMet(self): ## Price is above ema. if(self.lastDailyCloseWindow[0] > self.emaWindow[0]): return True return False ## Intraday screening criteria. Called by the main ## algorithm. Returns true if entry conditions are met. ## Replace with your own criteria. ## ---------------------------------------------------- def IntradayScreeningCriteriaMet(self): ## If we have positive momentum if (self.momentum.Current.Value > 0): ## Informative message that will be submitted as order notes self.OpenPositionMessage = f"OPEN (${round(self.lastDailyCloseWindow[0],3)} > EMA: {round(self.emaWindow[0],3)})" return True return False ## Trade Exit criteria. Called by the main algorithm. ## Returns true if exit conditions are met. ## Replace with your own criteria. ## --------------------------------------------------- def ExitCriteriaMet(self): ## Exit If price is below ema if( self.lastClosePrice < self.ema.Current.Value ): self.ClosePositionMessage = f"CLOSE (${round(self.lastClosePrice,3)} < EMA: {round(self.ema.Current.Value,3)})" return True return False ## Returns true if our daily indicators are ready. ## Called from the main algo ## ----------------------------------------------- def DailyIndicatorsAreReady(self): return (self.ema.IsReady and self.lastDailyCloseWindow.IsReady) ## Returns true if our intraday indicators are ready. ## Called from the main algo ## -------------------------------------------------- def IntradayIndicatorsAreReady(self): return (self.momentum.IsReady) ## Called by the main algorithm right after ## a position is opened for this symbol. ## ---------------------------------------- def OnPositionOpened(self): ## Register & warmup the indicators we need to track for exits self.algo.RegisterIndicator(self.symbol, self.ema, timedelta(1)) self.algo.WarmUpIndicator(self.symbol, self.ema, Resolution.Daily) ## Called by the main algorithm right after ## a position is closed for this symbol. ## ---------------------------------------- def OnPositionClosed(self): # cleanup pass
更改后文本
打开文件
################################## # # SymbolData Class # ################################## class SymbolData(): ## Constructor ## ----------- def __init__(self, theSymbol, algo): ## Algo / Symbol / Price reference self.algo = algo self.symbol = theSymbol self.lastDailyClose = None self.lastClosePrice = None ## Initialize our Indicators and rolling windows self.ema = ExponentialMovingAverage(self.algo.dailyEMAPeriod) self.momentum = MomentumPercent(self.algo.hourlyMomPeriod) self.lastDailyCloseWindow = RollingWindow[float](2) self.emaWindow = RollingWindow[float](2) ## These will hold our 'messages' used in our order notes self.ClosePositionMessage = "" self.OpenPositionMessage = "" ## Seed Daily indicators with history. ## ----------------------------------- def SeedDailyIndicators(self, dailyHistory): # Loop over the history data and update our indicators if dailyHistory.empty or 'close' not in dailyHistory.columns: # self.algo.Log(f"No Daily history for {self.symbol}") return else: for timeIndex, dailyBar in dailyHistory.loc[self.symbol].iterrows(): self.ema.Update(timeIndex, dailyBar['close']) self.lastDailyClose = dailyBar['close'] self.timeOflastDailyClose = timeIndex self.lastDailyCloseWindow.Add(dailyBar['close']) self.emaWindow.Add(self.ema.Current.Value) ## Seed intraday indicators with history ## These indicators might be have eitehr hourly or minute resolution ## ----------------------------------------------------------------- def SeedIntradayIndicators(self, hourlyHistory=None, minuteHistory=None): # Loop over the history data and update our indicators if hourlyHistory is not None: if hourlyHistory.empty or 'close' not in hourlyHistory.columns: self.algo.Log(f"Missing hourly history for {self.symbol}") else: for timeIndex, hourlyBar in hourlyHistory.loc[self.symbol].iterrows(): self.momentum.Update(timeIndex, hourlyBar['close']) # If you are using minuteHistory, you need to add "someIndicator" to manage it in this class (in __init__()) if minuteHistory is not None: if minuteHistory.empty or 'close' not in minuteHistory.columns: self.algo.Log(f"Missing minute history for {self.symbol}") else: for timeIndex, minuteBar in minuteHistory.loc[self.symbol].iterrows(): if self.someIndicator is not None: self.someIndicator.Update(timeIndex, minuteBar['close']) return ## Daily screening criteria. Called by the main algorithm. ## Returns true if daily screening conditions are met. ## Replace with your own criteria. ## ------------------------------------------------------- @property def DailyScreeningCriteriaMet(self): ## Price is above ema. if self.lastDailyCloseWindow[0] > self.emaWindow[0]: return True return False ## Intraday screening criteria. Called by the main ## algorithm. Returns true if entry conditions are met. ## Replace with your own criteria. ## ---------------------------------------------------- @property def IntradayScreeningCriteriaMet(self): ## If we have positive momentum if self.momentum.Current.Value > 0: ## Informative message that will be submitted as order notes self.OpenPositionMessage = f"OPEN (${round(self.lastDailyCloseWindow[0],3)} > EMA: {round(self.emaWindow[0],3)})" return True return False ## Trade Exit criteria. Called by the main algorithm. ## Returns true if exit conditions are met. ## Replace with your own criteria. ## --------------------------------------------------- @property def ExitCriteriaMet(self): ## Exit If price is below ema if self.lastClosePrice < self.ema.Current.Value: self.ClosePositionMessage = f"CLOSE (${round(self.lastClosePrice,3)} < EMA: {round(self.ema.Current.Value,3)})" return True return False ## Returns true if our daily indicators are ready. ## Called from the main algo ## ----------------------------------------------- @property def DailyIndicatorsAreReady(self): return self.ema.IsReady and self.lastDailyCloseWindow.IsReady ## Returns true if our intraday indicators are ready. ## Called from the main algo ## -------------------------------------------------- @property def IntradayIndicatorsAreReady(self): return self.momentum.IsReady ## Called by the main algorithm right after ## a position is opened for this symbol. ## ---------------------------------------- def OnPositionOpened(self): ## Register & warmup the indicators we need to track for exits self.algo.RegisterIndicator(self.symbol, self.ema, timedelta(1)) self.algo.WarmUpIndicator(self.symbol, self.ema, Resolution.Daily) ## Called by the main algorithm right after ## a position is closed for this symbol. ## ---------------------------------------- def OnPositionClosed(self): # cleanup pass
查找差异