For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See:

I ran sample code but I did not work. what should I do?

  • from future import (absolute_import, division, print_function,

    import datetime # For datetime objects
    import os.path # To manage paths
    import sys # To find out the script name (in argv[0])

    Import the backtrader platform

    import backtrader as bt

    Create a Stratey

    class TestStrategy(bt.Strategy):

    def log(self, txt, dt=None):
        ''' Logging function fot this strategy'''
        dt = dt or self.datas[0]
        print('%s, %s' % (dt.isoformat(), txt))
    def __init__(self):
        # Keep a reference to the "close" line in the data[0] dataseries
        self.dataclose = self.datas[0].close
    def next(self):
        # Simply log the closing price of the series from the reference
        self.log('Close, %.2f' % self.dataclose[0])
        if self.dataclose[0] < self.dataclose[-1]:
            # current close less than previous close
            if self.dataclose[-1] < self.dataclose[-2]:
                # previous close less than the previous close
                # BUY, BUY, BUY!!! (with all possible default parameters)
                self.log('BUY CREATE, %.2f' % self.dataclose[0])

    if name == 'main':
    # Create a cerebro entity
    cerebro = bt.Cerebro()

    # Add a strategy
    # Datas are in a subfolder of the samples. Need to find where the script is
    # because it could have been called from anywhere
    modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
    datapath = os.path.join(modpath, '/Users/javad/Trading/Bt/Untitled-1.txt')
    # Create a Data Feed
    data = bt.feeds.YahooFinanceCSVData(
        # Do not pass values before this date
        fromdate=datetime.datetime(2000, 1, 1),
        # Do not pass values before this date
        todate=datetime.datetime(2000, 12, 31),
        # Do not pass values after this date
    # Add the Data Feed to Cerebro
    # Set our desired cash start
    # Print out the starting conditions
    print('Starting Portfolio Value: %.2f' %
    # Run over everything
    # Print out the final result
    print('Final Portfolio Value: %.2f' %

  • administrators

    Things you can do

    1. Read have you have just before your eyes

    For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See:

    This is at the top of each and every page of the forum. The advice is actually generic and helps for everything.

    If not your code cannot be read by others

    2. Nobody knows what went wrong.

    You say it did not work.

    • What's the error?
    • What's the data?
    • What's XXX? (anything that can help)

Log in to reply