Coder Social home page Coder Social logo

chillaranand / stocktrends Goto Github PK

View Code? Open in Web Editor NEW
230.0 15.0 74.0 82 KB

A python package to calculate trends in stocks, derivates(Futures & Options) using Renko, PnF, LineBreak etc

License: GNU General Public License v3.0

Python 100.00%
stock-market trading renko linebreak pnf

stocktrends's Introduction

stocktrends

A python package to calculate trends in stock markets.

Latest PyPI version

Installation

To install stable version from pypi, run

pip install stocktrends

To install latest code from github, run

pip install git+https://github.com/chillaranand/stocktrends

Usage

The following code from demo.py file shows how to construct dataframe from a csv file and then plot Renko, Line Break and PnF charts.
"""
Sample data from tests/HDFCLIFE.csv file.

Date,Symbol,Series,Prev Close,Open,High,Low,Last,Close,VWAP,Volume,Turnover,Trades,Deliverable Volume,%Deliverble
2017-11-17,HDFCLIFE,EQ,290.0,310.0,369.0,307.0,343.9,344.6,327.26,168836552,5525288229115000.0,1177530,82044782,0.48590000000000005
2017-11-20,HDFCLIFE,EQ,344.6,344.7,358.9,344.0,355.0,355.35,353.18,14650240,517410581605000.0,166263,6761287,0.4615
2017-11-21,HDFCLIFE,EQ,355.35,356.4,418.9,352.5,386.9,385.3,389.24,43078194,1676786001315000.0,450090,11584111,0.26890000000000003
2017-11-22,HDFCLIFE,EQ,385.3,388.0,408.0,386.9,394.0,395.2,397.38,15227642,605123098895000.0,166870,3475999,0.22829999999999998
"""

import pandas as pd

from stocktrends import indicators


df = pd.read_csv('tests/HDFCLIFE.csv')
df.columns = [i.lower() for i in df.columns]
rows = 5

pnf = indicators.PnF(df)
pnf.box_size = 10
pnf.reversal_size = 3


print('\n\nPnF BAR data - based on "close" column')
data = pnf.get_bar_ohlc_data(source='close')
print(data.head(rows))


print('\n\nPnF BOX data - based on "close" column')
pnf_data = pnf.get_ohlc_data(source='close')
print(pnf_data.head(rows))


print('\n\nPnF BOX data - based on "high"/"low" columns')
data = pnf.get_bar_ohlc_data(source='hl')
print(data.head(rows))


renko = indicators.Renko(df)


print('\n\nRenko box calcuation based on periodic close')
renko.brick_size = 2
renko.chart_type = indicators.Renko.PERIOD_CLOSE
data = renko.get_ohlc_data()
print(data.tail(rows))


# print('\n\nRenko box calcuation based on price movement')
# renko.chart_type = indicators.Renko.PRICE_MOVEMENT
# data = renko.get_ohlc_data()
# print(data.tail(rows))


lb = indicators.LineBreak(df)

print('\n\nLine break chart')
lb.line_number = 3
data = lb.get_ohlc_data()
print(data.tail(rows))

stocktrends's People

Contributors

chillaranand avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stocktrends's Issues

How to get the chart to work?

Hi mate, i've been reading through your code for a few days now.
Im not a full fledged python developer (just getting started). I cant seem to get the chart to work.

Could you please explain this piece of code?

I assume that this definition :

  • gets the brick size that was defined earlier.
  • bricks is the array used.. which consists of 1,-1, +2, -2

What is for delta in data though?.. or how does it translate to for delta in bricks array? Is it just a count or does delta get the value from the bricks array?

Also, using variable explorer, I see that bricks array is "Array of float64"

def plot_renko(data, brick_size):
    fig = plt.figure(1)
    fig.clf()
    axes = fig.gca()
    y_max = max(data)

    prev_num = 0

    bricks = []

    for delta in data:
        if delta > 0:
            bricks.extend([1]*delta)
        else:
            bricks.extend([-1]*abs(delta))

    for index, number in enumerate(bricks):
        if number == 1:
            facecolor='green'
        else:
            facecolor='red'

        prev_num += number

        renko = Rectangle(
            (index, prev_num * brick_size), 1, brick_size,
            facecolor=facecolor, alpha=0.5
        )
        axes.add_patch(renko)

    plt.show()

