Advertisement
Guest User

Untitled

a guest
Jun 28th, 2018
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.83 KB | None | 0 0
  1. # --- Do not remove these libs ---
  2. from freqtrade.strategy.interface import IStrategy
  3. from pandas import DataFrame, Series
  4. from numpy.core.records import ndarray
  5.  
  6. # --------------------------------
  7. import talib.abstract as ta
  8. #from technical.indicators import mmar
  9.  
  10. class multiRisMMAR(IStrategy):
  11. """
  12.  
  13. author@: Creslin
  14.  
  15. based on work from Creslin
  16.  
  17. """
  18. minimal_roi = {
  19. "0": 0.80
  20. }
  21.  
  22. # Optimal stoploss designed for the strategy
  23. stoploss = -0.80
  24.  
  25. # Optimal ticker interval for the strategy
  26. ticker_interval = '4h'
  27.  
  28. def get_ticker_indicator(self):
  29. return int(self.ticker_interval[:-1])
  30.  
  31. def mmar(self, dataframe, matype="EMA", src="close", debug=False):
  32. """
  33. Madrid Moving Average Ribbon
  34.  
  35. Returns: MMAR
  36. """
  37. """
  38. Author(Freqtrade): Creslinux
  39. Original Author(TrdingView): "Madrid"
  40.  
  41. Pinescript from TV Source Code and Description
  42. //
  43. // Madrid : 17/OCT/2014 22:51M: Moving Average Ribbon : 2.0 : MMAR
  44. // http://madridjourneyonws.blogspot.com/
  45. //
  46. // This plots a moving average ribbon, either exponential or standard.
  47. // This study is best viewed with a dark background. It provides an easy
  48. // and fast way to determine the trend direction and possible reversals.
  49. //
  50. // Lime : Uptrend. Long trading
  51. // Green : Reentry (buy the dip) or downtrend reversal warning
  52. // Red : Downtrend. Short trading
  53. // Maroon : Short Reentry (sell the peak) or uptrend reversal warning
  54. //
  55. // To best determine if this is a reentry point or a trend reversal
  56. // the MMARB (Madrid Moving Average Ribbon Bar) study is used.
  57. // This is the bar located at the bottom. This bar signals when a
  58. // current trend reentry is found (partially filled with opposite dark color)
  59. // or when a trend reversal is ahead (completely filled with opposite dark color).
  60. //
  61.  
  62. study(title="Madrid Moving Average Ribbon", shorttitle="MMAR", overlay=true)
  63. exponential = input(true, title="Exponential MA")
  64.  
  65. src = close
  66.  
  67. ma05 = exponential ? ema(src, 05) : sma(src, 05)
  68. ma10 = exponential ? ema(src, 10) : sma(src, 10)
  69. ma15 = exponential ? ema(src, 15) : sma(src, 15)
  70. ma20 = exponential ? ema(src, 20) : sma(src, 20)
  71. ma25 = exponential ? ema(src, 25) : sma(src, 25)
  72. ma30 = exponential ? ema(src, 30) : sma(src, 30)
  73. ma35 = exponential ? ema(src, 35) : sma(src, 35)
  74. ma40 = exponential ? ema(src, 40) : sma(src, 40)
  75. ma45 = exponential ? ema(src, 45) : sma(src, 45)
  76. ma50 = exponential ? ema(src, 50) : sma(src, 50)
  77. ma55 = exponential ? ema(src, 55) : sma(src, 55)
  78. ma60 = exponential ? ema(src, 60) : sma(src, 60)
  79. ma65 = exponential ? ema(src, 65) : sma(src, 65)
  80. ma70 = exponential ? ema(src, 70) : sma(src, 70)
  81. ma75 = exponential ? ema(src, 75) : sma(src, 75)
  82. ma80 = exponential ? ema(src, 80) : sma(src, 80)
  83. ma85 = exponential ? ema(src, 85) : sma(src, 85)
  84. ma90 = exponential ? ema(src, 90) : sma(src, 90)
  85. ma100 = exponential ? ema(src, 100) : sma(src, 100)
  86.  
  87. leadMAColor = change(ma05)>=0 and ma05>ma100 ? lime
  88. : change(ma05)<0 and ma05>ma100 ? maroon
  89. : change(ma05)<=0 and ma05<ma100 ? red
  90. : change(ma05)>=0 and ma05<ma100 ? green
  91. : gray
  92. maColor(ma, maRef) =>
  93. change(ma)>=0 and ma05>maRef ? lime
  94. : change(ma)<0 and ma05>maRef ? maroon
  95. : change(ma)<=0 and ma05<maRef ? red
  96. : change(ma)>=0 and ma05<maRef ? green
  97. : gray
  98.  
  99. plot( ma05, color=leadMAColor, style=line, title="MMA05", linewidth=3)
  100. plot( ma10, color=maColor(ma10,ma100), style=line, title="MMA10", linewidth=1)
  101. plot( ma15, color=maColor(ma15,ma100), style=line, title="MMA15", linewidth=1)
  102. plot( ma20, color=maColor(ma20,ma100), style=line, title="MMA20", linewidth=1)
  103. plot( ma25, color=maColor(ma25,ma100), style=line, title="MMA25", linewidth=1)
  104. plot( ma30, color=maColor(ma30,ma100), style=line, title="MMA30", linewidth=1)
  105. plot( ma35, color=maColor(ma35,ma100), style=line, title="MMA35", linewidth=1)
  106. plot( ma40, color=maColor(ma40,ma100), style=line, title="MMA40", linewidth=1)
  107. plot( ma45, color=maColor(ma45,ma100), style=line, title="MMA45", linewidth=1)
  108. plot( ma50, color=maColor(ma50,ma100), style=line, title="MMA50", linewidth=1)
  109. plot( ma55, color=maColor(ma55,ma100), style=line, title="MMA55", linewidth=1)
  110. plot( ma60, color=maColor(ma60,ma100), style=line, title="MMA60", linewidth=1)
  111. plot( ma65, color=maColor(ma65,ma100), style=line, title="MMA65", linewidth=1)
  112. plot( ma70, color=maColor(ma70,ma100), style=line, title="MMA70", linewidth=1)
  113. plot( ma75, color=maColor(ma75,ma100), style=line, title="MMA75", linewidth=1)
  114. plot( ma80, color=maColor(ma80,ma100), style=line, title="MMA80", linewidth=1)
  115. plot( ma85, color=maColor(ma85,ma100), style=line, title="MMA85", linewidth=1)
  116. plot( ma90, color=maColor(ma90,ma100), style=line, title="MMA90", linewidth=3)
  117. :return:
  118. """
  119. import talib as ta
  120.  
  121. matype = matype
  122. src = src
  123. df = dataframe
  124. debug = debug
  125.  
  126. # Default to EMA, allow SMA if passed to def.
  127. if matype == "EMA" or matype == "ema":
  128. ma = ta.EMA
  129. elif matype == "SMA" or matype == "sma":
  130. ma = ta.SMA
  131. else:
  132. ma = ta.EMA
  133.  
  134. # Get MAs, also last MA in own column to pass to def later
  135. df["ma05"] = ma(df[src], 5)
  136. df['ma05l'] = df['ma05'].shift(+1)
  137. df["ma10"] = ma(df[src], 10)
  138. df['ma10l'] = df['ma10'].shift(+1)
  139. df["ma20"] = ma(df[src], 20)
  140. df['ma20l'] = df['ma20'].shift(+1)
  141. df["ma30"] = ma(df[src], 30)
  142. df['ma30l'] = df['ma30'].shift(+1)
  143. df["ma40"] = ma(df[src], 40)
  144. df['ma40l'] = df['ma40'].shift(+1)
  145. df["ma50"] = ma(df[src], 50)
  146. df['ma50l'] = df['ma50'].shift(+1)
  147. df["ma60"] = ma(df[src], 60)
  148. df['ma60l'] = df['ma60'].shift(+1)
  149. df["ma70"] = ma(df[src], 70)
  150. df['ma70l'] = df['ma70'].shift(+1)
  151. df["ma80"] = ma(df[src], 80)
  152. df['ma80l'] = df['ma80'].shift(+1)
  153. df["ma90"] = ma(df[src], 90)
  154. df['ma90l'] = df['ma90'].shift(+1)
  155. df["ma100"] = ma(df[src], 100)
  156. df['ma100l'] = df['ma100'].shift(+1)
  157.  
  158. """ logic for LeadMA
  159. : change(ma05)>=0 and ma05>ma100 ? lime +2
  160. : change(ma05)<0 and ma05>ma100 ? maroon -1
  161. : change(ma05)<=0 and ma05<ma100 ? red -2
  162. : change(ma05)>=0 and ma05<ma100 ? green +1
  163. : gray
  164. """
  165.  
  166. def leadMAc(x):
  167. if (x['ma05'] - x['ma05l']) >= 0 and (x['ma05'] > x['ma100']):
  168. # Lime: Uptrend.Long trading
  169. x["leadMA"] = "lime"
  170. return x["leadMA"]
  171. elif (x['ma05'] - x['ma05l']) < 0 and (x['ma05'] > x['ma100']):
  172. # Maroon : Short Reentry (sell the peak) or uptrend reversal warning
  173. x["leadMA"] = "maroon"
  174. return x["leadMA"]
  175. elif (x['ma05'] - x['ma05l']) <= 0 and (x['ma05'] < x['ma100']):
  176. # Red : Downtrend. Short trading
  177. x["leadMA"] = "red"
  178. return x["leadMA"]
  179. elif (x['ma05'] - x['ma05l']) >= 0 and (x['ma05'] < x['ma100']):
  180. # Green: Reentry(buy the dip) or downtrend reversal warning
  181. x["leadMA"] = "green"
  182. return x["leadMA"]
  183. else:
  184. # If its great it means not enough ticker data for lookback
  185. x["leadMA"] = "grey"
  186. return x["leadMA"]
  187.  
  188. df['leadMA'] = df.apply(leadMAc, axis=1)
  189.  
  190. """ Logic for MAs
  191. : change(ma)>=0 and ma05>ma100 ? lime
  192. : change(ma)<0 and ma05>ma100 ? maroon
  193. : change(ma)<=0 and ma05<ma100 ? red
  194. : change(ma)>=0 and ma05<ma100 ? green
  195. : gray
  196. """
  197.  
  198. def maColor(x, ma):
  199. col_label = '_'.join([ma, "c"])
  200. col_lable_l = ''.join([ma, "l"])
  201.  
  202. if (x[ma] - x[col_lable_l]) >= 0 and (x[ma] > x['ma100']):
  203. # Lime: Uptrend.Long trading
  204. x[col_label] = "lime"
  205. return x[col_label]
  206. elif (x[ma] - x[col_lable_l]) < 0 and (x[ma] > x['ma100']):
  207. # Maroon : Short Reentry (sell the peak) or uptrend reversal warning
  208. x[col_label] = "maroon"
  209. return x[col_label]
  210.  
  211. elif (x[ma] - x[col_lable_l]) <= 0 and (x[ma] < x['ma100']):
  212. # Red : Downtrend. Short trading
  213. x[col_label] = "red"
  214. return x[col_label]
  215.  
  216. elif (x[ma] - x[col_lable_l]) >= 0 and (x[ma] < x['ma100']):
  217. # Green: Reentry(buy the dip) or downtrend reversal warning
  218. x[col_label] = "green"
  219. return x[col_label]
  220. else:
  221. # If its great it means not enough ticker data for lookback
  222. x[col_label] = 'grey'
  223. return x[col_label]
  224.  
  225. df['ma05_c'] = df.apply(maColor, ma="ma05", axis=1)
  226. df['ma10_c'] = df.apply(maColor, ma="ma10", axis=1)
  227. df['ma20_c'] = df.apply(maColor, ma="ma20", axis=1)
  228. df['ma30_c'] = df.apply(maColor, ma="ma30", axis=1)
  229. df['ma40_c'] = df.apply(maColor, ma="ma40", axis=1)
  230. df['ma50_c'] = df.apply(maColor, ma="ma50", axis=1)
  231. df['ma60_c'] = df.apply(maColor, ma="ma60", axis=1)
  232. df['ma70_c'] = df.apply(maColor, ma="ma70", axis=1)
  233. df['ma80_c'] = df.apply(maColor, ma="ma80", axis=1)
  234. df['ma90_c'] = df.apply(maColor, ma="ma90", axis=1)
  235.  
  236. if debug:
  237. from pandas import set_option
  238. set_option('display.max_rows', 2000)
  239. print(df[["date","leadMA",
  240. "ma05", "ma05l", "ma05_c",
  241. "ma10", "ma10l", "ma10_c",
  242. # "ma20", "ma20l", "ma20_c",
  243. # "ma30", "ma30l", "ma30_c",
  244. # "ma40", "ma40l", "ma40_c",
  245. # "ma50", "ma50l", "ma50_c",
  246. # "ma60", "ma60l", "ma60_c",
  247. # "ma70", "ma70l", "ma70_c",
  248. # "ma80", "ma80l", "ma80_c",
  249. "ma90", "ma90l", "ma90_c",
  250. "ma100", "leadMA" ]].tail(200))
  251.  
  252. print(df[["date", 'close',
  253. "leadMA",
  254. "ma10_c",
  255. "ma20_c",
  256. "ma30_c",
  257. "ma40_c",
  258. "ma50_c",
  259. "ma60_c",
  260. "ma70_c",
  261. "ma80_c",
  262. "ma90_c"
  263. ]].tail(684))
  264.  
  265. return df['leadMA'], df['ma10_c'], df['ma20_c'], df['ma30_c'], \
  266. df['ma40_c'], df['ma50_c'], df['ma60_c'], df['ma70_c'], \
  267. df['ma80_c'], df['ma90_c']
  268.  
  269. def madrid_sqz(self, datafame, length=34, src='close', ref=13, sqzLen=5, debug=False):
  270. """
  271. Squeeze Madrid Indicator
  272.  
  273. Author: Creslinux
  274. Original Author: Madrid - Tradingview
  275. https://www.tradingview.com/script/9bUUSzM3-Madrid-Trend-Squeeze/
  276.  
  277. :param datafame:
  278. :param lenght: min 14 - default 34
  279. :param src: default close
  280. :param ref: default 13
  281. :param sqzLen: default 5
  282. :return: df['sqz_cma_c'], df['sqz_rma_c'], df['sqz_sma_c']
  283.  
  284.  
  285. There are seven colors used for the study
  286.  
  287. Green : Uptrend in general
  288. Lime : Spots the current uptrend leg
  289. Aqua : The maximum profitability of the leg in a long trade
  290. The Squeeze happens when Green+Lime+Aqua are aligned (the larger the values the better)
  291.  
  292. Maroon : Downtrend in general
  293. Red : Spots the current downtrend leg
  294. Fuchsia: The maximum profitability of the leg in a short trade
  295. The Squeeze happens when Maroon+Red+Fuchsia are aligned (the larger the values the better)
  296.  
  297. Yellow : The trend has come to a pause and it is either a reversal warning or a continuation. These are the entry, re-entry or closing position points.
  298. """
  299.  
  300. """
  301. Original Pinescript source code
  302.  
  303. ma = ema(src, len)
  304. closema = close - ma
  305. refma = ema(src, ref) - ma
  306. sqzma = ema(src, sqzLen) - ma
  307.  
  308. hline(0)
  309. plotcandle(0, closema, 0, closema, color=closema >= 0?aqua: fuchsia)
  310. plotcandle(0, sqzma, 0, sqzma, color=sqzma >= 0?lime: red)
  311. plotcandle(0, refma, 0, refma, color=(refma >= 0 and closema < refma) or (
  312. refma < 0 and closema > refma) ? yellow: refma >= 0 ? green: maroon)
  313. """
  314. import talib as ta
  315. from numpy import where
  316.  
  317. len = length
  318. src = src
  319. ref = ref
  320. sqzLen = sqzLen
  321. df = datafame
  322. ema = ta.EMA
  323. debug = debug
  324.  
  325. """ Original code logic
  326. ma = ema(src, len)
  327. closema = close - ma
  328. refma = ema(src, ref) - ma
  329. sqzma = ema(src, sqzLen) - ma
  330. """
  331. df['sqz_ma'] = ema(df[src], len)
  332. df['sqz_cma'] = df['close'] - df['sqz_ma']
  333. df['sqz_rma'] = ema(df[src], ref) - df['sqz_ma']
  334. df['sqz_sma'] = ema(df[src], sqzLen) - df['sqz_ma']
  335.  
  336. """ Original code logic
  337. plotcandle(0, closema, 0, closema, color=closema >= 0?aqua: fuchsia)
  338. plotcandle(0, sqzma, 0, sqzma, color=sqzma >= 0?lime: red)
  339.  
  340. plotcandle(0, refma, 0, refma, color=
  341. (refma >= 0 and closema < refma) or (refma < 0 and closema > refma) ? yellow:
  342. refma >= 0 ? green: maroon)
  343. """
  344.  
  345. #print(df[['sqz_cma', 'sqz_rma', 'sqz_sma']])
  346.  
  347. def sqz_cma_c(x):
  348. if x['sqz_cma'] >= 0 :
  349. x['sqz_cma_c'] = "aqua"
  350. return x['sqz_cma_c']
  351. else:
  352. x['sqz_cma_c'] = "fuchsia"
  353. return x['sqz_cma_c']
  354. df['sqz_cma_c'] = df.apply(sqz_cma_c, axis=1)
  355.  
  356. def sqz_sma_c(x):
  357. if x['sqz_sma'] >= 0:
  358. x['sqz_sma_c'] = "lime"
  359. return x['sqz_sma_c']
  360. else:
  361. x['sqz_sma_c'] = "red"
  362. return x['sqz_sma_c']
  363. df['sqz_sma_c'] = df.apply(sqz_sma_c, axis=1)
  364.  
  365.  
  366. def sqz_rma_c(x):
  367. if x['sqz_rma'] >= 0 and x['sqz_cma'] < x['sqz_rma']:
  368. x['sqz_rma_c'] = "yellow"
  369. return x['sqz_rma_c']
  370. elif x['sqz_rma'] < 0 and x['sqz_cma'] > x['sqz_rma']:
  371. x['sqz_rma_c'] = "yellow"
  372. return x['sqz_rma_c']
  373. elif x['sqz_rma'] >= 0 :
  374. x['sqz_rma_c'] = "green"
  375. return x['sqz_rma_c']
  376. else:
  377. x['sqz_rma_c'] = "maroon"
  378. return x['sqz_rma_c']
  379. df['sqz_rma_c'] = df.apply(sqz_rma_c, axis=1)
  380.  
  381. if debug:
  382. from pandas import set_option
  383. set_option('display.max_rows', 2000)
  384. print(df[['sqz_cma_c', 'sqz_rma_c', 'sqz_sma_c']])
  385.  
  386. return df['sqz_cma_c'], df['sqz_rma_c'], df['sqz_sma_c']
  387.  
  388.  
  389. def madrid_momentum(self, dataframe, fastMALenght=34, slowMALength=89, signalMALen=13, debug=False):
  390. """
  391. Madrid Momentum Indicator
  392.  
  393.  
  394. Author: Creslin
  395. Original Author: Marditd - Trading View
  396.  
  397. https://www.tradingview.com/script/mJoNRvkS-Madrid-Trend-Trading/
  398. :param datafame:
  399. :param src: hl2
  400. :param fastMAlength: default 34
  401. :param slowMAlength: default 89
  402.  
  403. :param signalMALen: 13
  404. :return:
  405. """
  406. """
  407. Original Source Code - Pine Script
  408. src = hl2
  409.  
  410. // Input parameters
  411. fastMALength = input(34, minval=1, title="Fast Length")
  412. slowMALength = input(89, minval=1, title="Slow Length")
  413. signalMALen = input(13, title="Signal MA")
  414.  
  415. fastMA = ema(src, fastMALength )
  416. slowMA = ema(src, slowMALength )
  417. trendStrength = (fastMA - slowMA)*100/slowMA
  418. signalMA = sma(trendStrength, signalMALen)
  419.  
  420. momentum = trendStrength-signalMA
  421. momColor = momentum>0 and change(momentum)>0 ? lime
  422. : momentum>0 and change(momentum)<0 ? green
  423. : momentum<0 and change(momentum)>0 ? maroon
  424. : momentum<0 and change(momentum)<0 ? red
  425. : gray
  426.  
  427. plot(momentum, style=histogram, linewidth=2, color=momColor)
  428. plot(0, color=change(momentum)>=0?green:red, linewidth=3)
  429. """
  430. import talib as ta
  431. ema = ta.EMA
  432. sma = ta.SMA
  433.  
  434. df = dataframe
  435. fastMAlength = fastMALenght
  436. slowMAlength = slowMALength
  437. signalMALen = signalMALen
  438. debug = debug
  439.  
  440.  
  441. """ Orginal Pinescript Logic
  442. fastMA = ema(src, fastMALength )
  443. slowMA = ema(src, slowMALength )
  444. trendStrength = (fastMA - slowMA)*100/slowMA
  445. signalMA = sma(trendStrength, signalMALen)
  446. momentum = trendStrength-signalMA
  447. """
  448.  
  449. df['hl2'] = (df['close'] + df['open']) /2
  450. df['fastMA'] = ema(df['hl2'], fastMAlength )
  451. df['slowMA'] = ema(df['hl2'], slowMAlength )
  452. df['trendStrength'] = (df['fastMA'] - df['slowMA'])*100/df['slowMA']
  453. df['signalMA'] = sma(df['trendStrength'], signalMALen)
  454.  
  455. df['momentum'] = df['trendStrength'] - df['signalMA']
  456. df['mom_change'] = df['momentum'] - df['momentum'].shift(+1)
  457.  
  458. """ Original Pinescript Logic
  459. momColor = momentum > 0 and change(momentum) > 0 ? lime
  460. : momentum > 0 and change(momentum) < 0 ? green
  461. : momentum < 0 and change(momentum) > 0 ? maroon
  462. : momentum < 0 and change(momentum) < 0 ? red
  463. : gray
  464. """
  465. def mom_color(x):
  466. if x['momentum'] > 0 and x['mom_change'] > 0 :
  467. x['mom_color'] = "lime"
  468. return x['mom_color']
  469. elif x['momentum'] > 0 and x['mom_change'] < 0 :
  470. x['mom_color'] = "green"
  471. return x['mom_color']
  472. elif x['momentum'] < 0 and x['mom_change'] > 0 :
  473. x['mom_color'] = "maroon"
  474. return x['mom_color']
  475. elif x['momentum'] < 0 and x['mom_change'] < 0 :
  476. x['mom_color'] = "red"
  477. return x['mom_color']
  478. else:
  479. x['mom_color'] = "grey"
  480. return x['mom_color']
  481. df['mom_color'] = df.apply(mom_color, axis=1)
  482.  
  483. if debug:
  484. from pandas import set_option
  485. set_option('display.max_rows', 2000)
  486. print(df[['date', 'momentum', 'mom_change', 'mom_color']])
  487.  
  488. return df['momentum'], df['mom_change'], df['mom_color']
  489.  
  490.  
  491. def populate_indicators(self, dataframe: DataFrame) -> DataFrame:
  492. # MMAR - Moving Average Ribb - defaults - EMA / close
  493. # lime bullish, green pivot, maroon pivot, red bearish
  494. dataframe['leadMA'], dataframe['ma10_c'], dataframe['ma20_c'], dataframe['ma30_c'], \
  495. dataframe['ma40_c'], dataframe['ma50_c'], dataframe['ma60_c'], dataframe['ma70_c'], \
  496. dataframe['ma80_c'], dataframe['ma90_c'] = \
  497. self.mmar(dataframe, matype='EMA', src='close', debug=False)
  498.  
  499. # Madrid Squeeze
  500. dataframe['sqz_cma_c'], \
  501. dataframe['sqz_rma_c'], dataframe['sqz_sma_c'] = \
  502. self.madrid_sqz(dataframe, length=34, src='close', ref=13, sqzLen=5)
  503.  
  504. # Madrid Momentum
  505. dataframe['momentum'], dataframe['mom_change'], dataframe['mom_color'] = \
  506. self.madrid_momentum(dataframe, fastMALenght=34, slowMALength=89, signalMALen=13, debug=True)
  507.  
  508. # Use Weighted MA in combination for trend - no buys when not upwards
  509. dataframe['wma20'] = ta.WMA(dataframe, timeperiod=20)
  510.  
  511. return dataframe
  512.  
  513. def populate_buy_trend(self, dataframe: DataFrame) -> DataFrame:
  514.  
  515. """
  516. (dataframe['ma90_c'] == "green") | (dataframe['ma90_c'] == "lime")
  517. (dataframe['ma80_c'] == "green") | (dataframe['ma80_c'] == "lime") |
  518. (dataframe['ma70_c'] == "green") | (dataframe['ma70_c'] == "lime") |
  519. (dataframe['ma60_c'] == "green") | (dataframe['ma60_c'] == "lime") |
  520. (dataframe['ma50_c'] == "green") | (dataframe['ma50_c'] == "lime") |
  521. (dataframe['ma40_c'] == "green") | (dataframe['ma40_c'] == "lime") |
  522. (dataframe['ma30_c'] == "green") | (dataframe['ma30_c'] == "lime") |
  523. (dataframe['ma20_c'] == "green") | (dataframe['ma20_c'] == "lime") |
  524. (dataframe['ma10_c'] == "green") | (dataframe['ma10_c'] == "lime") |
  525. (dataframe['leadMA'] == "green") | (dataframe['leadMA'] == "lime")
  526. """
  527.  
  528. dataframe.loc[
  529. (
  530. # Only consider buying when in trend - use wma 20
  531. ((dataframe['wma20'] <= dataframe['close']))&
  532. ((dataframe['leadMA'] == 'lime') | (dataframe['leadMA'] == 'green' ))&
  533.  
  534. #Check squeeze is in the good before longs
  535. (dataframe['sqz_rma_c'] == "green") &
  536. (dataframe['sqz_sma_c'] == "lime") &
  537. (dataframe['sqz_cma_c'] == "aqua") &
  538.  
  539. #Check Momentum is bullish and ticking upwards
  540. ((dataframe['mom_color'] == 'green') | (dataframe['mom_color'] == 'lime')) &
  541. (dataframe['mom_change'] > 0) &
  542.  
  543. # Go long when 20 AND 30 AND 40 are bullish
  544. ((dataframe['ma20_c'] == "lime") | (dataframe['ma20_c'] == "green")) &
  545. ((dataframe['ma30_c'] == "lime") | (dataframe['ma30_c'] == "green")) &
  546. ((dataframe['ma40_c'] == "lime") | (dataframe['ma40_c'] == "green"))
  547. ),
  548. 'buy'] = 1
  549. return dataframe
  550.  
  551. def populate_sell_trend(self, dataframe: DataFrame) -> DataFrame:
  552. dataframe.loc[
  553. (
  554. #
  555. #
  556. # Close when 20 OR 30 OR 40 are bearish
  557. ((dataframe['ma20_c'] == "red") | (dataframe['ma20_c'] == "maroon")) |
  558. ((dataframe['ma30_c'] == "red") | (dataframe['ma30_c'] == "maroon")) |
  559. ((dataframe['ma40_c'] == "red") | (dataframe['ma40_c'] == "maroon"))
  560. ),
  561. 'sell'] = 1
  562. return dataframe
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement