Python Forum
python indentation errror and output error
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
python indentation errror and output error
#1
    
def backtest(parameters, price1,init_capital, max_capital_deploy, buy_margin, sell_margin):
    longwindow = int(parameters[0])
    shortwindow = int(parameters[1])
    if (longwindow < shortwindow) or (shortwindow < 1) or (init_capital <= 0) or (max_capital_deploy <=0) or (buy_margin < 0) or (sell_margin < 0)  :
        return 0
    short_moving_avg = data.ewm(span=5).mean()
    long_moving_avg =  data.ewm(span=60).mean()
    
    #simulate the trading 
    capital=init_capital
    qty1 = 0
    p1 = 0
    pos = 0
    margin_blocked = 0
    trade_pnl = []
    mtm_pl = []
    for i in range(len(data)):
        if capital <= 0:
            break
        if pos == 0:  
            if short_moving_avg [i] > long_moving_avg[i]:
                pos=-1
                p1 = price1[i]
                margin_blocked = capital * max_capital_deploy
                qty1 = -(margin_blocked / 2) // (p1 * sell_margin)
                if -qty1 < 1:
                    break
            elif short_moving_avg [i] < long_moving_avg[i]:
                pos = 1
                p1 = price1[i]
                margin_blocked = capital * max_capital_deploy
                qty1 = (margin_blocked / 2) // (p1 * buy_margin)
                if qty1 < 1:
                    break
            elif pos < 0: 
                if short_moving_avg [i] > long_moving_avg[i]:
                    pnl = qty1 * (price1[i] - p1) 
                if not fixedcapital:
                    capital += pnl
                
                trade_pnl = np.append(trade_pnl, pnl)
                margin_blocked = 0
                qty1 = 0
                pos = 0
        else:
                pnl = qty1 * (price1[i] - p1)
                mtm_pl = np.append(mtm_pl, pnl)

        elif pos > 0: 
             if short_moving_avg [i] < long_moving_avg[i]:
                pnl = qty1 * (price1[i] - p1) 
                trade_pnl = np.append(trade_pnl, pnl)
                margin_blocked = 0
                qty1 = 0
                pos = 0
        else:
                pnl = qty1 * (price1[i] - p1)
                mtm_pl = np.append(mtm_pl, pnl)
            else: 
                
                if  short_moving_avg [i] > long_moving_avg[i]:
                    pnl = qty1 * (price1[i] - p1)
                trade_pnl = np.append(trade_pnl, pnl)
                margin_blocked = 0
                qty1 = 0
                pos = 0
            return capital, trade_pnl, mtm_pl
I m getting error in indentation but I am not sure this is indentation error or code error can you please help to correct the error and get the trade pnl mtm pnl capital...I want to pass it to the backtest function
Reply
#2
Please, always post the full traceback you get in error tags.
There is inconsistent indentation - e.g. lines 46-47, 57-58.
Also there are huge problems with your nested if/elif/else blocks
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

data = pd.read_csv('aapl.csv')
data1 = data[['Date']]

data1 = data1.set_index('Date')

data = data[["Adj Close"]]
data.head()
data.columns = ["price"]
data.head()


x = [i for i in range(len(data))]
n = len(data)

short_period = 5
long_period = 10

for i in range(n):
    short_moving_avg = data.ewm(span=5).mean()
    long_moving_avg = data.ewm(span=60).mean()
initial part of code is this

how can I add whole trace book can you sugest

Error:
File "<ipython-input-1-2e5b5ffb66bd>", line 75 elif pos > 0: ^ SyntaxError: invalid syntax
Reply
#4
pos=[]
for i in range(len(data)):
       
        if pos == 0:  
            if data[:"short_moving_avg"]  > data["long_moving_avg"]:
                pos=-1
                
        elif data["short_moving_avg"]  < data["long_moving_avg"]:
                pos = 1
               
        elif pos < 0: 
                if data["short_moving_avg"]  < data["long_moving_avg"]:
                    
                      pos = 0     
        elif pos > 0: 
             if data["short_moving_avg"]  > data["long_moving_avg"]:
                pos = 0    
                    
Error:
ValueError Traceback (most recent call last) <ipython-input-29-467a46c71805> in <module>() 6 pos=-1 7 ----> 8 elif data["short_moving_avg"] < data["long_moving_avg"]: 9 pos = 1 10 ~\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self) 1571 raise ValueError("The truth value of a {0} is ambiguous. " 1572 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." -> 1573 .format(self.__class__.__name__)) 1574 1575 __bool__ = __nonzero__ ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
I don't no what does this error mean..how I solve this error
Reply
#5
def backtest(inCapital):
    ohp = 0
    ocp = 0
    hp = 0
    cp = 0
    capital = 1000
    rCapital = 0
    pnl = 0
    pa = 0
    
    columns = ['hp','cp', 'adj.close','pnl','capital']
    df = pd.DataFrame(index= data.set_index(pd.to_datetime(data['Date']), inplace=True), columns=columns)
    
for i in range(len(data)):
    if data['short_moving_emavg'][i] > data['long_moving_emavg'][i]:
        if  hp==0:
            hp=1
            cp=1
            pa = data['Adj Close'][i]
            rcapital=cap+pnl
            pnl=0   
        pdb_set_trace()
                  
        if (hp==1):
            hp=-1
            cp=-1
            pa = data['Adj Close'][i]
            pnl = (data['Adj Close'][i] - pa)
        
              
    elif data['short_moving_emavg'][i] < data['long_moving_emavg'][i]:
        if (hp==0):
            hp=-1
            cp=-1
            pa = data['Adj Close'][i]
            rcapital=cap+pnl
            pnl=0
        if (hp==-1):
            hp=1
            cp=-1
            pa = data['Adj Close'][i]
            rcapital=cap+pnl
            pnl=0
                               
Error:
[error] NameError Traceback (most recent call last) <ipython-input-5-4d163fc15f0e> in <module>() 14 for i in range(len(data)): 15 if data['short_moving_emavg'][i] > data['long_moving_emavg'][i]: ---> 16 if hp==0: 17 hp=1 18 cp=1 NameError: name 'hp' is not defined
[/error]
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  nanmean - np - np.mean - errror venkim_python 4 6,093 Nov-30-2016, 01:39 PM
Last Post: sparkz_alot

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020