Valueerror:

Hello sir,

I am creating a bot using your stocktrends library, however i encountered an error in calculations, ca you please help me out, I am using live market data from Binance websocket in form of candles, and converting it into renko. Please help me out! TIA

line 72, in period_close_bricks
bricks = int((close - close_p1) / brick_size)
ValueError: cannot convert float NaN to integer

Key not found error when I pass tail items to Renko

Hello,

I was getting a "Key not found error". On investigating on the source code I understood df.tail(n).loc[0] does not work. I was using this approach as I noticed a performance issue when there were too many items in panda list. Instead of sending the entire list I was sending tail of 50 items to create the Renko chart and it started breaking. I changed in my local loc[0] to iloc[0] and it worked for me.

The code which was breaking and what I did to fix
self.cdf.loc[0] = self.df.iloc[0]

Hope this helps.

Praneeth

price_movement_bricks is missing

Hello Anand,

I get the following error. Indicators.py does not contain the function (def) price_movement_bricks :

AttributeError Traceback (most recent call last)
in ()
14 # renko box calcuation based on price movement
15 renko.chart_type = Renko.PRICE_MOVEMENT
---> 16 data = renko.get_ohlc_data()
17 print(data.tail())

~/anaconda3/lib/python3.6/site-packages/stocktrends/indicators.py in get_ohlc_data(self)
37 self.period_close_bricks()
38 else:
---> 39 self.price_movement_bricks()
40
41 return self.cdf

AttributeError: 'Renko' object has no attribute 'price_movement_bricks'

renko.PRICE_MOVEMENT giving error

Hi @ChillarAnand ,

I' getting an error while accessing chart_type = PRICE_MOVEMENT

print('\n\nRenko box calcuation based on price movement') renko.chart_type = indicators.Renko.PRICE_MOVEMENT data = renko.get_ohlc_data() print(data.tail(rows))

here is the error

AttributeError: 'Renko' object has no attribute 'cdf'

Spyder always gave me the same error

Hi i'm trying to build a class to wrap renko charts but spyder always launch me the same error:

AttributeError: 'Renko' object has no attribute 'get_ohlc_data'
or
AttributeError: 'Renko' object has no attribute 'get_bricks'

it's come from this method:

def __Convert2Renko(self):
"""
Esta funcion de uso interno convierte el dataframe al renko
"""
self.__DF_ohlc.reset_index(inplace=True)
df_temp = pd.DataFrame()
df_temp["date"] = self.__DF_ohlc[self.__DF_ohlc.columns[0]]
df_temp["open"] = self.__DF_ohlc["Open"]
df_temp["high"] = self.__DF_ohlc["High"]
df_temp["low"] = self.__DF_ohlc["Low"]
df_temp["close"] = self.__DF_ohlc["Close"]
df_temp["volume"] = self.__DF_ohlc["Volume"]
renko = Renko(df_temp)
renko.brick_size = round(self.__ATRInterno(self.__DF_ohlc,self.__Periodo)["ATR"].tail(1),0)
self.__DF_Renko = renko.get_ohlc_data() <-here alway launch the error

Speed/Performance

For starters, I recently found stocktrends and I like it.

For my system, I need to continuously send the entire OHLC DataFrame to Renko() to continuously build the renko DataFrame. As the OHLC grows, the execution time increases. For example, it takes 2.5 seconds to process 8200 rows of OHLC data. In a medium frequency system, that can be too long. Do you have any suggestions on how to reduce the processing time? I'm thinking along the lines of incremental updates. However, I don't quite know how to implement that.

Thanks.

linebreak stock price

When the stock price changes from two digit to 3 or one to two digit the linebreak logic breaks shows incorrect values. Example stock fuv and amd

how can i draw renko chart on atr base

Respecected Sir,

your code of traditional renko are awesome working
But due to volatile bricks no. of trade are increase very fast and profit convert into loss

please we need renko on atr based a sample file ... please can u provide it..
with regards
i m gajesingh solanki 8104093607

getting repetitive value of date and time column in renko

Hi @ChillarAnand,
I am trying to get renko data using following code:

from stocktrends import indicators
import pandas as pd

df = pd.read_csv('EUR-USD-RENKO-DATA.csv')

