-
Notifications
You must be signed in to change notification settings - Fork 8
/
pattern_hammer.R
125 lines (104 loc) · 2.53 KB
/
pattern_hammer.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# script: Hammer Patterns
# date: 2024-02-12
# author: Serkan Korkmaz, serkor1@duck.com
# objective: Collect Hammer Patterns
#
# Hammer
# Inverted Hammer
#
# script start;
#' Identify Hammer patterns in OHLC-series
#'
#' @description
#'
#' `r lifecycle::badge("experimental")`
#'
#'
#' @param ohlc A data.frame containing Open, High, Low, Close prices
#' @param delta A named [list] of sensitivity parameters
#' \itemize{
#' \item upper_shadow
#' \item lower_shadow
#' }
#'
#' @family hammer
#'
#' @returns A [logical]-vector of same length
#'
#' @author Chiu-Yu Ko
#'
#' @export
hammer <- function(
ohlc,
delta = list(
upper_shadow = 0.7,
lower_shadow = 0.1
)) {
# check ohlc input
# before anything
is_ohlc(ohlc = ohlc)
# 0) determine delta-list
default_delta <- list(
upper_shadow = 0.7,
lower_shadow = 0.1
)
delta <- utils::modifyList(
x = default_delta,
val = delta,
keep.null = FALSE
)
# 1) calculate parameters
candle_length <- candle_feature(ohlc = ohlc,feature = "length")
upper_shadow_length <- shadow_feature(ohlc = ohlc,feature = "upper_length")
lower_shadow_length <- shadow_feature(ohlc = ohlc,feature = "lower_length")
# 2) Return
(delta$upper_shadow * candle_length >= upper_shadow_length) & (delta$lower_shadow * candle_length <= lower_shadow_length)
}
#' Identify Inverted Hammer patterns in OHLC-series
#'
#' @description
#'
#' `r lifecycle::badge("experimental")`
#'
#'
#' @param ohlc A data.frame containing Open, High, Low, Close prices
#' @param delta A named [list] of sensitivity parameters
#' \itemize{
#' \item upper_shadow
#' \item lower_shadow
#' }
#'
#' @family hammer
#'
#' @returns Returns a data.frame-object with identified patterns
#'
#' @author Chiu-Yu Ko
#'
#' @export
inverted_hammer <- function(
ohlc,
delta = list(
upper_shadow = 0.7,
lower_shadow = 0.1
)) {
# check ohlc input
# before anything
is_ohlc(ohlc = ohlc)
# 0) determine delta-list
default_delta <- list(
upper_shadow = 0.7,
lower_shadow = 0.1
)
delta <- utils::modifyList(
x = default_delta,
val = delta,
keep.null = FALSE
)
# 1) calculate parameters
candle_length <- candle_feature(ohlc = ohlc,feature = "length")
upper_shadow_length <- shadow_feature(ohlc = ohlc,feature = "upper_length")
lower_shadow_length <- shadow_feature(ohlc = ohlc,feature = "lower_length")
# 2) Return
(delta$upper_shadow * candle_length <= upper_shadow_length) & (delta$lower_shadow * candle_length >= lower_shadow_length)
}
# script end;