import sys
sys.path.append("../config_files")
import mysql.connector
from settings_project import CONFIG_MYSQL
import pandas as pd
import numpy as np
import time

#DEFINIMOS FUNCIONES


def load_bitso_data_top500(CONFIG_MYSQL):
    conn = mysql.connector(**CONFIG_MYSQL)
    cursor = conn.cursor()
    query = """SELECT
    *
    FROM
        bitso_api.bitso_mxn
    ORDER BY
        tid DESC 
    LIMIT 5000"""
    extraction = pd.read_sql(query, conn)
    return extraction

# CALCULAR MEDIAS MOVILES
def sma(df, d):
    c = df.rolling(d).mean()
    return c.dropna()
# CREAMOS CICLO INFINITO CON PAUSA CADA 10S

while True:
    # Cargar datos
    datos = load_bitso_data_top500(CONFIG_MYSQL)

    # Ordenar datos
    datos = datos.reindex(index=datos.index[::-1])
    datos.reset_index(inplace=True, drop=True)

    # Crear medias moviles
    datos['mv20'] = sma(datos.price, 10)
    datos['mv160'] = sma(datos.price, 60)

    # Restart medias moviles
    datos['alpha'] = datos['mv20'] - datos['mv160']

    # Obtener datos
    datos['alpha_bin'] = datos['alpha'].apply(np.sign)

    if ((datos['alpha_bin'].iloc[-1] == 1) & (datos['alpha_bin'].shift(1).iloc[-1] == -1) &
            (datos['alpha_bin'].shift(2).iloc[-1] == 1) & (datos['alpha_bin'].shift(3).iloc[-1] ==1)):
        print('--Posición Larga--')
        time.sleep(10)
    elif ((datos['alpha_bin'].iloc[-1] == -1) & (datos['alpha_bin'].shift(1).iloc[-1] == 1) &
            (datos['alpha_bin'].shift(2).iloc[-1] == 1) & (datos['alpha_bin'].shift(3).iloc[-1] ==1)):
        print('--Posicion Corta--')
        time.sleep(10)
    else:
        print('Sin Posición')
        time.sleep(10)


# Forward Test
datos = load_bitso_data_top500(CONFIG_MYSQL)

# Ordenar datos
datos = datos.reindex(index=datos.index[::-1])
datos.reset_index(inplace=True, drop=True)

# Crear medias moviles
datos['mv20'] = sma(datos.price, 10)
datos['mv160'] = sma(datos.price, 60)

# Restart medias moviles
datos['alpha'] = datos['mv20'] - datos['mv160']

# Obtener datos
datos['alpha_bin'] = datos['alpha'].apply(np.sign)
longitud_arreglo = len(datos['alpha_bin'])
for j in range(len(datos['alpha_bin'])):
    i = longitud_arreglo - j
    if ((datos['alpha_bin'].iloc[-i] == 1) & (datos['alpha_bin'].shift(1).iloc[-i] == -1) &
            (datos['alpha_bin'].shift(2).iloc[-i] == -1) & (datos['alpha_bin'].shift(3).iloc[-i] == -1)):
        print('--Posición Larga--', i)
        time.sleep(1)

    if ((datos['alpha_bin'].iloc[-i] == -1) & (datos['alpha_bin'].shift(1).iloc[-i] == 1) &
            (datos['alpha_bin'].shift(2).iloc[-i] == 1) & (datos['alpha_bin'].shift(3).iloc[-i] == 1)):
        print('--Posicion Corta--', i)
        time.sleep(1)
    else:
        print('Sin Posición', i)
        time.sleep(1)