Module backtrader.strategies.sma_crossover
Expand source code
#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
###############################################################################
#
# Copyright (C) 2015-2023 Daniel Rodriguez
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import backtrader as bt
import backtrader.indicators as btind
class MA_CrossOver(bt.Strategy):
'''This is a long-only strategy which operates on a moving average cross
Note:
- Although the default
Buy Logic:
- No position is open on the data
- The ``fast`` moving averagecrosses over the ``slow`` strategy to the
upside.
Sell Logic:
- A position exists on the data
- The ``fast`` moving average crosses over the ``slow`` strategy to the
downside
Order Execution Type:
- Market
'''
alias = ('SMA_CrossOver',)
params = (
# period for the fast Moving Average
('fast', 10),
# period for the slow moving average
('slow', 30),
# moving average to use
('_movav', btind.MovAv.SMA)
)
def __init__(self):
sma_fast = self.p._movav(period=self.p.fast)
sma_slow = self.p._movav(period=self.p.slow)
self.buysig = btind.CrossOver(sma_fast, sma_slow)
def next(self):
if self.position.size:
if self.buysig < 0:
self.sell()
elif self.buysig > 0:
self.buy()
Classes
class MA_CrossOver
-
This is a long-only strategy which operates on a moving average cross
Note
- Although the default
Buy Logic: - No position is open on the data
- The
fast
moving averagecrosses over theslow
strategy to the upside.
Sell Logic: - A position exists on the data
- The
fast
moving average crosses over theslow
strategy to the downside
Order Execution Type: - Market
Expand source code
class MA_CrossOver(bt.Strategy): '''This is a long-only strategy which operates on a moving average cross Note: - Although the default Buy Logic: - No position is open on the data - The ``fast`` moving averagecrosses over the ``slow`` strategy to the upside. Sell Logic: - A position exists on the data - The ``fast`` moving average crosses over the ``slow`` strategy to the downside Order Execution Type: - Market ''' alias = ('SMA_CrossOver',) params = ( # period for the fast Moving Average ('fast', 10), # period for the slow moving average ('slow', 30), # moving average to use ('_movav', btind.MovAv.SMA) ) def __init__(self): sma_fast = self.p._movav(period=self.p.fast) sma_slow = self.p._movav(period=self.p.slow) self.buysig = btind.CrossOver(sma_fast, sma_slow) def next(self): if self.position.size: if self.buysig < 0: self.sell() elif self.buysig > 0: self.buy()
Ancestors
Subclasses
Class variables
var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines
Inherited members
Strategy
:add_timer
addminperiod
buy
buy_bracket
cancel
close
getdatabyname
getdatanames
getposition
getpositionbyname
getpositions
getpositionsbyname
getsizer
getsizing
incminperiod
lines
minbuffer
next
nextstart
notify_cashvalue
notify_data
notify_fund
notify_order
notify_store
notify_timer
notify_trade
once
oncestart
order_target_percent
order_target_size
order_target_value
position
positionbyname
positions
positionsbyname
prenext
preonce
qbuffer
sell
sell_bracket
setminperiod
setsizer
sizer
start
stop
updateminperiod
class SMA_CrossOver
-
This is a long-only strategy which operates on a moving average cross
Note
- Although the default
Buy Logic: - No position is open on the data
- The
fast
moving averagecrosses over theslow
strategy to the upside.
Sell Logic: - A position exists on the data
- The
fast
moving average crosses over theslow
strategy to the downside
Order Execution Type: - Market
Ancestors
Class variables
var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines
Inherited members
MA_CrossOver
:add_timer
addminperiod
buy
buy_bracket
cancel
close
getdatabyname
getdatanames
getposition
getpositionbyname
getpositions
getpositionsbyname
getsizer
getsizing
incminperiod
lines
minbuffer
next
nextstart
notify_cashvalue
notify_data
notify_fund
notify_order
notify_store
notify_timer
notify_trade
once
oncestart
order_target_percent
order_target_size
order_target_value
position
positionbyname
positions
positionsbyname
prenext
preonce
qbuffer
sell
sell_bracket
setminperiod
setsizer
sizer
start
stop
updateminperiod