@tradejs/strategy-head-and-shoulders 3.0.0 → 3.0.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/docs/signal-example.svg +120 -0
- package/docs/strategy-logic.svg +97 -0
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
TradeJS strategy plugin providing `HeadAndShoulders`.
|
|
4
4
|
|
|
5
|
+
## Strategy overview
|
|
6
|
+
|
|
7
|
+
`HeadAndShoulders` detects bearish head-and-shoulders and optional bullish
|
|
8
|
+
inverse formations from pivots. It checks shoulder symmetry, head prominence,
|
|
9
|
+
neckline slope, prior trend, and pattern age, then supports breakout,
|
|
10
|
+
close-acceptance, or retest entries with height-based risk geometry.
|
|
11
|
+
|
|
12
|
+
## Logic at a glance
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
## Signal on an example chart
|
|
17
|
+
|
|
18
|
+
This bearish example identifies the two shoulders, prominent head, fitted neckline, and the accepted breakdown that releases a SHORT signal.
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
The illustration is schematic, not market data. Exact thresholds, confirmation
|
|
23
|
+
rules, and risk parameters come from the active TradeJS strategy config.
|
|
24
|
+
|
|
5
25
|
## Install
|
|
6
26
|
|
|
7
27
|
```bash
|
|
@@ -30,5 +50,10 @@ yarn install --immutable
|
|
|
30
50
|
yarn checks
|
|
31
51
|
```
|
|
32
52
|
|
|
33
|
-
Publishing is
|
|
34
|
-
`TradeJS-Workflows@v1` reusable workflow.
|
|
53
|
+
Publishing is beta-first and delegated to the pinned
|
|
54
|
+
`TradeJS-Workflows@v1` reusable workflow. A relevant push publishes a unique
|
|
55
|
+
prerelease and moves the npm `beta` tag only after the production-like Project
|
|
56
|
+
image passes. The current verified beta is promoted to one stable `latest`
|
|
57
|
+
release by the weekly automation; production never consumes prereleases.
|
|
58
|
+
|
|
59
|
+
Keywords: ai, claude, codex.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 560" role="img" aria-labelledby="title description">
|
|
2
|
+
<title id="title">HeadAndShoulders signal on an illustrative ticker chart</title>
|
|
3
|
+
<desc id="description">Shoulder symmetry, neckline, and bearish break. The chart is schematic and does not represent live market data.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="background" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#08111f"/><stop offset="100%" stop-color="#111b32"/></linearGradient>
|
|
6
|
+
<linearGradient id="plot" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#101b30"/><stop offset="100%" stop-color="#0b1426"/></linearGradient>
|
|
7
|
+
<filter id="shadow" x="-20%" y="-20%" width="140%" height="150%"><feDropShadow dx="0" dy="7" stdDeviation="9" flood-color="#020617" flood-opacity="0.42"/></filter>
|
|
8
|
+
<style>
|
|
9
|
+
.title{fill:#f8fafc;font:700 28px Inter,ui-sans-serif,system-ui,sans-serif}.subtitle{fill:#94a3b8;font:400 15px Inter,ui-sans-serif,system-ui,sans-serif}.brand{fill:#475569;font:600 13px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.08em}.panel{fill:url(#plot);stroke:#26364f;stroke-width:1.5;filter:url(#shadow)}.grid{stroke:#20304a;stroke-width:1}.axis{fill:#64748b;font:600 10px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.08em}.overlay-label{fill:#cbd5e1;font:600 11px Inter,ui-sans-serif,system-ui,sans-serif}.annotation{fill:#e2e8f0;font:600 11px Inter,ui-sans-serif,system-ui,sans-serif}.condition-title{fill:#64748b;font:700 11px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.09em}.condition-number{fill:#08111f;font:800 12px Inter,ui-sans-serif,system-ui,sans-serif}.condition-copy{fill:#e2e8f0;font:500 13px Inter,ui-sans-serif,system-ui,sans-serif}.footer{fill:#94a3b8;font:500 12px Inter,ui-sans-serif,system-ui,sans-serif}.signal{fill:#08111f;font:800 11px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.03em}.risk{font:700 10px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.06em}
|
|
10
|
+
</style>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="1200" height="560" rx="24" fill="url(#background)"/>
|
|
13
|
+
<text x="32" y="45" class="title">HeadAndShoulders</text>
|
|
14
|
+
<text x="32" y="72" class="subtitle">Shoulder symmetry, neckline, and bearish break</text>
|
|
15
|
+
<text x="1168" y="45" text-anchor="end" class="brand">TRADEJS</text>
|
|
16
|
+
<rect x="32" y="104" width="790" height="416" rx="18" class="panel"/>
|
|
17
|
+
<rect x="842" y="104" width="326" height="416" rx="18" class="panel"/>
|
|
18
|
+
<text x="58" y="134" class="axis">ILLUSTRATIVE TICKER</text>
|
|
19
|
+
<text x="796" y="134" text-anchor="end" class="axis">SCHEMATIC • NOT LIVE DATA</text>
|
|
20
|
+
<line x1="58" y1="162.0" x2="796" y2="162.0" class="grid"/>
|
|
21
|
+
<line x1="58" y1="240.0" x2="796" y2="240.0" class="grid"/>
|
|
22
|
+
<line x1="58" y1="318.0" x2="796" y2="318.0" class="grid"/>
|
|
23
|
+
<line x1="58" y1="396.0" x2="796" y2="396.0" class="grid"/>
|
|
24
|
+
<line x1="58" y1="474.0" x2="796" y2="474.0" class="grid"/>
|
|
25
|
+
<line x1="58.0" y1="162" x2="58.0" y2="474" class="grid"/>
|
|
26
|
+
<line x1="205.6" y1="162" x2="205.6" y2="474" class="grid"/>
|
|
27
|
+
<line x1="353.2" y1="162" x2="353.2" y2="474" class="grid"/>
|
|
28
|
+
<line x1="500.8" y1="162" x2="500.8" y2="474" class="grid"/>
|
|
29
|
+
<line x1="648.4" y1="162" x2="648.4" y2="474" class="grid"/>
|
|
30
|
+
<line x1="796.0" y1="162" x2="796.0" y2="474" class="grid"/>
|
|
31
|
+
<line x1="205.6" y1="299.3" x2="707.4" y2="324.2" stroke="#f59e0b" stroke-width="2" stroke-dasharray="7 5"/>
|
|
32
|
+
<text x="212.6" y="291.3" class="overlay-label">Neckline</text>
|
|
33
|
+
<line x1="58.0" y1="338.0" x2="58.0" y2="354.5" stroke="#34d399" stroke-width="1.5"/>
|
|
34
|
+
<rect x="51.5" y="343.0" width="13.0" height="5.0" rx="2" fill="#34d399"/>
|
|
35
|
+
<line x1="87.5" y1="317.7" x2="87.5" y2="347.0" stroke="#34d399" stroke-width="1.5"/>
|
|
36
|
+
<rect x="81.0" y="324.2" width="13.0" height="14.7" rx="2" fill="#34d399"/>
|
|
37
|
+
<line x1="117.0" y1="291.2" x2="117.0" y2="330.3" stroke="#34d399" stroke-width="1.5"/>
|
|
38
|
+
<rect x="110.5" y="299.3" width="13.0" height="26.0" rx="2" fill="#34d399"/>
|
|
39
|
+
<line x1="146.6" y1="269.3" x2="146.6" y2="309.6" stroke="#34d399" stroke-width="1.5"/>
|
|
40
|
+
<rect x="140.1" y="274.3" width="13.0" height="28.7" rx="2" fill="#34d399"/>
|
|
41
|
+
<line x1="176.1" y1="242.8" x2="176.1" y2="280.4" stroke="#34d399" stroke-width="1.5"/>
|
|
42
|
+
<rect x="169.6" y="249.4" width="13.0" height="23.0" rx="2" fill="#34d399"/>
|
|
43
|
+
<line x1="205.6" y1="238.0" x2="205.6" y2="273.1" stroke="#f87171" stroke-width="1.5"/>
|
|
44
|
+
<rect x="199.1" y="246.1" width="13.0" height="22.0" rx="2" fill="#f87171"/>
|
|
45
|
+
<line x1="235.1" y1="265.9" x2="235.1" y2="299.6" stroke="#f87171" stroke-width="1.5"/>
|
|
46
|
+
<rect x="228.6" y="270.9" width="13.0" height="22.1" rx="2" fill="#f87171"/>
|
|
47
|
+
<line x1="264.6" y1="267.8" x2="264.6" y2="303.7" stroke="#34d399" stroke-width="1.5"/>
|
|
48
|
+
<rect x="258.1" y="274.3" width="13.0" height="21.2" rx="2" fill="#34d399"/>
|
|
49
|
+
<line x1="294.2" y1="228.8" x2="294.2" y2="275.8" stroke="#34d399" stroke-width="1.5"/>
|
|
50
|
+
<rect x="287.7" y="236.9" width="13.0" height="34.0" rx="2" fill="#34d399"/>
|
|
51
|
+
<line x1="323.7" y1="188.2" x2="323.7" y2="241.8" stroke="#34d399" stroke-width="1.5"/>
|
|
52
|
+
<rect x="317.2" y="193.2" width="13.0" height="42.1" rx="2" fill="#34d399"/>
|
|
53
|
+
<line x1="353.2" y1="190.5" x2="353.2" y2="232.5" stroke="#f87171" stroke-width="1.5"/>
|
|
54
|
+
<rect x="346.7" y="197.1" width="13.0" height="27.3" rx="2" fill="#f87171"/>
|
|
55
|
+
<line x1="382.7" y1="216.9" x2="382.7" y2="266.8" stroke="#f87171" stroke-width="1.5"/>
|
|
56
|
+
<rect x="376.2" y="225.0" width="13.0" height="36.8" rx="2" fill="#f87171"/>
|
|
57
|
+
<line x1="412.2" y1="252.8" x2="412.2" y2="293.4" stroke="#f87171" stroke-width="1.5"/>
|
|
58
|
+
<rect x="405.7" y="257.8" width="13.0" height="29.0" rx="2" fill="#f87171"/>
|
|
59
|
+
<line x1="441.8" y1="261.5" x2="441.8" y2="295.4" stroke="#34d399" stroke-width="1.5"/>
|
|
60
|
+
<rect x="435.3" y="268.1" width="13.0" height="19.2" rx="2" fill="#34d399"/>
|
|
61
|
+
<line x1="471.3" y1="235.0" x2="471.3" y2="277.0" stroke="#34d399" stroke-width="1.5"/>
|
|
62
|
+
<rect x="464.8" y="243.1" width="13.0" height="28.9" rx="2" fill="#34d399"/>
|
|
63
|
+
<line x1="500.8" y1="236.7" x2="500.8" y2="274.6" stroke="#f87171" stroke-width="1.5"/>
|
|
64
|
+
<rect x="494.3" y="241.7" width="13.0" height="26.4" rx="2" fill="#f87171"/>
|
|
65
|
+
<line x1="530.3" y1="258.0" x2="530.3" y2="301.2" stroke="#f87171" stroke-width="1.5"/>
|
|
66
|
+
<rect x="523.8" y="264.5" width="13.0" height="28.5" rx="2" fill="#f87171"/>
|
|
67
|
+
<line x1="559.8" y1="287.3" x2="559.8" y2="316.8" stroke="#f87171" stroke-width="1.5"/>
|
|
68
|
+
<rect x="553.3" y="295.4" width="13.0" height="16.3" rx="2" fill="#f87171"/>
|
|
69
|
+
<line x1="589.4" y1="309.7" x2="589.4" y2="330.8" stroke="#f87171" stroke-width="1.5"/>
|
|
70
|
+
<rect x="582.9" y="314.7" width="13.0" height="9.5" rx="2" fill="#f87171"/>
|
|
71
|
+
<line x1="618.9" y1="314.6" x2="618.9" y2="357.3" stroke="#f87171" stroke-width="1.5"/>
|
|
72
|
+
<rect x="612.4" y="321.1" width="13.0" height="28.1" rx="2" fill="#f87171"/>
|
|
73
|
+
<line x1="648.4" y1="338.9" x2="648.4" y2="372.9" stroke="#f87171" stroke-width="1.5"/>
|
|
74
|
+
<rect x="641.9" y="347.1" width="13.0" height="20.9" rx="2" fill="#f87171"/>
|
|
75
|
+
<line x1="677.9" y1="366.6" x2="677.9" y2="393.2" stroke="#f87171" stroke-width="1.5"/>
|
|
76
|
+
<rect x="671.4" y="371.6" width="13.0" height="15.0" rx="2" fill="#f87171"/>
|
|
77
|
+
<line x1="707.4" y1="381.3" x2="707.4" y2="407.2" stroke="#f87171" stroke-width="1.5"/>
|
|
78
|
+
<rect x="700.9" y="387.8" width="13.0" height="11.3" rx="2" fill="#f87171"/>
|
|
79
|
+
<line x1="737.0" y1="387.0" x2="737.0" y2="416.6" stroke="#f87171" stroke-width="1.5"/>
|
|
80
|
+
<rect x="730.5" y="395.1" width="13.0" height="16.5" rx="2" fill="#f87171"/>
|
|
81
|
+
<line x1="766.5" y1="406.4" x2="766.5" y2="430.6" stroke="#f87171" stroke-width="1.5"/>
|
|
82
|
+
<rect x="760.0" y="411.4" width="13.0" height="12.6" rx="2" fill="#f87171"/>
|
|
83
|
+
<line x1="796.0" y1="421.6" x2="796.0" y2="444.7" stroke="#f87171" stroke-width="1.5"/>
|
|
84
|
+
<rect x="789.5" y="428.1" width="13.0" height="8.4" rx="2" fill="#f87171"/>
|
|
85
|
+
<circle cx="176.1" cy="249.4" r="4.5" fill="#f8fafc" stroke="#08111f" stroke-width="2"/>
|
|
86
|
+
<line x1="176.1" y1="243.4" x2="176.1" y2="230.4" stroke="#64748b" stroke-width="1.2"/>
|
|
87
|
+
<text x="176.1" y="225.4" text-anchor="middle" class="annotation">Left shoulder</text>
|
|
88
|
+
<circle cx="323.7" cy="193.2" r="4.5" fill="#f8fafc" stroke="#08111f" stroke-width="2"/>
|
|
89
|
+
<line x1="323.7" y1="187.2" x2="323.7" y2="183.0" stroke="#64748b" stroke-width="1.2"/>
|
|
90
|
+
<text x="323.7" y="178.0" text-anchor="middle" class="annotation">Head</text>
|
|
91
|
+
<circle cx="471.3" cy="243.1" r="4.5" fill="#f8fafc" stroke="#08111f" stroke-width="2"/>
|
|
92
|
+
<line x1="471.3" y1="237.1" x2="471.3" y2="224.1" stroke="#64748b" stroke-width="1.2"/>
|
|
93
|
+
<text x="471.3" y="219.1" text-anchor="middle" class="annotation">Right shoulder</text>
|
|
94
|
+
<line x1="589.4" y1="162" x2="589.4" y2="474" stroke="#f87171" stroke-width="1.5" stroke-dasharray="4 5" stroke-opacity=".75"/>
|
|
95
|
+
<polygon points="582.36,281.24 596.36,281.24 589.36,292.24" fill="#f87171"/>
|
|
96
|
+
<rect x="530.5" y="255.2" width="117.8" height="23" rx="11.5" fill="#f87171"/>
|
|
97
|
+
<text x="589.4" y="270.7" text-anchor="middle" class="signal">Neckline SHORT</text>
|
|
98
|
+
<line x1="607.4" y1="442.8" x2="796" y2="442.8" stroke="#34d399" stroke-width="1.5" stroke-dasharray="5 5"/>
|
|
99
|
+
<text x="791.0" y="437.8" text-anchor="end" class="risk" fill="#34d399">TARGET</text>
|
|
100
|
+
<line x1="607.4" y1="255.6" x2="796" y2="255.6" stroke="#f87171" stroke-width="1.5" stroke-dasharray="5 5"/>
|
|
101
|
+
<text x="791.0" y="250.6" text-anchor="end" class="risk" fill="#f87171">INVALIDATION</text>
|
|
102
|
+
<text x="866" y="136" class="condition-title">WHAT THE STRATEGY SEES</text>
|
|
103
|
+
<rect x="862" y="158" width="286" height="69" rx="13" fill="#111c31" stroke="#26364f"/>
|
|
104
|
+
<circle cx="884" cy="180" r="13" fill="#22d3ee"/>
|
|
105
|
+
<text x="884" y="184" text-anchor="middle" class="condition-number">1</text>
|
|
106
|
+
<text x="905" y="179" class="condition-copy"><tspan x="905" dy="0">Left shoulder, head, and right</tspan><tspan x="905" dy="18">shoulder form</tspan></text>
|
|
107
|
+
<rect x="862" y="241" width="286" height="69" rx="13" fill="#111c31" stroke="#26364f"/>
|
|
108
|
+
<circle cx="884" cy="263" r="13" fill="#60a5fa"/>
|
|
109
|
+
<text x="884" y="267" text-anchor="middle" class="condition-number">2</text>
|
|
110
|
+
<text x="905" y="262" class="condition-copy"><tspan x="905" dy="0">Prominence and symmetry</tspan><tspan x="905" dy="18">validate</tspan></text>
|
|
111
|
+
<rect x="862" y="324" width="286" height="69" rx="13" fill="#111c31" stroke="#26364f"/>
|
|
112
|
+
<circle cx="884" cy="346" r="13" fill="#f59e0b"/>
|
|
113
|
+
<text x="884" y="350" text-anchor="middle" class="condition-number">3</text>
|
|
114
|
+
<text x="905" y="345" class="condition-copy"><tspan x="905" dy="0">Neckline slope and prior trend</tspan><tspan x="905" dy="18">pass</tspan></text>
|
|
115
|
+
<rect x="862" y="407" width="286" height="69" rx="13" fill="#111c31" stroke="#26364f"/>
|
|
116
|
+
<circle cx="884" cy="429" r="13" fill="#34d399"/>
|
|
117
|
+
<text x="884" y="433" text-anchor="middle" class="condition-number">4</text>
|
|
118
|
+
<text x="905" y="428" class="condition-copy"><tspan x="905" dy="0">Price closes below the</tspan><tspan x="905" dy="18">neckline</tspan></text>
|
|
119
|
+
<text x="32" y="545" class="footer">SHORT EXAMPLE • MIRRORED RULES CAN PRODUCE THE OPPOSITE SIDE • EXACT THRESHOLDS ARE CONFIGURABLE</text>
|
|
120
|
+
</svg>
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 360" role="img" aria-labelledby="title description">
|
|
2
|
+
<title id="title">HeadAndShoulders strategy logic</title>
|
|
3
|
+
<desc id="description">Shoulders and head → neckline → reversal entry. Top formation → SHORT; inverse formation → LONG.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="background" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0%" stop-color="#08111f" />
|
|
7
|
+
<stop offset="100%" stop-color="#111b32" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<filter id="shadow" x="-20%" y="-20%" width="140%" height="150%">
|
|
10
|
+
<feDropShadow dx="0" dy="8" stdDeviation="10" flood-color="#020617" flood-opacity="0.45" />
|
|
11
|
+
</filter>
|
|
12
|
+
<marker id="arrowhead" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto">
|
|
13
|
+
<path d="M 0 0 L 6 3 L 0 6 Z" fill="#64748b" />
|
|
14
|
+
</marker>
|
|
15
|
+
<style>
|
|
16
|
+
.card { fill: #111c31; stroke: #334155; stroke-width: 1.5; filter: url(#shadow); }
|
|
17
|
+
.divider { stroke: #26364f; stroke-width: 1; }
|
|
18
|
+
.arrow { fill: none; stroke: #64748b; stroke-width: 2; }
|
|
19
|
+
.title { fill: #f8fafc; font: 700 30px Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
20
|
+
.subtitle { fill: #94a3b8; font: 400 16px Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
21
|
+
.step-number { fill: #08111f; font: 800 13px Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
22
|
+
.step-title { fill: #f8fafc; font: 650 16px Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
23
|
+
.step-copy { fill: #cbd5e1; font: 400 14px Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
24
|
+
.footer { fill: #94a3b8; font: 500 15px Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
25
|
+
.brand { fill: #475569; font: 600 13px Inter, ui-sans-serif, system-ui, sans-serif; letter-spacing: 0.08em; }
|
|
26
|
+
</style>
|
|
27
|
+
</defs>
|
|
28
|
+
<rect width="1200" height="360" rx="24" fill="url(#background)" />
|
|
29
|
+
<text x="32" y="48" class="title">HeadAndShoulders</text>
|
|
30
|
+
<text x="32" y="78" class="subtitle">Shoulders and head → neckline → reversal entry</text>
|
|
31
|
+
<text x="1168" y="48" text-anchor="end" class="brand">TRADEJS</text>
|
|
32
|
+
<g>
|
|
33
|
+
<rect x="32" y="120" width="192" height="150" rx="18" class="card" />
|
|
34
|
+
<rect x="32" y="120" width="192" height="6" rx="3" fill="#22d3ee" />
|
|
35
|
+
<circle cx="56" cy="148" r="13" fill="#22d3ee" />
|
|
36
|
+
<text x="56" y="153" text-anchor="middle" class="step-number">1</text>
|
|
37
|
+
<text x="79" y="154" class="step-title">Find pivots</text>
|
|
38
|
+
<path d="M 48 169 H 208" class="divider" />
|
|
39
|
+
<text x="50" y="197" class="step-copy">
|
|
40
|
+
<tspan x="50" dy="0">Left / head / right</tspan>
|
|
41
|
+
<tspan x="50" dy="22">Normal or inverse</tspan>
|
|
42
|
+
</text>
|
|
43
|
+
</g>
|
|
44
|
+
<path d="M 224 195 H 254" class="arrow" marker-end="url(#arrowhead)" />
|
|
45
|
+
<g>
|
|
46
|
+
<rect x="268" y="120" width="192" height="150" rx="18" class="card" />
|
|
47
|
+
<rect x="268" y="120" width="192" height="6" rx="3" fill="#60a5fa" />
|
|
48
|
+
<circle cx="292" cy="148" r="13" fill="#60a5fa" />
|
|
49
|
+
<text x="292" y="153" text-anchor="middle" class="step-number">2</text>
|
|
50
|
+
<text x="315" y="154" class="step-title">Validate shape</text>
|
|
51
|
+
<path d="M 284 169 H 444" class="divider" />
|
|
52
|
+
<text x="286" y="197" class="step-copy">
|
|
53
|
+
<tspan x="286" dy="0">Prominence</tspan>
|
|
54
|
+
<tspan x="286" dy="22">Symmetry + age</tspan>
|
|
55
|
+
</text>
|
|
56
|
+
</g>
|
|
57
|
+
<path d="M 460 195 H 490" class="arrow" marker-end="url(#arrowhead)" />
|
|
58
|
+
<g>
|
|
59
|
+
<rect x="504" y="120" width="192" height="150" rx="18" class="card" />
|
|
60
|
+
<rect x="504" y="120" width="192" height="6" rx="3" fill="#f59e0b" />
|
|
61
|
+
<circle cx="528" cy="148" r="13" fill="#f59e0b" />
|
|
62
|
+
<text x="528" y="153" text-anchor="middle" class="step-number">3</text>
|
|
63
|
+
<text x="551" y="154" class="step-title">Fit neckline</text>
|
|
64
|
+
<path d="M 520 169 H 680" class="divider" />
|
|
65
|
+
<text x="522" y="197" class="step-copy">
|
|
66
|
+
<tspan x="522" dy="0">Slope check</tspan>
|
|
67
|
+
<tspan x="522" dy="22">Prior trend</tspan>
|
|
68
|
+
</text>
|
|
69
|
+
</g>
|
|
70
|
+
<path d="M 696 195 H 726" class="arrow" marker-end="url(#arrowhead)" />
|
|
71
|
+
<g>
|
|
72
|
+
<rect x="740" y="120" width="192" height="150" rx="18" class="card" />
|
|
73
|
+
<rect x="740" y="120" width="192" height="6" rx="3" fill="#c084fc" />
|
|
74
|
+
<circle cx="764" cy="148" r="13" fill="#c084fc" />
|
|
75
|
+
<text x="764" y="153" text-anchor="middle" class="step-number">4</text>
|
|
76
|
+
<text x="787" y="154" class="step-title">Trigger</text>
|
|
77
|
+
<path d="M 756 169 H 916" class="divider" />
|
|
78
|
+
<text x="758" y="197" class="step-copy">
|
|
79
|
+
<tspan x="758" dy="0">Breakout</tspan>
|
|
80
|
+
<tspan x="758" dy="22">Accept or retest</tspan>
|
|
81
|
+
</text>
|
|
82
|
+
</g>
|
|
83
|
+
<path d="M 932 195 H 962" class="arrow" marker-end="url(#arrowhead)" />
|
|
84
|
+
<g>
|
|
85
|
+
<rect x="976" y="120" width="192" height="150" rx="18" class="card" />
|
|
86
|
+
<rect x="976" y="120" width="192" height="6" rx="3" fill="#34d399" />
|
|
87
|
+
<circle cx="1000" cy="148" r="13" fill="#34d399" />
|
|
88
|
+
<text x="1000" y="153" text-anchor="middle" class="step-number">5</text>
|
|
89
|
+
<text x="1023" y="154" class="step-title">Order plan</text>
|
|
90
|
+
<path d="M 992 169 H 1152" class="divider" />
|
|
91
|
+
<text x="994" y="197" class="step-copy">
|
|
92
|
+
<tspan x="994" dy="0">Height stop</tspan>
|
|
93
|
+
<tspan x="994" dy="22">Height target</tspan>
|
|
94
|
+
</text>
|
|
95
|
+
</g>
|
|
96
|
+
<text x="32" y="322" class="footer">Top formation → SHORT; inverse formation → LONG</text>
|
|
97
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradejs/strategy-head-and-shoulders",
|
|
3
|
-
"version": "3.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.0.1-beta.2",
|
|
4
|
+
"description": "Head-and-shoulders and inverse-pattern strategy with neckline confirmation, retests, and pattern-height risk targets for TradeJS.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "yarn@4.13.0",
|
|
7
7
|
"engines": {
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
"trading",
|
|
13
13
|
"strategy",
|
|
14
14
|
"plugin",
|
|
15
|
-
"backtesting"
|
|
15
|
+
"backtesting",
|
|
16
|
+
"ai",
|
|
17
|
+
"claude",
|
|
18
|
+
"codex"
|
|
16
19
|
],
|
|
17
20
|
"homepage": "https://tradejs.dev",
|
|
18
21
|
"repository": {
|
|
@@ -26,7 +29,8 @@
|
|
|
26
29
|
"module": "./dist/index.js",
|
|
27
30
|
"types": "./dist/index.d.ts",
|
|
28
31
|
"files": [
|
|
29
|
-
"dist"
|
|
32
|
+
"dist",
|
|
33
|
+
"docs"
|
|
30
34
|
],
|
|
31
35
|
"exports": {
|
|
32
36
|
".": {
|