Class: SQA::Strategy::MACD
- Inherits:
-
Object
- Object
- SQA::Strategy::MACD
- Defined in:
- lib/sqa/strategy/macd.rb
Overview
MACD (Moving Average Convergence Divergence) crossover strategy Buy when MACD line crosses above signal line (bullish) Sell when MACD line crosses below signal line (bearish)
Class Method Summary collapse
Class Method Details
.trade(vector) ⇒ Object
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 |
# File 'lib/sqa/strategy/macd.rb', line 9 def self.trade(vector) return :hold unless vector.respond_to?(:prices) && vector.prices&.size >= 35 prices = vector.prices # Calculate MACD using SQAI (returns macd, signal, histogram) macd_line, signal_line, histogram = SQAI.macd( prices, fast_period: 12, slow_period: 26, signal_period: 9 ) return :hold if macd_line.nil? || signal_line.nil? || macd_line.size < 2 # Get current and previous values current_macd = macd_line[-1] current_signal = signal_line[-1] prev_macd = macd_line[-2] prev_signal = signal_line[-2] # Bullish crossover: MACD crosses above signal if prev_macd <= prev_signal && current_macd > current_signal :buy # Bearish crossover: MACD crosses below signal elsif prev_macd >= prev_signal && current_macd < current_signal :sell # No crossover else :hold end rescue => e warn "MACD strategy error: #{e.}" :hold end |