Skip to content

Instantly share code, notes, and snippets.

@princefr
Created May 22, 2020 15:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save princefr/5e59d253132f60b2d98d445b410db148 to your computer and use it in GitHub Desktop.
Save princefr/5e59d253132f60b2d98d445b410db148 to your computer and use it in GitHub Desktop.
from Binance import Binance_Wrapper
from flask import Flask, request
import os
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
from pymouse import PyMouse
import pandas as pd
from bs4 import BeautifulSoup
from datetime import datetime, timedelta
class TimeHelper():
def __init__(self):
print("yes")
def timeStrToTimestamp(self, s, fmt="%Y-%m-%d %H:%M"):
return time.mktime(datetime.strptime(s, fmt).timetuple())
def timeStringToDatetime(self, s, fmt="%Y-%m-%d %H:%M"):
return datetime.datetime.strptime(s, fmt)
# t1 > t2 -> 1
# t1 == t2 -> 0
# t1 < t2 -> -1
def compareTimes(self, t1, t2):
ts1 = self.timeStrToTimestamp(t1)
ts2 = self.timeStrToTimestamp(t2)
if ts1 > ts2:
return 1
elif ts1 == ts2:
return 0
else:
return -1
# ascending sort
# index of date value in two dimensional array
def sortArrayByDateEx(self, dates, index=0, fmt="%Y-%m-%d %H:%M"):
dates.sort(key=lambda d:datetime.strptime(d[index], fmt))
return dates
def checkIfBottomOfViewReached(driver, element):
return driver.execute_script("if (arguments[0].scrollHeight == arguments[0].offsetHeight + arguments[0].scrollTop) { return true; } else { return false; }", element)
def scrollToElement(driver, element):
driver.execute_script("arguments[0].scrollIntoView(true);", element)
def check_if_bottom_reached():
print("")
m = PyMouse()
app = Flask(__name__)
binance_wrapper = Binance_Wrapper(api_key="", secret_key="")
timeout = 15
def scroll_down_element(browser, element, times):
try:
action = ActionChains(browser)
action.move_to_element(element).perform()
element.click()
for _ in range(times):
element.send_keys(Keys.SPACE)
#sleep(0.1)
except Exception as e:
print('error scrolling down web element', e)
def wait_element(browser, xpath, sec =5):
wait = WebDriverWait(browser, sec)
wait.until(expected_conditions.presence_of_element_located((By.XPATH, xpath)))
driverweb = webdriver.Safari()
driverweb.maximize_window()
driverweb.get("https://www.tradingview.com/#signin")
driverweb.implicitly_wait(5)
wait_element(driverweb, '//BUTTON[@class="tv-button tv-button--no-border-radius tv-button--size_large tv-button--primary_ghost tv-button--loader"]')
driverweb.find_element_by_name("username").send_keys("email@gmail.com")
driverweb.find_element_by_name("password").send_keys("motdepasse")
driverweb.find_element_by_xpath("//button[@type='submit']").click()
try:
element_present = EC.presence_of_element_located((By.ID, 'login in progress'))
WebDriverWait(driverweb, timeout).until(element_present)
except TimeoutException:
print("Timed out waiting for page to load")
driverweb.get("https://fr.tradingview.com/chart/g6Qa1GzZ/")
try:
element_present = EC.presence_of_element_located((By.XPATH, '//DIV[@class="icon-button backtesting-open-format-dialog apply-common-tooltip"]'))
WebDriverWait(driverweb, timeout).until(element_present)
except TimeoutException:
print("Timed out waiting for page to load")
menu_click = '//*/div[@class="menu-1fA401bY button-13wlLwhJ apply-common-tooltip"]'
e = WebDriverWait(driverweb, timeout).until(
EC.visibility_of_element_located((By.XPATH, menu_click)))
e.click()
# wait the menu to be visible
menu_click = '//*/div[@class="menuWrap-1gEtmoET"]'
e = WebDriverWait(driverweb, timeout).until(
EC.visibility_of_element_located((By.XPATH, menu_click)))
#item-2xPVYue0 data-value, 1,3, 5, 15, 30 , 45, 60, 120, 180, 240
menu_item_click = '//*/div[@data-value="15"]'
e = WebDriverWait(driverweb, timeout).until(
EC.visibility_of_element_located((By.XPATH, menu_item_click)))
e.click()
time.sleep(3)
# backtesting-select-wrapper > report-tabs > Liste des transactions > active
# backtesting-content-wrapper > reports-content > report-content trades > report-data > table-wra
###
"""xpath = '//*div[@data-name="backtesting"]'
e = WebDriverWait(driverweb, timeout).until(
EC.visibility_of_element_located((By.XPATH, xpath)))
e.click()"""
xpath = '//*/ul[@class="report-tabs"]/li[3]'
e = WebDriverWait(driverweb, timeout).until(
EC.visibility_of_element_located((By.XPATH, xpath)))
e.click()
time.sleep(3)
orders = {}
timehelper = TimeHelper()
def arange_data(data):
soup = BeautifulSoup(data, "lxml")
a = soup.find_all("td")
u = [a[i].text.replace(u'\xa0', ' ') for i in range(len(a))]
order = dict(firebase_id="", id=u[0], type="ENTRY", order_type=u[2], date=timehelper.timeStrToTimestamp(u[3]), filled=False, binance_id="", closed=False, closed_date=u[12], close_order_type=u[11])
if order["closed_date"] is ' ' and str(order["date"]) not in orders.keys():
order["filled"] = True
orders[str(order["date"])] = order
# si dans les entry oders
print("new order coming", order)
elif str(order["date"]) in orders.keys() and order["close_date"] is not ' ':
print("close this shit")
#commencer le programme en ne prennant uniquement que les trades avec une date de trade superieur à la date de start du programme
#creer son propre id sans chiffre pour chaque trade.
#post l'entré, si non présent
#post la sortie si elle n'existe pas dans la base de donnée.
# si
return order
def printTableDataRecursively(element_table_rows, count, table_view):
trades = {}
for el in element_table_rows:
count += 1
arange_data(el.get_attribute("innerHTML"))
if count == len(element_table_rows) and checkIfBottomOfViewReached(driverweb, table_view) is False:
count = 0;
scrollToElement(driverweb, el)
rows = driverweb.find_elements_by_css_selector("div.report-content.trades .report-data .table-wrap table tbody")
rows.remove(rows[0])
printTableDataRecursively(rows, count, table_view)
#Buy
#Sell
#Exit Buy
#Exit Sell
while True:
count = 0
element_table_rows = driverweb.find_elements_by_css_selector("div.report-content.trades .report-data .table-wrap table tbody")
table_view = driverweb.find_element_by_class_name("report-content")
printTableDataRecursively(element_table_rows, count, table_view )
time.sleep(3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment