import pandas as pd import numpy as np from matplotlib import pyplot as plt import seaborn df = pd.read_csv(r'your path\VSH3\VSH3Data.txt', sep=";", header=None) df.columns = ["positionID","candleID","Side","openProfit","ADX[0]","ADX[1]","ATR[0]","ATR[1]","Std[0]","Std[1]", "MA[0]","MA[1]","Will[0]","Will[1]","High[0]","High[1]","Low[0]","Low[1]","Close[0]","Close[1]"] trades = pd.read_csv(r'your path\VSH3\VSH3Trades.txt', sep=";", header=None) trades.columns = ["positionID","profit"] df = pd.merge(df, trades, on='positionID', how='outer') #Delete this part of the code if your format is period-based for i in df.columns[3:]: df[str(i)] = df[str(i)].str.replace(',','.') df[str(i)] = df[str(i)].astype(float) #ADX analysis ADXbins = np.linspace(0,100,11, dtype = np.float32) df['target[0]'] = df['ADX[0]'] df['target[1]'] = df['ADX[1]'] ADXname = 'ADX' ADXlabels = ['<10','<20','<30','<40','<50','<60','<70','<80','<90','<100'] createChart(df, ADXlabels, ADXname, ADXbins) #Will analysis Willbins = np.linspace(-100,0,11, dtype = np.float32) df['target[0]'] = df['Will[0]'] df['target[1]'] = df['Will[1]'] Willname = 'Will' Willlabels = ['<-90','<-80','<-70','<-60','<-50','<-40','<-30','<-20','<-10','<0'] createChart(df, Willlabels, Willname, Willbins) #Range in ATR analysis RanAbins = np.linspace(0,10,11, dtype = np.float32) df['target[0]'] = (df['High[0]'] - df['Low[0]'])/ df['ATR[0]'] df['target[1]'] = (df['High[1]'] - df['Low[1]']) / df['ATR[1]'] RanAname = 'Range in ATR' RanAlabels = ['<1','<2','<3','<4','<5','<6','<7','<8','<9','<10'] createChart(df, RanAlabels, RanAname, RanAbins) #Relative ATR analysis RAbins = np.linspace(0,1,11, dtype = np.float32) df['target[0]'] = df['ATR[0]'] / df['Close[0]'] * 100 df['target[1]'] = df['ATR[1]'] / df['Close[1]'] * 100 RAname = 'Relative in ATR' RAlabels = ['<.1%','<.2%','<.3%','<.4%','<.5%','<.6%','<.7%','<.8%','<.9%','<1%'] createChart(df, RAlabels, RAname, RAbins) #Distance from High analysis DisHbins = np.linspace(0,1,11, dtype = np.float32) df['target[0]'] = (df['High[0]'] - df['Close[0]']) / df['ATR[0]'] df['target[1]'] = (df['High[1]'] - df['Close[1]']) / df['ATR[1]'] DisHname = 'Distance from High in ATR' DisHlabels = ['<.1','<.2','<.3','<.4','<.5','<.6','<.7','<.8','<.9','<1'] createChart(df, DisHlabels, DisHname, DisHbins) #Distance from Low analysis DisLbins = np.linspace(0,1,11, dtype = np.float32) df['target[0]'] = (df['Close[0]'] - df['Low[0]']) / df['ATR[0]'] df['target[1]'] = (df['Close[1]'] - df['Low[1]']) / df['ATR[1]'] DisLname = 'Distance from Low in ATR' DisLlabels = ['<.1','<.2','<.3','<.4','<.5','<.6','<.7','<.8','<.9','<1'] createChart(df, DisLlabels, DisLname, DisLbins) #Distance from SMA analysis SMAbins = np.linspace(-5,5,11, dtype = np.float32) df['target[0]'] = (df['Close[0]'] - df['SMA[0]']) / df['ATR[0]'] df['target[1]'] = (df['Close[1]'] - df['SMA[1]']) / df['ATR[1]'] SMAname = 'Distance from SMA in ATR' SMAlabels = ['<-4','<-3','<-2','<-1','<0','<1','<2','<3','<4','<5'] createChart(df, SMAlabels, SMAname, SMAbins) #DON'T CHANGE ANYTHING BELOW def createChart(df, labels, name, bins): df1 = df[df['candleID'] == 0][['Side','target[0]','target[1]','profit']] df1['[0]bins'] = pd.cut(df1.iloc[:,1],bins) df1['[1]bins'] = pd.cut(df1.iloc[:,2],bins) long0 = df1[df1['Side']=='Long'].groupby('[0]bins')['profit'].agg(['sum', 'count']) long1 = df1[df1['Side']=='Long'].groupby('[1]bins')['profit'].agg(['sum', 'count']) short0 = df1[df1['Side']=='Short'].groupby('[0]bins')['profit'].agg(['sum', 'count']) short1 = df1[df1['Side']=='Short'].groupby('[1]bins')['profit'].agg(['sum', 'count']) plt.subplot(221) plt.bar(np.arange(len(long0['sum'])), long0['sum'], tick_label = labels) plt.gca().set_title(f'Long trades {name}[0]') for i, v in enumerate(long0['sum']): plt.gca().text(i-0.15, v, str(long0['count'].iloc[i]), color='black', fontweight='bold') plt.subplot(222) plt.bar(np.arange(len(long1['sum'])), long1['sum'], tick_label = labels) plt.gca().set_title(f'Long trades {name}[1]') for i, v in enumerate(long1['sum']): plt.gca().text(i-0.15, v, str(long1['count'].iloc[i]), color='black', fontweight='bold') plt.subplot(223) plt.bar(np.arange(len(short0['sum'])), short0['sum'], tick_label = labels) plt.gca().set_title(f'Short trades {name}[0]') for i, v in enumerate(short0['sum']): plt.gca().text(i-0.15, v, str(short0['count'].iloc[i]), color='black', fontweight='bold') plt.subplot(224) plt.bar(np.arange(len(short1['sum'])), short1['sum'], tick_label = labels) plt.gca().set_title(f'Short trades {name}[1]') for i, v in enumerate(short1['sum']): plt.gca().text(i-0.15, v, str(short1['count'].iloc[i]), color='black', fontweight='bold') plt.gcf().set_size_inches(20, 10) plt.savefig(fname = r'C:\Users\Christopher\Desktop\df for studies\Volatility Squeeze Hedge\VSH3\{}.png'.format(name)) plt.close()