renko = indicators.Renko(df)

print('\n\nRenko box calcuation based on periodic close')
renko.brick_size = 0.0001
renko.chart_type = indicators.Renko.PERIOD_CLOSE
data = renko.get_ohlc_data()

data.to_csv('renko.csv')

And I am having follwing issues:

  1. it tries to round off the value to brick size
  2. date value is repetitive

I don't know if my code is wrong. Can you please guide me if I have to make any changes to the code?
I have attach the zip file for data and my output and also a screenshot highlighting repetition.

Thanks

files.zip

Screenshot

ValueError:cannot convert float NaN to integer

Below Renko works for AAPL stock tickers but not for Malaysia Exchange such as 0200.KL. It comes out ValueError:cannot convert float NaN to integer although I find no NaN on my OHLC stock price data.

import datetime
import dateutil
import pandas_datareader.data as wb
from stocktrends import Renko

year=5
tickers ="0200.KL" #Comment it and uncomment the below code later
#tickers="AAPL" #uncomment this to find out whether this ticker works
ohlc = wb.get_data_yahoo(tickers,start=datetime.date.today()-dateutil.relativedelta.relativedelta(years=year),end=datetime.date.today())

def ATR(DF,n):
    "function to calculate True Range and Average True Range"
    df = DF.copy()
    df['H-L']=abs(df['High']-df['Low'])
    df['H-PC']=abs(df['High']-df['Adj Close'].shift(1))
    df['L-PC']=abs(df['Low']-df['Adj Close'].shift(1))
    df['True Range']=df[['H-L','H-PC','L-PC']].max(axis=1,skipna=False)
    df["Average True Range"] = df['True Range'].rolling(n).mean()
    #df2 = df.drop(['H-L','H-PC','L-PC'],axis=1)
    return df["Average True Range"]

def renko_DF(DF):
    "function to convert ohlc data into renko bricks"
    df = DF.copy()
    df.reset_index(inplace=True)
    df = df.iloc[:,[0,1,2,3,5,6]]
    df.rename(columns = {"Date" : "date", "High" : "high","Low" : "low", "Open" : "open","Adj Close" : "close", "Volume" : "volume"}, inplace = True)
    print(df.isnull().values.any())
    #df.fillna(method="bfill")
    df2 = Renko(df)
    df2.brick_size = round(ATR(DF,120)[-1],0)
    renko_df = df2.get_ohlc_data()
    return renko_df

renko_DF(ohlc)

Not getting correct renko OHLC

Hello guys,
Using brick size = 0.0100
Stock name: USDINRAPRFUT(future scripts)
Data Source: Zerodha Kite API historical data.
Interval: 1 Minute.

Applying indicator on Renko OHLC: moving average
using indicator library: Talib
the time period for the indicator: 12

Please help me out, I have been stuck in between.

Thanks in advance.

Regards,
Mahesh

Renko data generated using stocktrends does not match to chart in tradingview , investing.com and zerodha

Please check Renko data from stocktrend does not match to chart in tradingview , inveting.com and zerodha
ohlc source data I used was taken from Yahoo Finance which exactly matched data present in NSE website

There are days when it can be seen green and red bar on same day for given script but I don't think stocktrends generate data like that.

stocktrends Package is really good and It would be awesome if it can match exactly what is shown in Zerodha or other similar portal.

Memory error

Hi Anand,
I am trying to use stocktrend library to plot renko.
in my program i am getting memeory error".

renktest.txt

please let me know if further details required.

Legacy/Deprecated code warnings

FutureWarning: Slicing a positional slice with .loc is not supported, and will raise TypeError in a future version. Use .loc with labels or .iloc with positions instead.
self.cdf.loc[0, 1:] = [close - brick_size, close, close - brick_size, close]

This ticket is a reminder that the issue needs to be fixed in the upcoming releases.

from stocktrends import Renko
...
    renko = Renko(df)
    renko.brick_size = min(atr_brick_size, brick_size)
    renko_df = renko.get_ohlc_data()
...

Rounding of stock prices

The returned bricks have rounded stock prices. Can the rounding be turned off/made optional by any chance? For a stock with lower notional stock price, this rounding can have significant impact on the P&L.

By the way...great job so far.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.