Skip to content

Commit

Permalink
added astral candlestick pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
whittlem committed Mar 8, 2021
1 parent 5f2a778 commit 111f528
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 0 deletions.
32 changes: 32 additions & 0 deletions models/Trading.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ def addAll(self):
self.addSMABuySignals()
self.addMACDBuySignals()

self.addCandleAstralBuy()
self.addCandleAstralSell()
self.addCandleHammer()
self.addCandleInvertedHammer()
self.addCandleShootingStar()
Expand Down Expand Up @@ -251,6 +253,36 @@ def candleEveningDojiStar(self):
def addCandleEveningDojiStar(self):
self.df['evening_doji_star'] = self.candleEveningDojiStar()

def candleAstralBuy(self):
"""*** Candlestick Detected: Astral Buy (Fibonacci 3, 5, 8)"""

return (self.df['close'] < self.df['close'].shift(3)) & (self.df['low'] < self.df['low'].shift(5)) \
& (self.df['close'].shift(1) < self.df['close'].shift(4)) & (self.df['low'].shift(1) < self.df['low'].shift(6)) \
& (self.df['close'].shift(2) < self.df['close'].shift(5)) & (self.df['low'].shift(2) < self.df['low'].shift(7)) \
& (self.df['close'].shift(3) < self.df['close'].shift(6)) & (self.df['low'].shift(3) < self.df['low'].shift(8)) \
& (self.df['close'].shift(4) < self.df['close'].shift(7)) & (self.df['low'].shift(4) < self.df['low'].shift(9)) \
& (self.df['close'].shift(5) < self.df['close'].shift(8)) & (self.df['low'].shift(5) < self.df['low'].shift(10)) \
& (self.df['close'].shift(6) < self.df['close'].shift(9)) & (self.df['low'].shift(6) < self.df['low'].shift(11)) \
& (self.df['close'].shift(7) < self.df['close'].shift(10)) & (self.df['low'].shift(7) < self.df['low'].shift(12))

def addCandleAstralBuy(self):
self.df['astral_buy'] = self.candleAstralBuy()

def candleAstralSell(self):
"""*** Candlestick Detected: Astral Sell (Fibonacci 3, 5, 8)"""

return (self.df['close'] > self.df['close'].shift(3)) & (self.df['high'] > self.df['high'].shift(5)) \
& (self.df['close'].shift(1) > self.df['close'].shift(4)) & (self.df['high'].shift(1) > self.df['high'].shift(6)) \
& (self.df['close'].shift(2) > self.df['close'].shift(5)) & (self.df['high'].shift(2) > self.df['high'].shift(7)) \
& (self.df['close'].shift(3) > self.df['close'].shift(6)) & (self.df['high'].shift(3) > self.df['high'].shift(8)) \
& (self.df['close'].shift(4) > self.df['close'].shift(7)) & (self.df['high'].shift(4) > self.df['high'].shift(9)) \
& (self.df['close'].shift(5) > self.df['close'].shift(8)) & (self.df['high'].shift(5) > self.df['high'].shift(10)) \
& (self.df['close'].shift(6) > self.df['close'].shift(9)) & (self.df['high'].shift(6) > self.df['high'].shift(11)) \
& (self.df['close'].shift(7) > self.df['close'].shift(10)) & (self.df['high'].shift(7) > self.df['high'].shift(12))

def addCandleAstralSell(self):
self.df['astral_sell'] = self.candleAstralSell()

def changePct(self):
"""Close change percentage"""

Expand Down
52 changes: 52 additions & 0 deletions views/TradingGraphs.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,58 @@ def format_date(x, pos=None): #pylint: disable=unused-argument
if saveOnly == False:
plt.show()

def renderCandlestickAstralPattern(self, period=30, saveOnly=False):
# get dataframe from technical analysis object
df = self.technical_analysis.getDataFrame()

if not isinstance(period, int):
raise TypeError('Period parameter is not perioderic.')

if period < 1 or period > len(df):
raise ValueError('Period is out of range')

# extract market and granularity from trading dataframe
market = df.iloc[0].market
granularity = df.iloc[0].granularity

df_subset = df.iloc[-period::]

fig, axes = plt.subplots(ncols=1, figsize=(12, 6)) #pylint: disable=unused-variable
fig.autofmt_xdate()
ax1 = plt.subplot(111)
ax1.set_title('Astral Candlestick Pattern')
plt.style.use('seaborn')
plt.plot(df_subset['close'], label='price', color='black')
plt.plot(df_subset['ema12'], label='ema12', color='orange')
plt.plot(df_subset['ema26'], label='ema26', color='purple')
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)

df_candlestick = self.df[self.df['astral_buy'] == True]
df_candlestick_in_range = df_candlestick[df_candlestick.index >= np.min(df_subset.index)]
for idx in df_candlestick_in_range.index.tolist():
plt.plot(idx, df_candlestick_in_range.loc[idx]['close'], 'g^', markersize=8)

df_candlestick = self.df[self.df['astral_sell'] == True]
df_candlestick_in_range = df_candlestick[df_candlestick.index >= np.min(df_subset.index)]
for idx in df_candlestick_in_range.index.tolist():
plt.plot(idx, df_candlestick_in_range.loc[idx]['close'], 'rv', markersize=8)

plt.style.use('seaborn')
plt.xlabel(market + ' - ' + str(granularity))
plt.ylabel('Price')
plt.xticks(rotation=90)
plt.tight_layout()
plt.legend()

try:
print ('creating: graphs/CAP_' + market + '_' + str(granularity) + '.png')
plt.savefig('graphs/CAP_' + market + '_' + str(granularity) + '.png', dpi=300)
except OSError:
raise SystemExit('Unable to save: graphs/CAP_' + market + '_' + str(granularity) + '.png')

if saveOnly == False:
plt.show()

def renderCandlesticks(self, period=30, saveOnly=False):
# get dataframe from technical analysis object
df = self.technical_analysis.getDataFrame()
Expand Down

0 comments on commit 111f528

Please sign in to comment.