-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
115 lines (94 loc) · 3.99 KB
/
Copy pathapp.py
File metadata and controls
115 lines (94 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import yfinance as yf
import streamlit as st
import pandas as pd
import pandas_ta as ta
from matplotlib import pyplot as plt
# “1m”, “2m”, “5m”, “15m”, “30m”, “60m”, “90m”, “1h”, “1d”, “5d”, “1wk”, “1mo”, “3mo”
# Important Info
ticker = "XRP-USD"
rsiPeriod = 14
chartPeriod = "600d"
interval = "1h"
initialBalance = 10000
#Variables
rsi = []
price = []
buyPrice = None
sellPrice = None
balance = initialBalance
buyPrices = []
sellPrices = []
balance_track = []
def tickerPrice(price):
df = pd.DataFrame()
df = df.ta.ticker(ticker, period=chartPeriod, interval=interval)
df = df.values.tolist()
for i in range(len(df)):
price += [df[i][3]]
def RSI(rsi):
df = pd.DataFrame()
df = df.ta.ticker(ticker, period=chartPeriod, interval=interval)
rsii = df.ta.rsi(length=rsiPeriod).to_frame()
rsii = rsii.values.tolist()
for i in range(len(rsii)):
rsi += [rsii[i][0]]
def calculatePrices(buyPrices,buyPrice,sellPrices,sellPrice,balance,balance_track):
tickerPrice(price)
RSI(rsi)
trades = 0
inPosition = False
for i in range(len(price)):
if(rsi[i] < buyLimit):
# want to buy
if(inPosition):
pass
else:
inPosition = True
buyPrice = price[i]
buyPrices += [buyPrice]
if(rsi[i] > sellLimit):
#want to sell
if(inPosition):
inPosition = False
sellPrice = price[i]
sellPrices += [sellPrice]
trades += 1
balance = balance * sellPrice / buyPrice
balance_track += [balance]
################################################################################################################################################################################################################################################
st.write("""# Trading Bot""")
ticker = st.selectbox(
'Which ticker are you looking for?',
('eth-usd', 'ada-usd', 'btc-usd','xrp-usd','doge-usd','shib-usd','mana-usd','rose-usd','avax-usd','ltc-usd','^VIX'))
selfTrade = st.checkbox('I want a different ticker')
if(selfTrade):
ticker = str(st.text_input("-Input Desired Ticker (Yahoo Finance)"))
interval = st.selectbox(
'What candlestick inverval?',
('1m', '2m', '5m','15m','30m','60m','90m','1h','1d','5d','1wk','1mo','3mo'))
chartPeriod = st.selectbox(
'How many days shoud the test last?',
('1h','2h','12h','1d','2d', '5d','15d','30d','60d','100d','200d','300d','400d','600d','800d'))
rsiPeriod = int(st.text_input("-Input Desired Rsi Period"))
buyLimit = int(st.text_input("-Input Desired Buy Limit"))
sellLimit = int(st.text_input("-Input Desired Sell Limit"))
showTrades = st.checkbox('Show trades')
if(st.button("Calculate")):
calculatePrices(buyPrices,buyPrice,sellPrices,sellPrice,balance,balance_track)
st.write("""
#### -Price of {ticker}
""".format(ticker=ticker))
st.line_chart(price)
st.write("#### -Trading Bot Portfolio Overtime")
st.line_chart(balance_track)
st.write("##### The final balance is " + str(round(balance_track[-1])))
st.write("##### That is " +str(round(balance_track[-1]-initialBalance)) + "$ in " + chartPeriod + " (" + str(round((balance_track[-1]-initialBalance)/initialBalance*100,1)) + "%). This ticker did " + str(round((price[-1]-price[0])/price[0]*100,1)) + "% in that time.")
if(balance<initialBalance):
st.error('This stategy is not profitable :(')
else:
st.success('This strategy is profitable!')
#st.balloons()
if showTrades:
for i in range(len(sellPrices)):
st.write("Buy at " + str(round(buyPrices[i])) + " Sell at " + str(round(sellPrices[i])) + " Current balance: " + str(round(balance_track[i])) + " (" + str(round(sellPrices[i]/buyPrices[i]*100-100,1)) + "%)" )
st.write("Total trades: " + str(len(sellPrices)))