Skip to content

Commit 4e64211

Browse files
authored
Volume Weighted Average Price Strategy added. (#239)
# Describe Request Volume Weighted Average Price Strategy added. # Change Type New strategy. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Introduced the `VolumeWeightedAveragePriceStrategy`, allowing users to make trading decisions based on the Volume Weighted Average Price (VWAP). - Enhanced documentation with updated installation and usage instructions, including dedicated test data in CSV format. - Added backtesting functionality for evaluating strategy performance against defined asset sets. - **Bug Fixes** - Corrected the link format for the Volume Weighted Average Price Strategy. - **Documentation** - Comprehensive updates to the README, reflecting version 2 enhancements and clarifying licensing information. - **Tests** - Implemented unit tests for the new VWAP strategy to ensure accuracy in computations and reporting. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 0ea963f commit 4e64211

File tree

6 files changed

+490
-1
lines changed

6 files changed

+490
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ The following list of strategies are currently supported by this package:
142142
- [Force Index Strategy](strategy/volume/README.md#type-forceindexstrategy)
143143
- [Money Flow Index Strategy](strategy/volume/README.md#type-moneyflowindexstrategy)
144144
- [Negative Volume Index Strategy](strategy/volume/README.md#type-negativevolumeindexstrategy)
145-
- Volume Weighted Average Price Strategy
145+
- [Volume Weighted Average Price Strategy](strategy/volume/README.md#type-volumeweightedaveragepricestrategy)
146146

147147
### 🧪 Compound Strategies
148148

strategy/volume/README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ The information provided on this project is strictly for informational purposes
5050
- [func \(n \*NegativeVolumeIndexStrategy\) Compute\(snapshots \<\-chan \*asset.Snapshot\) \<\-chan strategy.Action](<#NegativeVolumeIndexStrategy.Compute>)
5151
- [func \(n \*NegativeVolumeIndexStrategy\) Name\(\) string](<#NegativeVolumeIndexStrategy.Name>)
5252
- [func \(n \*NegativeVolumeIndexStrategy\) Report\(c \<\-chan \*asset.Snapshot\) \*helper.Report](<#NegativeVolumeIndexStrategy.Report>)
53+
- [type VolumeWeightedAveragePriceStrategy](<#VolumeWeightedAveragePriceStrategy>)
54+
- [func NewVolumeWeightedAveragePriceStrategy\(\) \*VolumeWeightedAveragePriceStrategy](<#NewVolumeWeightedAveragePriceStrategy>)
55+
- [func NewVolumeWeightedAveragePriceStrategyWith\(period int\) \*VolumeWeightedAveragePriceStrategy](<#NewVolumeWeightedAveragePriceStrategyWith>)
56+
- [func \(v \*VolumeWeightedAveragePriceStrategy\) Compute\(snapshots \<\-chan \*asset.Snapshot\) \<\-chan strategy.Action](<#VolumeWeightedAveragePriceStrategy.Compute>)
57+
- [func \(v \*VolumeWeightedAveragePriceStrategy\) Name\(\) string](<#VolumeWeightedAveragePriceStrategy.Name>)
58+
- [func \(v \*VolumeWeightedAveragePriceStrategy\) Report\(c \<\-chan \*asset.Snapshot\) \*helper.Report](<#VolumeWeightedAveragePriceStrategy.Report>)
5359

5460

5561
## Constants
@@ -321,4 +327,61 @@ func (n *NegativeVolumeIndexStrategy) Report(c <-chan *asset.Snapshot) *helper.R
321327

322328
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
323329

330+
<a name="VolumeWeightedAveragePriceStrategy"></a>
331+
## type [VolumeWeightedAveragePriceStrategy](<https://github.com/cinar/indicator/blob/master/strategy/volume/volume_weighted_average_price_strategy.go#L19-L22>)
332+
333+
VolumeWeightedAveragePriceStrategy represents the configuration parameters for calculating the Volume Weighted Average Price strategy. Recommends a Buy action when the closing crosses below the VWAP, recommends a Sell action when the closing crosses above the VWAP, and recommends a Hold action otherwise.
334+
335+
```go
336+
type VolumeWeightedAveragePriceStrategy struct {
337+
// VolumeWeightedAveragePrice is the Volume Weighted Average Price indicator instance.
338+
VolumeWeightedAveragePrice *volume.Vwap[float64]
339+
}
340+
```
341+
342+
<a name="NewVolumeWeightedAveragePriceStrategy"></a>
343+
### func [NewVolumeWeightedAveragePriceStrategy](<https://github.com/cinar/indicator/blob/master/strategy/volume/volume_weighted_average_price_strategy.go#L26>)
344+
345+
```go
346+
func NewVolumeWeightedAveragePriceStrategy() *VolumeWeightedAveragePriceStrategy
347+
```
348+
349+
NewVolumeWeightedAveragePriceStrategy function initializes a new Volume Weighted Average Price strategy instance with the default parameters.
350+
351+
<a name="NewVolumeWeightedAveragePriceStrategyWith"></a>
352+
### func [NewVolumeWeightedAveragePriceStrategyWith](<https://github.com/cinar/indicator/blob/master/strategy/volume/volume_weighted_average_price_strategy.go#L34>)
353+
354+
```go
355+
func NewVolumeWeightedAveragePriceStrategyWith(period int) *VolumeWeightedAveragePriceStrategy
356+
```
357+
358+
NewVolumeWeightedAveragePriceStrategyWith function initializes a new Volume Weighted Average Price strategy instance with the given parameters.
359+
360+
<a name="VolumeWeightedAveragePriceStrategy.Compute"></a>
361+
### func \(\*VolumeWeightedAveragePriceStrategy\) [Compute](<https://github.com/cinar/indicator/blob/master/strategy/volume/volume_weighted_average_price_strategy.go#L46>)
362+
363+
```go
364+
func (v *VolumeWeightedAveragePriceStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.Action
365+
```
366+
367+
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
368+
369+
<a name="VolumeWeightedAveragePriceStrategy.Name"></a>
370+
### func \(\*VolumeWeightedAveragePriceStrategy\) [Name](<https://github.com/cinar/indicator/blob/master/strategy/volume/volume_weighted_average_price_strategy.go#L41>)
371+
372+
```go
373+
func (v *VolumeWeightedAveragePriceStrategy) Name() string
374+
```
375+
376+
Name returns the name of the strategy.
377+
378+
<a name="VolumeWeightedAveragePriceStrategy.Report"></a>
379+
### func \(\*VolumeWeightedAveragePriceStrategy\) [Report](<https://github.com/cinar/indicator/blob/master/strategy/volume/volume_weighted_average_price_strategy.go#L78>)
380+
381+
```go
382+
func (v *VolumeWeightedAveragePriceStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
383+
```
384+
385+
Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
386+
324387
Generated by [gomarkdoc](<https://github.com/princjef/gomarkdoc>)
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
Action
2+
0
3+
0
4+
0
5+
0
6+
0
7+
0
8+
0
9+
0
10+
0
11+
0
12+
0
13+
0
14+
0
15+
1
16+
1
17+
-1
18+
1
19+
-1
20+
-1
21+
1
22+
-1
23+
-1
24+
-1
25+
-1
26+
-1
27+
-1
28+
-1
29+
-1
30+
-1
31+
-1
32+
-1
33+
-1
34+
1
35+
1
36+
1
37+
1
38+
1
39+
1
40+
1
41+
1
42+
1
43+
1
44+
1
45+
-1
46+
1
47+
1
48+
-1
49+
1
50+
1
51+
1
52+
-1
53+
-1
54+
1
55+
1
56+
1
57+
1
58+
1
59+
1
60+
1
61+
1
62+
1
63+
1
64+
-1
65+
-1
66+
-1
67+
-1
68+
-1
69+
1
70+
1
71+
1
72+
1
73+
1
74+
1
75+
1
76+
1
77+
-1
78+
1
79+
1
80+
1
81+
-1
82+
-1
83+
-1
84+
-1
85+
-1
86+
-1
87+
-1
88+
-1
89+
-1
90+
-1
91+
-1
92+
-1
93+
-1
94+
-1
95+
-1
96+
-1
97+
-1
98+
-1
99+
-1
100+
-1
101+
-1
102+
-1
103+
-1
104+
-1
105+
-1
106+
-1
107+
1
108+
1
109+
1
110+
-1
111+
-1
112+
1
113+
1
114+
1
115+
1
116+
1
117+
-1
118+
-1
119+
-1
120+
-1
121+
1
122+
1
123+
1
124+
1
125+
1
126+
1
127+
1
128+
-1
129+
-1
130+
-1
131+
-1
132+
-1
133+
-1
134+
-1
135+
-1
136+
-1
137+
-1
138+
-1
139+
-1
140+
-1
141+
-1
142+
1
143+
1
144+
1
145+
1
146+
-1
147+
-1
148+
-1
149+
-1
150+
-1
151+
-1
152+
-1
153+
-1
154+
-1
155+
-1
156+
-1
157+
-1
158+
-1
159+
-1
160+
-1
161+
-1
162+
-1
163+
-1
164+
-1
165+
-1
166+
-1
167+
-1
168+
-1
169+
-1
170+
-1
171+
-1
172+
-1
173+
-1
174+
-1
175+
-1
176+
-1
177+
-1
178+
1
179+
1
180+
1
181+
1
182+
1
183+
1
184+
1
185+
1
186+
-1
187+
-1
188+
-1
189+
-1
190+
-1
191+
-1
192+
-1
193+
-1
194+
-1
195+
-1
196+
-1
197+
-1
198+
-1
199+
-1
200+
-1
201+
-1
202+
-1
203+
-1
204+
1
205+
1
206+
1
207+
1
208+
1
209+
1
210+
1
211+
1
212+
1
213+
1
214+
1
215+
1
216+
1
217+
1
218+
1
219+
1
220+
1
221+
1
222+
1
223+
1
224+
1
225+
1
226+
1
227+
1
228+
1
229+
1
230+
1
231+
1
232+
-1
233+
-1
234+
-1
235+
-1
236+
-1
237+
-1
238+
-1
239+
-1
240+
-1
241+
-1
242+
-1
243+
-1
244+
-1
245+
-1
246+
-1
247+
-1
248+
-1
249+
-1
250+
-1
251+
-1
252+
-1

strategy/volume/volume.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,6 @@ func AllStrategies() []strategy.Strategy {
2929
NewForceIndexStrategy(),
3030
NewMoneyFlowIndexStrategy(),
3131
NewNegativeVolumeIndexStrategy(),
32+
NewVolumeWeightedAveragePriceStrategy(),
3233
}
3334
}

0 commit comments

Comments
 (0)