Ejemplo n.º 1
0
def sell(open_p,close_p,low_p,high_p,volume):
    sell=[0]
    rsi=RSI(close_p)
    for i in range(1,len(close_p)):
        if rsi[i]>50:
            sell.append(1)
        else:
            sell.append(0)
    return sell
Ejemplo n.º 2
0
def buy(open_p,close_p,low_p,high_p,volume):
    buy=[0]
    strend=supertrend(close_p,high_p,low_p)
    rsi=RSI(close_p)
    for i in range(1,len(close_p)):
        if rsi[i]<50 :
            buy.append(1)
        else:
            buy.append(0)
    return buy
Ejemplo n.º 3
0
def seguimiento_boll(ohlc_5m, ohlc_1m, ohlc_10s, res_max_1min, res_min_1min, res_max_5min, res_min_5min, res_max_30m,
                     res_min_30m, sop_min_1min, sop_max_1min, sop_min_5min, sop_max_5min, sop_min_30m, sop_max_30m,
                     bollinger_1m, tipo_de_operacion, par, monto, client, request, contador):
    print("seguimiento bollinger")
    tiempo_de_operacion = "6"
    if tipo_de_operacion == "ventac":
        adx_1m = ADX(ohlc_1m)
        rsi_1m = RSI(ohlc_1m, periodo=7)
        ichimoku_10s = ichimoku(ohlc_10s)
        tiempo_limite = time.time() + 600
        while (adx_1m["ADX"].iloc[-1] < 32.0) and (rsi_1m.iloc[-1] < 70) and \
                (ohlc_10s['c'].iloc[-1] > bollinger_1m["BB_dn"].iloc[-1]) and time.time() < tiempo_limite:
            try:
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                ichimoku_10s = ichimoku(ohlc_10s)
            except:
                pass
            starttime = time.time()
            adx_10s = ADX(ohlc_10s)
            print("posible venta")
            print(f"precio: {ohlc_10s['c'].iloc[-1]}\n", f"tenkan-sen: {ichimoku_10s['tenkan-sen'].iloc[-1]}\n",
                  f"kijun-sen: {ichimoku_10s['kijun-sen'].iloc[-1]}")
            if (ichimoku_10s["tenkan-sen"].iloc[-1] > ichimoku_10s["kijun-sen"].iloc[-1]) and \
                    (ichimoku_10s["Senkou span A"].iloc[-26] > ichimoku_10s["Senkou span B"].iloc[-26]) and \
                    (ohlc_10s['o'].iloc[-1] > ichimoku_10s["kijun-sen"].iloc[-1] > ohlc_10s['c'].iloc[-1] or
                     ohlc_10s['o'].iloc[-2] > ichimoku_10s["kijun-sen"].iloc[-2] > ohlc_10s['c'].iloc[-2]) and \
                    (ichimoku_10s["tenkan-sen"].iloc[-2] > ichimoku_10s["tenkan-sen"].iloc[-1]) and \
                    (adx_10s["ADX"].iloc[-2] > adx_10s["ADX"].iloc[-1]):
                if contador.return_estrategia("venta", "estrategia4"):
                    ejecucion("ventac", par, tiempo_de_operacion, monto)
                    live_price_data = client.request(request)
                    precio = (float(live_price_data["prices"][0]["closeoutBid"])
                              + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                    time.sleep(int(tiempo_de_operacion) * 60)
                    live_price_data = client.request(request)
                    precio2 = (float(live_price_data["prices"][0]["closeoutBid"])
                               + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                    ichi_1m = ichimoku(ohlc_1m)
                    rsi_5m = RSI(ohlc_5m)
                    adx_5m = ADX(ohlc_5m)
                    with open("datos estrategia 4.txt", "at") as fichero_est_4:
                        fichero_est_4.write(f"\nprecio anterior: {ohlc_10s.iloc[-2]} \n"
                                            f"precio actual: {ohlc_10s.iloc[-1]} \n"
                                            f"ichimoku 1m sspan A: {ichi_1m['Senkou span A'].iloc[-2]}, {ichi_1m['Senkou span A'].iloc[-1]} \n"
                                            f"ichimoku 1m sspan B: {ichi_1m['Senkou span B'].iloc[-2]}, {ichi_1m['Senkou span B'].iloc[-1]} \n"
                                            f"ichimoku 1m sspan A -26: {ichi_1m['Senkou span A'].iloc[-26]} \n"
                                            f"ichimoku 1m sspan B -26: {ichi_1m['Senkou span B'].iloc[-26]} \n"
                                            f"tenkan-sen 1m: {ichi_1m['tenkan-sen'].iloc[-2]}, {ichi_1m['tenkan-sen'].iloc[-1]} \n"
                                            f"kijun-sen 1m: {ichi_1m['kijun-sen'].iloc[-2]}, {ichi_1m['kijun-sen'].iloc[-1]} \n"
                                            f"rsi 1m: {rsi_1m.iloc[-2]}, {rsi_1m.iloc[-1]} \n"
                                            f"adx 1m: {adx_1m['ADX'].iloc[-2]}, {adx_1m['ADX'].iloc[-1]} \n"
                                            f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                            f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                            f"rsi 5m: {rsi_5m.iloc[-2]}, {rsi_5m.iloc[-1]} \n"
                                            f"adx 5m: {adx_5m['ADX'].iloc[-2]}, {adx_5m['ADX'].iloc[-1]} \n"
                                            f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                            f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                            f"en resistencia 1m: {res_max_1min > ohlc_10s['c'].iloc[-1] > res_min_1min} \n"
                                            f"en resistencia 5m: {res_max_5min > ohlc_10s['c'].iloc[-1] > res_min_5min} \n"
                                            f"en resistencia 30m: {res_max_30m > ohlc_10s['c'].iloc[-1] > res_min_30m} \n"
                                            f"sobre resistencia 1m: {res_max_1min <= ohlc_10s['c'].iloc[-1]} \n"
                                            f"sobre resistencia 5m: {res_max_5min <= ohlc_10s['c'].iloc[-1]} \n"
                                            f"venta \n")
                    if precio >= precio2:
                        print("operacion ganada, disminuyendo martingala")
                        cambio_de_monto(monto, "disminuir")
                        contador.sumar_estrategia("venta")
                        return
                    elif precio < precio2:
                        print("operacion perdida, aumentando martingala")
                        cambio_de_monto(monto, "aumentar")
                        tiempo_limite = time.time() + 600
            else:
                try:
                    if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                            ohlc_1m.iloc[-1].name[14:16]):
                        try:
                            ExtraccionOanda(client, 500, 'M1', par)
                        except Exception as e:
                            print(f"excepcion {e}: {type(e)}")
                            client = oandapyV20.API(
                                access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                environment="practice")
                        ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                        adx_1m = ADX(ohlc_1m)
                        rsi_1m = RSI(ohlc_1m, periodo=7)
                        res_max_1m, res_min_1min, sop_min_1m, sop_max_1min = calcular_rango_sop_res(ohlc_1m, 120)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    print("error en lectura de datos m1 seguimiento ichimoku")
                try:
                    if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                            int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                            (ohlc_5m.iloc[-1].name[
                             14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                        try:
                            ExtraccionOanda(client, 500, 'M5', par)
                        except Exception as e:
                            print(f"excepcion {e}: {type(e)}")
                            client = oandapyV20.API(
                                access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                environment="practice")
                        ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                        res_max_5min, res_min_5min, sop_min_5min, sop_max_5min = \
                            calcular_rango_sop_res(ohlc_5m, 50)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    print("error en lectura de datos m5 seguimiento ichimoku")
                time.sleep(10 - ((time.time() - starttime) % 10))
    elif tipo_de_operacion == "comprac":
        adx_1m = ADX(ohlc_1m)
        rsi_1m = RSI(ohlc_1m, periodo=7)
        ichimoku_10s = ichimoku(ohlc_10s)
        tiempo_limite = time.time() + 600
        while (adx_1m["ADX"].iloc[-1] < 32.0) and (rsi_1m.iloc[-1] < 70) and \
                (ohlc_10s['c'].iloc[-1] < bollinger_1m["BB_up"].iloc[-1]) and time.time() < tiempo_limite:
            try:
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                ichimoku_10s = ichimoku(ohlc_10s)
            except:
                pass
            starttime = time.time()
            adx_10s = ADX(ohlc_10s)
            print("posible compra")
            print(f"precio: {ohlc_10s['c'].iloc[-1]}\n", f"tenkan-sen: {ichimoku_10s['tenkan-sen'].iloc[-1]}\n",
                  f"kijun-sen: {ichimoku_10s['kijun-sen'].iloc[-1]}")
            if (ichimoku_10s["tenkan-sen"].iloc[-1] < ichimoku_10s["kijun-sen"].iloc[-1]) and \
                    (ichimoku_10s["Senkou span A"].iloc[-26] < ichimoku_10s["Senkou span B"].iloc[-26]) and \
                    (ohlc_10s['o'].iloc[-1] < ichimoku_10s["kijun-sen"].iloc[-1] < ohlc_10s['c'].iloc[-1] or
                     ohlc_10s['o'].iloc[-2] < ichimoku_10s["kijun-sen"].iloc[-2] < ohlc_10s['c'].iloc[-2]) and \
                    (ichimoku_10s["tenkan-sen"].iloc[-2] < ichimoku_10s["tenkan-sen"].iloc[-1]) and \
                    (adx_10s["ADX"].iloc[-2] > adx_10s["ADX"].iloc[-1]):
                if contador.return_estrategia("compra", "estrategia4"):
                    ejecucion("comprac", par, tiempo_de_operacion, monto)
                    live_price_data = client.request(request)
                    precio = (float(live_price_data["prices"][0]["closeoutBid"])
                              + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                    time.sleep(int(tiempo_de_operacion) * 60)
                    live_price_data = client.request(request)
                    precio2 = (float(live_price_data["prices"][0]["closeoutBid"])
                               + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                    ichi_1m = ichimoku(ohlc_1m)
                    rsi_5m = RSI(ohlc_5m)
                    adx_5m = ADX(ohlc_5m)
                    with open("datos estrategia 4.txt", "at") as fichero_est_4:
                        fichero_est_4.write(f"\nprecio anterior: {ohlc_10s.iloc[-2]} \n"
                                            f"precio actual: {ohlc_10s.iloc[-1]} \n"
                                            f"ichimoku 1m sspan A: {ichi_1m['Senkou span A'].iloc[-2]}, {ichi_1m['Senkou span A'].iloc[-1]} \n"
                                            f"ichimoku 1m sspan B: {ichi_1m['Senkou span B'].iloc[-2]}, {ichi_1m['Senkou span B'].iloc[-1]} \n"
                                            f"ichimoku 1m sspan A -26: {ichi_1m['Senkou span A'].iloc[-26]} \n"
                                            f"ichimoku 1m sspan B -26: {ichi_1m['Senkou span B'].iloc[-26]} \n"
                                            f"tenkan-sen 1m: {ichi_1m['tenkan-sen'].iloc[-2]}, {ichi_1m['tenkan-sen'].iloc[-1]} \n"
                                            f"kijun-sen 1m: {ichi_1m['kijun-sen'].iloc[-2]}, {ichi_1m['kijun-sen'].iloc[-1]} \n"
                                            f"rsi 1m: {rsi_1m.iloc[-2]}, {rsi_1m.iloc[-1]} \n"
                                            f"adx 1m: {adx_1m['ADX'].iloc[-2]}, {adx_1m['ADX'].iloc[-1]} \n"
                                            f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                            f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                            f"rsi 5m: {rsi_5m.iloc[-2]}, {rsi_5m.iloc[-1]} \n"
                                            f"adx 5m: {adx_5m['ADX'].iloc[-2]}, {adx_5m['ADX'].iloc[-1]} \n"
                                            f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                            f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                            f"en soporte 1m: {sop_min_1min < ohlc_10s['c'].iloc[-1] < sop_max_1min} \n"
                                            f"en soporte 5m: {sop_min_5min < ohlc_10s['c'].iloc[-1] < sop_max_5min} \n"
                                            f"en soporte 30m: {sop_min_30m < ohlc_10s['c'].iloc[-1] < sop_max_30m} \n"
                                            f"debajo soporte 1m: {ohlc_10s['c'].iloc[-1] <= sop_min_1min} \n"
                                            f"debajo soporte 5m: {ohlc_10s['c'].iloc[-1] <= sop_min_5min} \n"
                                            f"compra \n")
                    if precio <= precio2:
                        print("operacion ganada, disminuyendo martingala")
                        cambio_de_monto(monto, "disminuir")
                        contador.sumar_estrategia("compra")
                        return
                    elif precio > precio2:
                        print("operacion perdida, aumentando martingala")
                        cambio_de_monto(monto, "aumentar")
                        tiempo_limite = time.time() + 600
            else:
                try:
                    if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                            ohlc_1m.iloc[-1].name[14:16]):
                        try:
                            ExtraccionOanda(client, 500, 'M1', par)
                        except Exception as e:
                            print(f"excepcion {e}: {type(e)}")
                            client = oandapyV20.API(
                                access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                environment="practice")
                        ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                        adx_1m = ADX(ohlc_1m)
                        rsi_1m = RSI(ohlc_1m, periodo=7)
                        res_max_1m, res_min_1min, sop_min_1m, sop_max_1min = calcular_rango_sop_res(ohlc_1m, 120)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    print("error en lectura de datos m1 seguimiento ichimoku")
                try:
                    if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                            int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                            (ohlc_5m.iloc[-1].name[
                             14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                        try:
                            ExtraccionOanda(client, 500, 'M5', par)
                        except Exception as e:
                            print(f"excepcion {e}: {type(e)}")
                            client = oandapyV20.API(
                                access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                environment="practice")
                        ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                        res_max_5min, res_min_5min, sop_min_5min, sop_max_5min = \
                            calcular_rango_sop_res(ohlc_5m, 50)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    print("error en lectura de datos m5 seguimiento ichimoku")
                time.sleep(10 - ((time.time() - starttime) % 10))
Ejemplo n.º 4
0
def trials(mu, theta2, lmbd, sigma2, EMitr, k, n, max_capital, num_agents,
           mode, err, alpha, trl):

    rng = np.random.RandomState(trl)
    idx = rng.randint(0, n, size=(k))
    beta = np.zeros((n, 1))
    beta[idx, :] = mu + np.sqrt(theta2) * rng.randn(k, 1)

    # #%% LATSI:
    func_class = LATSI(beta, mu, theta2, sigma2, lmbd, EMitr, err, num_agents,
                       alpha, trl)

    worker_manager = WorkerManager(func_caller=func_class,
                                   worker_ids=num_agents,
                                   poll_time=1e-15,
                                   trialnum=trl)

    options = Namespace(max_num_steps=max_capital,
                        num_init_evals=num_agents,
                        num_workers=num_agents,
                        mode=mode,
                        GP=func_class)

    beta_hats = Bayesian_optimizer(worker_manager, func_class,
                                   options).optimize(max_capital)

    full_recovery_rate_latsi = []
    partial_recovery_rate_latsi = []

    for i in range(max_capital):
        beta_hat = beta_hats[i]

        est = (np.round(beta_hat) > (mu / 2))
        real = (beta > 0)

        partial_recovery_rate_latsi.append(np.sum(est == real) / (n))
        correct_LATSI = 0.0
        if (np.all(est == real)):
            correct_LATSI = 1.0
        full_recovery_rate_latsi.append(correct_LATSI)

# # # #%% SPATS:
    func_class = SPATS(beta, mu, theta2, sigma2, lmbd, EMitr, num_agents, trl)

    worker_manager = WorkerManager(func_caller=func_class,
                                   worker_ids=num_agents,
                                   poll_time=1e-15,
                                   trialnum=trl)

    options = Namespace(max_num_steps=max_capital,
                        num_init_evals=num_agents,
                        num_workers=num_agents,
                        mode=mode,
                        GP=func_class)

    beta_hats = Bayesian_optimizer(worker_manager, func_class,
                                   options).optimize(max_capital)

    full_recovery_rate_spats = []
    partial_recovery_rate_spats = []

    for i in range(max_capital):
        beta_hat = beta_hats[i]

        est = (np.round(beta_hat) > (mu / 2))
        real = (beta > 0)

        partial_recovery_rate_spats.append(np.sum(est == real) / (n))
        correct_spats = 0.0
        if (np.all(est == real)):
            correct_spats = 1.0
        full_recovery_rate_spats.append(correct_spats)


# #%% RSI:
    func_class2 = RSI(beta, mu, theta2, sigma2, lmbd, EMitr, err, trl)

    worker_manager = WorkerManager(func_caller=func_class2,
                                   worker_ids=num_agents,
                                   poll_time=1e-15,
                                   trialnum=trl)

    options = Namespace(max_num_steps=max_capital,
                        num_init_evals=num_agents,
                        num_workers=num_agents,
                        mode=mode,
                        GP=func_class2)

    beta_hats = Bayesian_optimizer(worker_manager, func_class2,
                                   options).optimize(max_capital)

    full_recovery_rate_rsi = []
    partial_recovery_rate_rsi = []

    for i in range(max_capital):
        beta_hat = beta_hats[i]

        est = (np.round(beta_hat) > (mu / 2))
        real = (beta > 0)

        partial_recovery_rate_rsi.append(np.sum(est == real) / (n))
        correct_rsi = 0.0
        if (np.all(est == real)):
            correct_rsi = 1.0
        full_recovery_rate_rsi.append(correct_rsi)

    return [
        full_recovery_rate_spats, full_recovery_rate_rsi,
        full_recovery_rate_latsi, partial_recovery_rate_spats,
        partial_recovery_rate_rsi, partial_recovery_rate_latsi
    ]
Ejemplo n.º 5
0
def seguimiento_ichimoku2(ohlc_5m, ohlc_1m, ohlc_10s, par, tipo_de_operacion, res_max_30m, res_min_30m, sop_min_30m,
                          sop_max_30m, res_max_5m, res_min_5m, sop_min_5m, sop_max_5m, res_max_1m, res_min_1m,
                          sop_min_1m, sop_max_1m, monto, client, request, contador):
    print("estamos en seguimiento")
    tiempo_de_operacion = "3"
    if tipo_de_operacion == "compraf":
        adx_5m = ADX(ohlc_5m)
        rsi_5m = RSI(ohlc_5m)
        ichimoku_1m = ichimoku(ohlc_1m)
        tiempo_limite = time.time() + 600
        while (adx_5m["ADX"].iloc[-1] > 20.0) and (rsi_5m.iloc[-1] > 30.0) and \
                (ichimoku_1m["Senkou span A"].iloc[-26] < ohlc_10s['c'].iloc[-1] > ichimoku_1m["Senkou span B"].iloc[
                    -26]) and (time.time() < tiempo_limite):
            starttime = time.time()
            try:
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                ichimoku_10s = ichimoku(ohlc_10s)
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                print("reintentando lectura ohlc_10s")
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                ichimoku_10s = ichimoku(ohlc_10s)
            print("posible compra, low 10s: ", ohlc_10s['l'].iloc[-1], " soporte max 10s: ", sop_max_10s)
            if (ohlc_10s['l'].iloc[-1] <= sop_max_10s or ohlc_10s['l'].iloc[-2] <= sop_max_10s) or \
                    (ohlc_10s['l'].iloc[-1] <= sop_max_1m):
                while ohlc_10s['c'].iloc[-1] < ichimoku_10s['kijun-sen'].iloc[-1] or \
                        ohlc_10s['c'].iloc[-1] < ichimoku_10s['tenkan-sen'].iloc[-1]:
                    try:
                        ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                        ichimoku_10s = ichimoku(ohlc_10s)
                        res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                        time.sleep(10)
                    except Exception as e:
                        print(f"excepcion {e}: {type(e)}")
                        print("reintentando lectura ohlc_10s")
                        ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                        ichimoku_10s = ichimoku(ohlc_10s)
                        res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                if (ichimoku_10s["Senkou span B"].iloc[-26] > ohlc_10s['c'].iloc[-1] <
                    ichimoku_10s["Senkou span A"].iloc[-26] <
                    ichimoku_10s["Senkou span B"].iloc[-26]) \
                        and (ichimoku_10s['tenkan-sen'].iloc[-2] < ichimoku_10s['tenkan-sen'].iloc[-1]) \
                        and (ohlc_10s['o'].iloc[-1] < ichimoku_10s['kijun-sen'].iloc[-1] < ohlc_10s['c'].iloc[-1]):
                    if contador.return_estrategia("compra", "estrategia3") < 2:
                        ejecucion(tipo_de_operacion, par, tiempo_de_operacion, monto)
                        live_price_data = client.request(request)
                        precio = (float(live_price_data["prices"][0]["closeoutBid"])
                                  + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                                ohlc_1m.iloc[-1].name[14:16]):
                            try:
                                ExtraccionOanda(client, 500, 'M1', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                                int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                                (ohlc_5m.iloc[-1].name[
                                 14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                            try:
                                ExtraccionOanda(client, 500, 'M5', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        time.sleep(int(tiempo_de_operacion) * 60)
                        live_price_data = client.request(request)
                        precio2 = (float(live_price_data["prices"][0]["closeoutBid"])
                                   + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                        ichimoku_1m = ichimoku(ohlc_1m)
                        adx_1m = ADX(ohlc_1m)
                        rsi_1m = RSI(ohlc_1m)
                        ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                        adx_5m = ADX(ohlc_5m)
                        rsi_5m = RSI(ohlc_5m)
                        ichi_5m = ichimoku(ohlc_5m)
                        with open("datos estrategia 3.txt", "at") as fichero_est_3:
                            fichero_est_3.write(f"\nprecio anterior: {ohlc_10s.iloc[-2]} \n"
                                                f"precio actual: {ohlc_10s.iloc[-1]} \n"
                                                f"adx 5m: {adx_5m['ADX'].iloc[-2]}, {adx_5m['ADX'].iloc[-1]} \n"
                                                f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                                f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                                f"rsi 5m: {rsi_5m.iloc[-2]}, {rsi_5m.iloc[-1]} \n"
                                                f"adx 1m: {adx_1m['ADX'].iloc[-2]}, {adx_1m['ADX'].iloc[-1]} \n"
                                                f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                                f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                                f"rsi 1m: {rsi_1m.iloc[-2]}, {rsi_1m.iloc[-1]} \n"
                                                f"ichimoku 1m sspan A: {ichimoku_1m['Senkou span A'].iloc[-2]}, {ichimoku_1m['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 1m sspan B: {ichimoku_1m['Senkou span B'].iloc[-2]}, {ichimoku_1m['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku tenkan 1m: {ichimoku_1m['tenkan-sen'].iloc[-2]}, {ichimoku_1m['tenkan-sen'].iloc[-1]} \n"
                                                f"ichimoku kijun 1m: {ichimoku_1m['kijun-sen'].iloc[-2]}, {ichimoku_1m['kijun-sen'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A: {ichimoku_10s['Senkou span A'].iloc[-2]}, {ichimoku_10s['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan B: {ichimoku_10s['Senkou span B'].iloc[-2]}, {ichimoku_10s['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A -26: {ichimoku_10s['Senkou span A'].iloc[-26]} \n"
                                                f"ichimoku 10s sspan B -26: {ichimoku_10s['Senkou span B'].iloc[-26]} \n"
                                                f"tenkan-sen 10s: {ichimoku_10s['tenkan-sen'].iloc[-2]}, {ichimoku_10s['tenkan-sen'].iloc[-1]} \n"
                                                f"kijun-sen 10s: {ichimoku_10s['kijun-sen'].iloc[-2]}, {ichimoku_10s['kijun-sen'].iloc[-1]} \n"
                                                f"compra \n")
                        if precio <= precio2:
                            print("operacion ganada, disminuyendo martingala")
                            cambio_de_monto(monto, "disminuir")
                            contador.sumar_estrategia("compra")
                            return
                        elif precio > precio2:
                            print("operacion perdida, aumentando martingala")
                            cambio_de_monto(monto, "aumentar")
                            tiempo_limite = time.time() + 600
                elif (ichimoku_10s["Senkou span B"].iloc[-26] < ohlc_10s['c'].iloc[-1] > ichimoku_10s["Senkou span A"].iloc[-26] >
                    ichimoku_10s["Senkou span B"].iloc[-26]) \
                        and (ichimoku_10s['tenkan-sen'].iloc[-2] <= ichimoku_10s['tenkan-sen'].iloc[-1]) \
                        and (ohlc_10s['o'].iloc[-1] < ichimoku_10s['tenkan-sen'].iloc[-1] < ohlc_10s['c'].iloc[-1] or
                             ohlc_10s['o'].iloc[-1] < ichimoku_10s['kijun-sen'].iloc[-1] < ohlc_10s['c'].iloc[-1]):
                    if contador.return_estrategia("compra", "estrategia3") < 2:
                        ejecucion(tipo_de_operacion, par, tiempo_de_operacion, monto)
                        live_price_data = client.request(request)
                        precio = (float(live_price_data["prices"][0]["closeoutBid"])
                                  + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                                ohlc_1m.iloc[-1].name[14:16]):
                            try:
                                ExtraccionOanda(client, 500, 'M1', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                                int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                                (ohlc_5m.iloc[-1].name[
                                 14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                            try:
                                ExtraccionOanda(client, 500, 'M5', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        time.sleep(int(tiempo_de_operacion) * 60)
                        live_price_data = client.request(request)
                        precio2 = (float(live_price_data["prices"][0]["closeoutBid"])
                                   + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                        ichimoku_1m = ichimoku(ohlc_1m)
                        adx_1m = ADX(ohlc_1m)
                        rsi_1m = RSI(ohlc_1m)
                        ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                        adx_5m = ADX(ohlc_5m)
                        rsi_5m = RSI(ohlc_5m)
                        ichi_5m = ichimoku(ohlc_5m)
                        with open("datos estrategia 3.txt", "at") as fichero_est_3:
                            fichero_est_3.write(f"\nprecio anterior: {ohlc_10s.iloc[-2]} \n"
                                                f"precio actual: {ohlc_10s.iloc[-1]} \n"
                                                f"adx 5m: {adx_5m['ADX'].iloc[-2]}, {adx_5m['ADX'].iloc[-1]} \n"
                                                f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                                f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                                f"rsi 5m: {rsi_5m.iloc[-2]}, {rsi_5m.iloc[-1]} \n"
                                                f"adx 1m: {adx_1m['ADX'].iloc[-2]}, {adx_1m['ADX'].iloc[-1]} \n"
                                                f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                                f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                                f"rsi 1m: {rsi_1m.iloc[-2]}, {rsi_1m.iloc[-1]} \n"
                                                f"ichimoku 1m sspan A: {ichimoku_1m['Senkou span A'].iloc[-2]}, {ichimoku_1m['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 1m sspan B: {ichimoku_1m['Senkou span B'].iloc[-2]}, {ichimoku_1m['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku tenkan 1m: {ichimoku_1m['tenkan-sen'].iloc[-2]}, {ichimoku_1m['tenkan-sen'].iloc[-1]} \n"
                                                f"ichimoku kijun 1m: {ichimoku_1m['kijun-sen'].iloc[-2]}, {ichimoku_1m['kijun-sen'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A: {ichimoku_10s['Senkou span A'].iloc[-2]}, {ichimoku_10s['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan B: {ichimoku_10s['Senkou span B'].iloc[-2]}, {ichimoku_10s['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A -26: {ichimoku_10s['Senkou span A'].iloc[-26]} \n"
                                                f"ichimoku 10s sspan B -26: {ichimoku_10s['Senkou span B'].iloc[-26]} \n"
                                                f"tenkan-sen 10s: {ichimoku_10s['tenkan-sen'].iloc[-2]}, {ichimoku_10s['tenkan-sen'].iloc[-1]} \n"
                                                f"kijun-sen 10s: {ichimoku_10s['kijun-sen'].iloc[-2]}, {ichimoku_10s['kijun-sen'].iloc[-1]} \n"
                                                f"compra \n")
                        if precio <= precio2:
                            print("operacion ganada, disminuyendo martingala")
                            cambio_de_monto(monto, "disminuir")
                            contador.sumar_estrategia("compra")
                            return
                        elif precio > precio2:
                            print("operacion perdida, aumentando martingala")
                            cambio_de_monto(monto, "aumentar")
                            tiempo_limite = time.time() + 600
            try:
                if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                        ohlc_1m.iloc[-1].name[14:16]):
                    try:
                        ExtraccionOanda(client, 500, 'M1', par)
                    except Exception as e:
                        print(f"excepcion {e}: {type(e)}")
                        client = oandapyV20.API(
                            access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                            environment="practice")
                    ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                    ichimoku_1m = ichimoku(ohlc_1m)
                    res_max_1m, res_min_1m, sop_min_1m, sop_max_1m = calcular_rango_sop_res(ohlc_1m, 10)
                if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                        int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                        (ohlc_5m.iloc[-1].name[
                         14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                    try:
                        ExtraccionOanda(client, 500, 'M5', par)
                    except Exception as e:
                        print(f"excepcion {e}: {type(e)}")
                        client = oandapyV20.API(
                            access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                            environment="practice")
                    ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                    res_max_5m, res_min_5m, sop_min_5m, sop_max_5m = calcular_rango_sop_res(ohlc_5m, 50)
                    adx_5m = ADX(ohlc_5m)
                    rsi_5m = RSI(ohlc_5m)
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                print("hubo un error en la lectura de datos 1m o 5m en seguimiento ichimoku 2")
            time.sleep(10 - ((time.time() - starttime) % 10))
        if res_max_5m > ohlc_10s['c'].iloc[-1] > res_min_5m or res_max_30m > ohlc_10s['c'].iloc[-1] > res_min_30m:
            print("se sale del seguimiento porque hay una resistencia cercana")
        else:
            print("se sale del seguimiento porque se ejecutó operacion o",
                  adx_5m["ADX"].iloc[-1] > 20.0, rsi_5m.iloc[-1] > 30.0,
                  ichimoku_1m["Senkou span A"].iloc[-26] < ohlc_10s['c'].iloc[-1] >
                  ichimoku_1m["Senkou span B"].iloc[-26])
    elif tipo_de_operacion == "ventaf":
        adx_5m = ADX(ohlc_5m)
        rsi_5m = RSI(ohlc_5m)
        ichimoku_1m = ichimoku(ohlc_1m)
        tiempo_limite = time.time() + 600
        while (adx_5m["ADX"].iloc[-1] > 20.0) \
                and (rsi_5m.iloc[-1] < 70.0) and (ichimoku_1m["Senkou span A"].iloc[-26] > ohlc_10s['c'].iloc[-1] <
                                                  ichimoku_1m["Senkou span B"].iloc[-26]) and (time.time() < tiempo_limite):
            starttime = time.time()
            try:
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                ichimoku_10s = ichimoku(ohlc_10s)
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                print("reintentando lectura ohlc_10s")
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                ichimoku_10s = ichimoku(ohlc_10s)
            print("posible venta, high 10s: ", ohlc_10s['h'].iloc[-1], " resistencia menor 10s: ", res_min_10s)
            if (ohlc_10s['h'].iloc[-1] >= res_min_10s or ohlc_10s['h'].iloc[-2] >= res_min_10s) or \
                    (ohlc_10s['h'].iloc[-1] >= res_min_1m):
                while ohlc_10s['c'].iloc[-1] > ichimoku_10s['kijun-sen'].iloc[-1] or \
                        ohlc_10s['c'].iloc[-1] > ichimoku_10s['tenkan-sen'].iloc[-1]:
                    try:
                        ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                        ichimoku_10s = ichimoku(ohlc_10s)
                        res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                        time.sleep(10)
                    except Exception as e:
                        print(f"excepcion {e}: {type(e)}")
                        print("reintentando lectura ohlc_10s")
                        ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                        ichimoku_10s = ichimoku(ohlc_10s)
                        res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(ohlc_10s, 30)
                if (ichimoku_10s["Senkou span B"].iloc[-26] < ohlc_10s['c'].iloc[-1] > ichimoku_10s["Senkou span A"].iloc[-26] >
                    ichimoku_10s["Senkou span B"].iloc[-26]) \
                        and (ichimoku_10s['tenkan-sen'].iloc[-2] > ichimoku_10s['tenkan-sen'].iloc[-1]) \
                        and (ohlc_10s['o'].iloc[-1] > ichimoku_10s['kijun-sen'].iloc[-1] > ohlc_10s['c'].iloc[-1]):
                    if contador.return_estrategia("venta", "estrategia3"):
                        ejecucion(tipo_de_operacion, par, tiempo_de_operacion, monto)
                        live_price_data = client.request(request)
                        precio = (float(live_price_data["prices"][0]["closeoutBid"])
                                  + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                                ohlc_1m.iloc[-1].name[14:16]):
                            try:
                                ExtraccionOanda(client, 500, 'M1', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                                int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                                (ohlc_5m.iloc[-1].name[
                                 14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                            try:
                                ExtraccionOanda(client, 500, 'M5', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        time.sleep(int(tiempo_de_operacion) * 60)
                        live_price_data = client.request(request)
                        precio2 = (float(live_price_data["prices"][0]["closeoutBid"])
                                   + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                        ichimoku_1m = ichimoku(ohlc_1m)
                        adx_1m = ADX(ohlc_1m)
                        rsi_1m = RSI(ohlc_1m)
                        ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                        adx_5m = ADX(ohlc_5m)
                        rsi_5m = RSI(ohlc_5m)
                        ichi_5m = ichimoku(ohlc_5m)
                        with open("datos estrategia 3.txt", "at") as fichero_est_3:
                            fichero_est_3.write(f"\nprecio anterior: {ohlc_10s.iloc[-2]} \n"
                                                f"precio actual: {ohlc_10s.iloc[-1]} \n"
                                                f"adx 5m: {adx_5m['ADX'].iloc[-2]}, {adx_5m['ADX'].iloc[-1]} \n"
                                                f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                                f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                                f"rsi 5m: {rsi_5m.iloc[-2]}, {rsi_5m.iloc[-1]} \n"
                                                f"adx 1m: {adx_1m['ADX'].iloc[-2]}, {adx_1m['ADX'].iloc[-1]} \n"
                                                f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                                f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                                f"rsi 1m: {rsi_1m.iloc[-2]}, {rsi_1m.iloc[-1]} \n"
                                                f"ichimoku 1m sspan A: {ichimoku_1m['Senkou span A'].iloc[-2]}, {ichimoku_1m['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 1m sspan B: {ichimoku_1m['Senkou span B'].iloc[-2]}, {ichimoku_1m['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku tenkan 1m: {ichimoku_1m['tenkan-sen'].iloc[-2]}, {ichimoku_1m['tenkan-sen'].iloc[-1]} \n"
                                                f"ichimoku kijun 1m: {ichimoku_1m['kijun-sen'].iloc[-2]}, {ichimoku_1m['kijun-sen'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A: {ichimoku_10s['Senkou span A'].iloc[-2]}, {ichimoku_10s['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan B: {ichimoku_10s['Senkou span B'].iloc[-2]}, {ichimoku_10s['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A -26: {ichimoku_10s['Senkou span A'].iloc[-26]} \n"
                                                f"ichimoku 10s sspan B -26: {ichimoku_10s['Senkou span B'].iloc[-26]} \n"
                                                f"tenkan-sen 10s: {ichimoku_10s['tenkan-sen'].iloc[-2]}, {ichimoku_10s['tenkan-sen'].iloc[-1]} \n"
                                                f"kijun-sen 10s: {ichimoku_10s['kijun-sen'].iloc[-2]}, {ichimoku_10s['kijun-sen'].iloc[-1]} \n"
                                                f"venta \n")
                        if precio >= precio2:
                            print("operacion ganada, disminuyendo martingala")
                            cambio_de_monto(monto, "disminuir")
                            contador.sumar_estrategia("venta")
                            return
                        elif precio < precio2:
                            print("operacion perdida, aumentando martingala")
                            cambio_de_monto(monto, "aumentar")
                            tiempo_limite = time.time() + 600
                elif (ichimoku_10s["Senkou span B"].iloc[-26] > ohlc_10s['c'].iloc[-1] <
                    ichimoku_10s["Senkou span A"].iloc[-26] < ichimoku_10s["Senkou span B"].iloc[-26]) \
                        and (ichimoku_10s['tenkan-sen'].iloc[-2] >= ichimoku_10s['tenkan-sen'].iloc[-1]) \
                        and (ohlc_10s['o'].iloc[-1] > ichimoku_10s['tenkan-sen'].iloc[-1] > ohlc_10s['c'].iloc[-1] or
                             ohlc_10s['o'].iloc[-1] > ichimoku_10s['kijun-sen'].iloc[-1] > ohlc_10s['c'].iloc[-1]):
                    if contador.return_estrategia("venta", "estrategia3"):
                        ejecucion(tipo_de_operacion, par, tiempo_de_operacion, monto)
                        live_price_data = client.request(request)
                        precio = (float(live_price_data["prices"][0]["closeoutBid"])
                                  + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                                ohlc_1m.iloc[-1].name[14:16]):
                            try:
                                ExtraccionOanda(client, 500, 'M1', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                                int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                                (ohlc_5m.iloc[-1].name[
                                 14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                            try:
                                ExtraccionOanda(client, 500, 'M5', par)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        time.sleep(int(tiempo_de_operacion) * 60)
                        live_price_data = client.request(request)
                        precio2 = (float(live_price_data["prices"][0]["closeoutBid"])
                                   + float(live_price_data["prices"][0]["closeoutAsk"])) / 2
                        ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                        ichimoku_1m = ichimoku(ohlc_1m)
                        adx_1m = ADX(ohlc_1m)
                        rsi_1m = RSI(ohlc_1m)
                        ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                        adx_5m = ADX(ohlc_5m)
                        rsi_5m = RSI(ohlc_5m)
                        ichi_5m = ichimoku(ohlc_5m)
                        with open("datos estrategia 3.txt", "at") as fichero_est_3:
                            fichero_est_3.write(f"\nprecio anterior: {ohlc_10s.iloc[-2]} \n"
                                                f"precio actual: {ohlc_10s.iloc[-1]} \n"
                                                f"adx 5m: {adx_5m['ADX'].iloc[-2]}, {adx_5m['ADX'].iloc[-1]} \n"
                                                f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                                f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                                f"rsi 5m: {rsi_5m.iloc[-2]}, {rsi_5m.iloc[-1]} \n"
                                                f"adx 1m: {adx_1m['ADX'].iloc[-2]}, {adx_1m['ADX'].iloc[-1]} \n"
                                                f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                                f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                                f"rsi 1m: {rsi_1m.iloc[-2]}, {rsi_1m.iloc[-1]} \n"
                                                f"ichimoku 1m sspan A: {ichimoku_1m['Senkou span A'].iloc[-2]}, {ichimoku_1m['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 1m sspan B: {ichimoku_1m['Senkou span B'].iloc[-2]}, {ichimoku_1m['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku tenkan 1m: {ichimoku_1m['tenkan-sen'].iloc[-2]}, {ichimoku_1m['tenkan-sen'].iloc[-1]} \n"
                                                f"ichimoku kijun 1m: {ichimoku_1m['kijun-sen'].iloc[-2]}, {ichimoku_1m['kijun-sen'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A: {ichimoku_10s['Senkou span A'].iloc[-2]}, {ichimoku_10s['Senkou span A'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan B: {ichimoku_10s['Senkou span B'].iloc[-2]}, {ichimoku_10s['Senkou span B'].iloc[-1]} \n"
                                                f"ichimoku 10s sspan A -26: {ichimoku_10s['Senkou span A'].iloc[-26]} \n"
                                                f"ichimoku 10s sspan B -26: {ichimoku_10s['Senkou span B'].iloc[-26]} \n"
                                                f"tenkan-sen 10s: {ichimoku_10s['tenkan-sen'].iloc[-2]}, {ichimoku_10s['tenkan-sen'].iloc[-1]} \n"
                                                f"kijun-sen 10s: {ichimoku_10s['kijun-sen'].iloc[-2]}, {ichimoku_10s['kijun-sen'].iloc[-1]} \n"
                                                f"venta \n")
                        if precio >= precio2:
                            print("operacion ganada, disminuyendo martingala")
                            cambio_de_monto(monto, "disminuir")
                            contador.sumar_estrategia("venta")
                            return
                        elif precio < precio2:
                            print("operacion perdida, aumentando martingala")
                            cambio_de_monto(monto, "aumentar")
                            tiempo_limite = time.time() + 600
            try:
                if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" !=
                        ohlc_1m.iloc[-1].name[14:16]):
                    try:
                        ExtraccionOanda(client, 500, 'M1', par)
                    except Exception as e:
                        print(f"excepcion {e}: {type(e)}")
                        client = oandapyV20.API(
                            access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                            environment="practice")
                    ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                    ichimoku_1m = ichimoku(ohlc_1m)
                    res_max_1m, res_min_1m, sop_min_1m, sop_max_1m = calcular_rango_sop_res(ohlc_1m, 10)
                if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                        int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                        (ohlc_5m.iloc[-1].name[
                         14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                    try:
                        ExtraccionOanda(client, 500, 'M5', par)
                    except Exception as e:
                        print(f"excepcion {e}: {type(e)}")
                        client = oandapyV20.API(
                            access_token="e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                            environment="practice")
                    ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                    res_max_5m, res_min_5m, sop_min_5m, sop_max_5m = calcular_rango_sop_res(ohlc_5m, 50)
                    adx_5m = ADX(ohlc_5m)
                    rsi_5m = RSI(ohlc_5m)
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                print("hubo un error en la lectura de datos 1m o 5m en seguimiento ichimoku 2")
            time.sleep(10 - ((time.time() - starttime) % 10))
        if sop_max_5m > ohlc_10s['c'].iloc[-1] > sop_min_5m or sop_max_30m > ohlc_10s['c'].iloc[-1] > sop_min_30m:
            print("Se sale del seguimiento porque hay un soporte cercano")
        else:
            print("se sale del seguimiento porque se ejecutó operacion o ",
                  adx_5m["ADX"].iloc[-1] > 20.0, rsi_5m.iloc[-1] < 70.0,
                  ichimoku_1m["Senkou span A"].iloc[-26] > ohlc_10s['c'].iloc[-1] <
                  ichimoku_1m["Senkou span B"].iloc[-26])
    def __init__(self, StockCode, StartDate, EndDate):
        log_txt.insert(INSERT, 'getting price list\n')
        try:
            df = get_pse_data(StockCode, StartDate, EndDate)
        except Exception as e:
            log_txt.insert(INSERT, 'Get pse data error: {e}\n'.format(e=e))

        log_txt.insert(INSERT, 'price list obtained')

        # Derive the 30 day SMA of JFC's closing prices
        ma30 = df.close.rolling(30).mean()
        ma100 = df.close.rolling(100).mean()
        # Combine the closing prices with the 30 day SMA
        data = pd.concat([df.close, ma30, ma100], axis=1).dropna()
        data.columns = [
            'Closing Price', 'Simple Moving Average (30 day)',
            'Simple Moving Average (100 day)'
        ]

        #Create a new dataframe
        signal = pd.DataFrame(index=df['close'].index)
        signal['close'] = data['Closing Price']
        signal['SMA30'] = data['Simple Moving Average (30 day)']
        signal['SMA100'] = data['Simple Moving Average (100 day)']

        log_txt.insert(INSERT, 'calculate RSI\n')
        v_RSI = RSI.getRSI(self, signal)
        log_txt.insert(INSERT, 'done calculating RSI\n')
        log_txt.insert(INSERT, 'calculate moving averages\n')
        MA = MovingAverage.buy_sell(signal)
        log_txt.insert(INSERT, 'done calculating moving averages\n')

        try:
            signal['Buy_Signal_Price_MA'] = MA[0]
            signal['Sell_Signal_Price_MA'] = MA[1]
            signal['Buy_Signal_Price_RSI'] = v_RSI[0]
            signal['Sell_Signal_Price_RSI'] = v_RSI[1]
        except Exception as e:
            log_txt.insert(INSERT,
                           'Get buy and sell data error: {e}\n'.format(e=e))

        # Visually Show The Stock buy and sell signals
        # Create the title

        title = 'Adj. Close Price History Buy / Sell Signals   '
        # Get the stocks
        my_stocks = signal
        ticker = "close"

        # Create and plot the graph
        try:
            plt.figure(figsize=(12.2, 4.5))  # width = 12.2in, height = 4.5
            plt.scatter(my_stocks.index,
                        my_stocks['Buy_Signal_Price_MA'],
                        color='green',
                        label='Buy Signal MA',
                        marker='^',
                        alpha=1)
            plt.scatter(my_stocks.index,
                        my_stocks['Sell_Signal_Price_MA'],
                        color='darkred',
                        label='Sell Signal MA',
                        marker='v',
                        alpha=1)
            plt.scatter(my_stocks.index,
                        my_stocks['Buy_Signal_Price_RSI'],
                        color='blue',
                        label='Buy Signal RSI',
                        marker='^',
                        alpha=1)
            plt.scatter(my_stocks.index,
                        my_stocks['Sell_Signal_Price_RSI'],
                        color='red',
                        label='Sell Signal RSI',
                        marker='v',
                        alpha=1)
            plt.plot(
                my_stocks[ticker], label=ticker, alpha=0.35
            )  # plt.plot( X-Axis , Y-Axis, line_width, alpha_for_blending,  label)
            plt.plot(my_stocks['SMA30'], label='SMA30', alpha=0.35)
            plt.plot(my_stocks['SMA100'], label='SMA100', alpha=0.35)
            plt.title(title)
            plt.xlabel('Date', fontsize=18)
            plt.ylabel('Adj. Close Price PHP', fontsize=18)
            plt.legend(loc='upper left')
        except Exception as e:
            log_txt.insert(INSERT, 'Plotting data error: {e}\n'.format(e=e))
        try:
            plt.show()
        except Exception as e:
            log_txt.insert(INSERT, 'Plotting data error: {e}\n'.format(e=e))
        log_txt.insert(INSERT, 'Produced graph\n')
Ejemplo n.º 7
0
def seguimiento_div(ohlc_5m, ohlc_1m, ohlc_10s, par, tipo_de_divergencia,
                    punto_max_min_macd, punto_ultimo, monto, client, request,
                    contador):
    print("estamos en seguimiento divergencia")
    tiempo_de_operacion = "5"
    if tipo_de_divergencia == "bajista":
        punto_max_macd = punto_max_min_macd
        punto_ultimo_macd = punto_ultimo
        adx_1m = ADX(ohlc_1m)
        rsi_1m = RSI(ohlc_1m)
        res_max_1m, res_min_1m, sop_min_1m, sop_max_1m = calcular_rango_sop_res(
            ohlc_1m, 10)
        adx_5m = ADX(ohlc_5m)
        rsi_5m = RSI(ohlc_5m)
        tiempo_limite = time.time() + 600
        while punto_ultimo_macd < punto_max_macd and time.time(
        ) < tiempo_limite:
            starttime = time.time()
            try:
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                adx_10s = ADX(ohlc_10s)
                ichimoku_10s = ichimoku(ohlc_10s)
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                    ohlc_10s, 30)
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                print("reintentando lectura ohlc_10s")
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                    ohlc_10s, 30)
            try:
                print(adx_1m["ADX"].iloc[-1])
                print("posible venta, high 10s: ", ohlc_10s['h'].iloc[-1],
                      " resistencia menor 10s: ", res_min_10s)
                if (ohlc_10s['h'].iloc[-1] <= res_min_10s or ohlc_10s['h'].iloc[-2] <= res_min_10s) or \
                        (ohlc_10s['h'].iloc[-1] <= res_min_1m):
                    while ohlc_10s['c'].iloc[-1] > ichimoku_10s[
                            'kijun-sen'].iloc[
                                -1] and punto_ultimo_macd < punto_max_macd:
                        try:
                            ohlc_10s = pd.read_csv("datos_10s.csv",
                                                   index_col="time")
                            ichimoku_10s = ichimoku(ohlc_10s)
                            res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                                ohlc_10s, 30)
                            print(ohlc_10s['c'].iloc[-1], "kijun sen: ",
                                  ichimoku_10s['kijun-sen'].iloc[-1])
                            time.sleep(10)
                            if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                                    int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[
                                        15:16])) == 6) and \
                                    (ohlc_5m.iloc[-1].name[
                                     14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                                try:
                                    ExtraccionOanda(client, 500, 'M5', par)
                                    ohlc_5m = pd.read_csv("datos_M5.csv",
                                                          index_col="time")
                                    punto_ultimo_macd = MACD(
                                        ohlc_5m)["MACD"].iloc[-1]
                                except Exception as e:
                                    print(f"excepcion {e}: {type(e)}")
                                    client = oandapyV20.API(
                                        access_token=
                                        "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                        environment="practice")
                        except Exception as e:
                            print(f"excepcion {e}: {type(e)}")
                            print("reintentando lectura ohlc_10s")
                            ohlc_10s = pd.read_csv("datos_10s.csv",
                                                   index_col="time")
                            ichimoku_10s = ichimoku(ohlc_10s)
                            res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                                ohlc_10s, 30)
                    if (ichimoku_10s["tenkan-sen"].iloc[-1] > ichimoku_10s["kijun-sen"].iloc[-1]) and \
                            (ichimoku_10s["Senkou span A"].iloc[-26] > ichimoku_10s["Senkou span B"].iloc[-26]) and \
                            (ohlc_10s['o'].iloc[-1] > ichimoku_10s["kijun-sen"].iloc[-1] > ohlc_10s['c'].iloc[-1] or
                             ohlc_10s['o'].iloc[-2] > ichimoku_10s["kijun-sen"].iloc[-2] > ohlc_10s['c'].iloc[-2]) and \
                            (ichimoku_10s["tenkan-sen"].iloc[-2] > ichimoku_10s["tenkan-sen"].iloc[-1]) and \
                            (adx_10s["ADX"].iloc[-2] > adx_10s["ADX"].iloc[-1]):
                        ejecucion("ventac", par, tiempo_de_operacion, monto)
                        live_price_data = client.request(request)
                        precio = (float(
                            live_price_data["prices"][0]["closeoutBid"]) +
                                  float(live_price_data["prices"][0]
                                        ["closeoutAsk"])) / 2
                        if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}"
                                != ohlc_1m.iloc[-1].name[14:16]):
                            try:
                                ExtraccionOanda(client, 500, 'M1', par)
                                ohlc_1m = pd.read_csv("datos_M1.csv",
                                                      index_col="time")
                                adx_1m = ADX(ohlc_1m)
                                rsi_1m = RSI(ohlc_1m)
                                punto_ultimo_macd = MACD(
                                    ohlc_1m)["MACD"].iloc[-1]
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token=
                                    "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        time.sleep(int(tiempo_de_operacion) * 60)
                        live_price_data = client.request(request)
                        precio2 = (float(
                            live_price_data["prices"][0]["closeoutBid"]) +
                                   float(live_price_data["prices"][0]
                                         ["closeoutAsk"])) / 2
                        adx_10s = ADX(ohlc_10s)
                        rsi_10s = RSI(ohlc_10s)
                        with open("datos divergencias.txt",
                                  "at") as fichero_div:
                            fichero_div.write(
                                f"precio anterior: {ohlc_1m.iloc[-2]} \n"
                                f"precio actual: {ohlc_1m.iloc[-1]} \n"
                                f"adx 5m: {adx_5m['ADX'].iloc[-2]} {adx_5m['ADX'].iloc[-1]} \n"
                                f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                f"rsi 5m: {rsi_5m.iloc[-2]} {rsi_5m.iloc[-1]} \n"
                                f"adx 1m {adx_1m['ADX'].iloc[-2]} {adx_1m['ADX'].iloc[-1]} \n"
                                f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                f"rsi 1m {rsi_1m.iloc[-2]} {rsi_1m.iloc[-1]} \n"
                                f"adx 10s {adx_10s['ADX'].iloc[-2]} {adx_10s['ADX'].iloc[-1]} \n"
                                f"DI+ 10s: {adx_10s['DI+'].iloc[-2]}, {adx_10s['DI+'].iloc[-1]} \n"
                                f"DI- 10s: {adx_10s['DI-'].iloc[-2]}, {adx_10s['DI-'].iloc[-1]} \n"
                                f"rsi 10s: {rsi_10s.iloc[-2]} {rsi_10s.iloc[-1]} \n"
                                "venta \n")
                        if precio >= precio2:
                            print("operacion ganada, disminyendo martingala")
                            cambio_de_monto(monto, "disminuir")
                            contador.sumar_estrategia("venta")
                            return
                        elif precio < precio2:
                            print("operacion perdida, aumentando martingala")
                            cambio_de_monto(monto, "aumentar")
                            tiempo_limite = time.time() + 600
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                time.sleep(10 - ((time.time() - starttime) % 10))
            if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" != \
                    ohlc_1m.iloc[-1].name[14:16]):
                try:
                    ExtraccionOanda(client, 500, 'M1', par)
                    ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                    adx_1m = ADX(ohlc_1m)
                    rsi_1m = RSI(ohlc_1m)
                    punto_ultimo_macd = MACD(ohlc_1m)["MACD"].iloc[-1]
                    res_max_1m, res_min_1m, sop_min_1m, sop_max_1m = calcular_rango_sop_res(
                        ohlc_1m, 10)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    client = oandapyV20.API(
                        access_token=
                        "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                        environment="practice")
            if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                    int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                    (ohlc_5m.iloc[-1].name[
                     14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                try:
                    ExtraccionOanda(client, 500, 'M5', par)
                    ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                    adx_5m = ADX(ohlc_5m)
                    rsi_5m = RSI(ohlc_5m)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    client = oandapyV20.API(
                        access_token=
                        "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                        environment="practice")
            time.sleep(10 - ((time.time() - starttime) % 10))
        print("Se sale del seguimiento porque se ejecuto o",
              punto_ultimo_macd < punto_max_macd, punto_ultimo_macd,
              punto_max_macd)
    elif tipo_de_divergencia == "alcista":
        punto_min_macd = punto_max_min_macd
        punto_ultimo_macd = punto_ultimo
        adx_1m = ADX(ohlc_1m)
        rsi_1m = RSI(ohlc_1m)
        res_max_1m, res_min_1m, sop_min_1m, sop_max_1m = calcular_rango_sop_res(
            ohlc_1m, 10)
        adx_5m = ADX(ohlc_5m)
        rsi_5m = RSI(ohlc_5m)
        tiempo_limite = time.time() + 600
        while punto_ultimo_macd > punto_min_macd and time.time(
        ) < tiempo_limite:
            starttime = time.time()
            try:
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                adx_10s = ADX(ohlc_10s)
                ichimoku_10s = ichimoku(ohlc_10s)
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                    ohlc_10s, 30)
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                print("reintentando lectura ohlc_10s")
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                    ohlc_10s, 30)
            try:
                print(adx_1m["ADX"].iloc[-1])
                print("posible compra, low 10s: ", ohlc_10s['l'].iloc[-1],
                      " soporte max 10s: ", sop_max_10s)
                if (ohlc_10s['l'].iloc[-1] <= sop_max_10s or ohlc_10s['l'].iloc[-2] <= sop_max_10s) or \
                        (ohlc_1m['l'].iloc[-1] <= sop_max_1m):
                    while ichimoku_10s["kijun-sen"].iloc[-1] > ohlc_10s[
                            'c'].iloc[
                                -1] and punto_ultimo_macd > punto_min_macd:
                        try:
                            ohlc_10s = pd.read_csv("datos_10s.csv",
                                                   index_col="time")
                            ichimoku_10s = ichimoku(ohlc_10s)
                            res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                                ohlc_10s, 30)
                            print(ohlc_10s['c'].iloc[-1], "kijun sen: ",
                                  ichimoku_10s['kijun-sen'].iloc[-1])
                            time.sleep(10)
                            if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                                    int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[
                                        15:16])) == 6) and \
                                    (ohlc_5m.iloc[-1].name[
                                     14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                                try:
                                    ExtraccionOanda(client, 500, 'M5', par)
                                    ohlc_5m = pd.read_csv("datos_M5.csv",
                                                          index_col="time")
                                    punto_ultimo_macd = MACD(
                                        ohlc_5m)["MACD"].iloc[-1]
                                except Exception as e:
                                    print(f"excepcion {e}: {type(e)}")
                                    client = oandapyV20.API(
                                        access_token=
                                        "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                        environment="practice")
                        except Exception as e:
                            print(f"excepcion {e}: {type(e)}")
                            print("reintentando lectura ohlc_10s")
                            ohlc_10s = pd.read_csv("datos_10s.csv",
                                                   index_col="time")
                            ichimoku_10s = ichimoku(ohlc_10s)
                            res_max_10s, res_min_10s, sop_min_10s, sop_max_10s = calcular_rango_sop_res(
                                ohlc_10s, 30)
                    if (ichimoku_10s["tenkan-sen"].iloc[-1] < ichimoku_10s["kijun-sen"].iloc[-1]) and \
                            (ichimoku_10s["Senkou span A"].iloc[-26] < ichimoku_10s["Senkou span B"].iloc[-26]) and \
                            (ohlc_10s['o'].iloc[-1] < ichimoku_10s["kijun-sen"].iloc[-1] < ohlc_10s['c'].iloc[-1] or
                             ohlc_10s['o'].iloc[-2] < ichimoku_10s["kijun-sen"].iloc[-2] < ohlc_10s['c'].iloc[
                                 -2]) and \
                            (ichimoku_10s["tenkan-sen"].iloc[-2] < ichimoku_10s["tenkan-sen"].iloc[-1]) and \
                            (adx_10s["ADX"].iloc[-2] > adx_10s["ADX"].iloc[-1]):
                        ejecucion("comprac", par, tiempo_de_operacion, monto)
                        live_price_data = client.request(request)
                        precio = (float(
                            live_price_data["prices"][0]["closeoutBid"]) +
                                  float(live_price_data["prices"][0]
                                        ["closeoutAsk"])) / 2
                        if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" != \
                                ohlc_1m.iloc[-1].name[14:16]):
                            try:
                                ExtraccionOanda(client, 500, 'M1', par)
                                ohlc_1m = pd.read_csv("datos_M1.csv",
                                                      index_col="time")
                                adx_1m = ADX(ohlc_1m)
                                rsi_1m = RSI(ohlc_1m)
                            except Exception as e:
                                print(f"excepcion {e}: {type(e)}")
                                client = oandapyV20.API(
                                    access_token=
                                    "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                                    environment="practice")
                        time.sleep(int(tiempo_de_operacion) * 60)
                        live_price_data = client.request(request)
                        precio2 = (float(
                            live_price_data["prices"][0]["closeoutBid"]) +
                                   float(live_price_data["prices"][0]
                                         ["closeoutAsk"])) / 2
                        adx_10s = ADX(ohlc_10s)
                        rsi_10s = RSI(ohlc_10s)
                        with open("datos divergencias.txt",
                                  "at") as fichero_div:
                            fichero_div.write(
                                f"precio anterior: {ohlc_1m.iloc[-2]} \n"
                                f"precio actual: {ohlc_1m.iloc[-1]} \n"
                                f"adx 5m: {adx_5m['ADX'].iloc[-2]} {adx_5m['ADX'].iloc[-1]} \n"
                                f"DI+ 5m: {adx_5m['DI+'].iloc[-2]}, {adx_5m['DI+'].iloc[-1]} \n"
                                f"DI- 5m: {adx_5m['DI-'].iloc[-2]}, {adx_5m['DI-'].iloc[-1]} \n"
                                f"rsi 5m: {rsi_5m.iloc[-2]} {rsi_5m.iloc[-1]} \n"
                                f"adx 1m {adx_1m['ADX'].iloc[-2]} {adx_1m['ADX'].iloc[-1]} \n"
                                f"DI+ 1m: {adx_1m['DI+'].iloc[-2]}, {adx_1m['DI+'].iloc[-1]} \n"
                                f"DI- 1m: {adx_1m['DI-'].iloc[-2]}, {adx_1m['DI-'].iloc[-1]} \n"
                                f"rsi 1m {rsi_1m.iloc[-2]} {rsi_1m.iloc[-1]} \n"
                                f"adx 10s {adx_10s['ADX'].iloc[-2]} {adx_10s['ADX'].iloc[-1]} \n"
                                f"DI+ 10s: {adx_10s['DI+'].iloc[-2]}, {adx_10s['DI+'].iloc[-1]} \n"
                                f"DI- 10s: {adx_10s['DI-'].iloc[-2]}, {adx_10s['DI-'].iloc[-1]} \n"
                                f"rsi 10s: {rsi_10s.iloc[-2]} {rsi_10s.iloc[-1]} \n"
                                "compra \n")
                        if precio >= precio2:
                            print("operacion ganada, disminyendo martingala")
                            cambio_de_monto(monto, "disminuir")
                            contador.sumar_estrategia("venta")
                            return
                        elif precio < precio2:
                            print("operacion perdida, aumentando martingala")
                            cambio_de_monto(monto, "aumentar")
                            tiempo_limite = time.time() + 600
            except Exception as e:
                print(f"excepcion {e}: {type(e)}")
                ohlc_10s = pd.read_csv("datos_10s.csv", index_col="time")
                ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                time.sleep(10 - ((time.time() - starttime) % 10))
            if (f"{(int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1):02}" != \
                    ohlc_1m.iloc[-1].name[14:16]):
                try:
                    ExtraccionOanda(client, 500, 'M1', par)
                    ohlc_1m = pd.read_csv("datos_M1.csv", index_col="time")
                    adx_1m = ADX(ohlc_1m)
                    rsi_1m = RSI(ohlc_1m)
                    punto_ultimo_macd = MACD(ohlc_1m)["MACD"].iloc[-1]
                    res_max_1m, res_min_1m, sop_min_1m, sop_max_1m = calcular_rango_sop_res(
                        ohlc_1m, 10)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    client = oandapyV20.API(
                        access_token=
                        "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                        environment="practice")
            if ((int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 1 or (
                    int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[15:16])) == 6) and \
                    (ohlc_5m.iloc[-1].name[
                     14:16] != f"{int(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))[14:16]) - 1:02}"):
                try:
                    ExtraccionOanda(client, 500, 'M5', par)
                    ohlc_5m = pd.read_csv("datos_M5.csv", index_col="time")
                    adx_5m = ADX(ohlc_5m)
                    rsi_5m = RSI(ohlc_5m)
                except Exception as e:
                    print(f"excepcion {e}: {type(e)}")
                    client = oandapyV20.API(
                        access_token=
                        "e51f5c80499fd16ae7e9ff6676b3c53f-3ac97247f6df3ad7b2b3731a4b1c2dc3",
                        environment="practice")
            time.sleep(10 - ((time.time() - starttime) % 10))
        print("Se sale del seguimiento porque se ejecuto o",
              punto_ultimo_macd > punto_min_macd, punto_ultimo_macd,
              punto_min_macd)
Ejemplo n.º 8
0
def influxQuery5m(client,
                  max_points,
                  min_points,
                  measurements,
                  interfaces,
                  start_time="now()"):

    for measure in measurements:

        if (measurements[measure]["name"] == "arp_packets"
                or measurements[measure]["name"] == "ping_packets"
                or measurements[measure]["name"] == "dns_packets"
                or measurements[measure]["name"] == "dns_errors"):
            doSum = True
        else:
            doSum = False

        num_den = measure.split()
        numerator = num_den[0]
        denumerator2 = None

        if (len(num_den) >= 2):
            denumerator = num_den[1]
            if len(num_den) == 3:
                denumerator2 = num_den[2]
        else:
            denumerator = numerator

        key = numerator.split(':')[0]
        hosts = client.query(
            'SHOW TAG VALUES ON "ntopng" FROM "autogen"."%s" WITH KEY = "%s" LIMIT %s'
            % (numerator, key, str(cf.limitRSI)))

        m_numerator = []
        m_denumerator = []
        m_denumerator2 = []
        s_clause = ""

        for metric in measurements[measure]["metrics"][0]:
            m_numerator.append(metric)
            s_clause += "NON_NEGATIVE_DERIVATIVE(LAST(" + metric + "), 1s) AS " + metric + ", "

        if (m_numerator[0].find("flows") == -1):
            for metric in measurements[measure]["metrics"][1]:
                m_denumerator.append(metric)
                s_clause += "NON_NEGATIVE_DERIVATIVE(LAST(" + metric + "), 1s) AS " + metric + ", "
            if (denumerator2 != None):
                for metric in measurements[measure]["metrics"][2]:
                    m_denumerator2.append(metric)
                    s_clause += "NON_NEGATIVE_DERIVATIVE(LAST(" + metric + "), 1s) AS " + metric + ", "
        else:
            m_denumerator = m_numerator

        s_clause = s_clause[slice(len(s_clause) - 2)]

        f_clause = """"ntopng"."autogen".""" + '"' + numerator + '"'
        if (denumerator != numerator):
            f_clause += """, "ntopng"."autogen".""" + '"' + denumerator + '"'
            if (denumerator2 != None):
                f_clause += """, "ntopng"."autogen".""" + '"' + denumerator2 + '"'

        p2p_metric = ''
        if (numerator.find("unreachable") != -1):
            if (m_numerator[0].find("server") != -1):
                p2p_metric = "bytes_sent"
            else:
                p2p_metric = "bytes_rcvd"

        ips = hosts.get_points()
        for ip in ips:

            if isLocalHost(ip['value']):
                continue

            for ifid in interfaces:

                #key
                host_interface_measure = ip[
                    'value'] + "|" + ifid + "|" + measurements[measure]["name"]

                if (start_time == "now()"
                        and host_interface_measure in hostRSI):
                    w_clause = start_time + " - 5m"
                    min_points = 1
                else:
                    if (start_time == "now()"):
                        max_points = 2 * min_points
                    w_clause = start_time + " - " + str(
                        (max_points - 1) * 5) + "m AND time < " + start_time

                results = client.query(
                    """  SELECT %s 
                                            FROM %s 
                                            WHERE time >= %s AND "%s"='%s' AND "ifid"='%s' 
                                            GROUP BY time(5m) fill(none) """ %
                    (s_clause, f_clause, w_clause, key, ip['value'], ifid))

                n_points = list(results.get_points(measurement=numerator))

                if (numerator == denumerator):
                    d_points = n_points
                else:
                    d_points = list(
                        results.get_points(measurement=denumerator))
                    if denumerator2 != None:
                        d2_points = list(
                            results.get_points(measurement=denumerator2))
                        if len(d_points) == 0:
                            d_points = d2_points
                            m_denumerator = []
                        elif len(d2_points) == 0:
                            d2_points = d_points
                            m_denumerator2 = []

                dim_numerator = len(n_points)
                dim_denumerator = len(d_points)
                dim_denumerator2 = len(
                    d2_points) if denumerator2 != None else dim_numerator

                if (min(dim_numerator, dim_denumerator, dim_denumerator2) <
                        min_points):
                    continue

                if (dim_numerator != dim_denumerator):
                    if dim_denumerator > dim_numerator:
                        d_points = d_points[-dim_numerator:]
                    else:
                        n_points = n_points[-dim_denumerator:]

                #by reference changes
                dim_denumerator2 = len(
                    d2_points) if denumerator2 != None else dim_denumerator

                if (dim_denumerator2 != dim_denumerator
                        and denumerator2 != None):
                    if dim_denumerator2 > dim_denumerator:
                        d2_points = d2_points[-dim_denumerator:]
                    else:
                        n_points = n_points[-dim_denumerator2:]
                        d_points = d_points[-dim_denumerator2:]

                if p2p_metric:

                    results = client.query(
                        """ SELECT NON_NEGATIVE_DIFFERENCE(SUM("%s")) AS "%s"
                                                FROM "ntopng"."autogen"."host:p2p" 
                                                WHERE time >= %s AND "%s"='%s' AND "ifid"='%s' 
                                                GROUP BY time(5m) fill(0) """ %
                        (p2p_metric, p2p_metric, w_clause, key, ip['value'],
                         ifid))

                    p2p_points = list(
                        results.get_points(measurement="host:p2p"))

                    p2p_non_zero_points = []
                    for i in range(len(p2p_points)):
                        if (p2p_points[i][p2p_metric] != 0):
                            p2p_non_zero_points.append(p2p_points[i]['time'])

                series = []
                seriesDate = []

                for i in range(len(n_points)):
                    sum_numerator = 0
                    sum_denumerator = 0

                    if (n_points[i]['time'] != d_points[i]['time']):
                        break

                    if (denumerator2 != None):
                        if d_points[i]['time'] != d2_points[i]['time']:
                            break

                    if (p2p_metric != ''):
                        if n_points[i]['time'] in p2p_non_zero_points:
                            break

                    try:
                        for x in m_numerator:
                            sum_numerator += n_points[i][x]
                        for x in m_denumerator:
                            sum_denumerator += d_points[i][x]
                        for x in m_denumerator2:
                            sum_denumerator += d2_points[i][x]
                    except TypeError:  #portability
                        continue

                    if (sum_denumerator >= measurements[measure]["minValue"][1]
                            or sum_numerator >=
                            measurements[measure]["minValue"][0]):

                        if doSum:
                            sum_denumerator += sum_numerator

                        if sum_denumerator != 0:
                            ratioValue = truncate(sum_numerator /
                                                  sum_denumerator)
                        else:
                            continue

                        if measurements[measure]["name"].find("size") != -1:
                            thVal = cf.packet_size_threshold
                        else:
                            thVal = cf.ratio_threshold

                        if (not checkThreshold(
                                ratioValue, measurements[measure]["name"],
                                ip['value'], ifid, statsThreshold,
                                n_points[i]['time'], "ip", thVal) or
                            (doSum and
                             measurements[measure]["name"] != "dns_errors")):
                            continue

                        series.append(ratioValue)
                        if (len(series) >= min_points
                                or w_clause == "now()-5m"):
                            seriesDate.append(n_points[i]['time'])

                if (w_clause != "now() - 5m"):
                    if (len(series) >= min_points):
                        if (start_time == "now()"):
                            rsi = RSI(series[-min_points:], min_points - 1,
                                      ip['value'],
                                      measurements[measure]["name"], ifid,
                                      seriesDate[0] + "|wu", statsRSI)
                            hostRSI.update({host_interface_measure: rsi})
                        else:
                            rsi = RSI(series[:min_points], min_points - 1,
                                      ip['value'],
                                      measurements[measure]["name"], ifid,
                                      seriesDate[0] + "|wu", statsRSI)
                            test_series = series[min_points:]
                            for i in range(len(test_series)):
                                rsi.next(test_series[i], seriesDate[i + 1],
                                         statsRSI)
                else:
                    if (len(series) >= 1):
                        hostRSI[host_interface_measure].next(
                            series[-1], seriesDate[-1], statsRSI)
Ejemplo n.º 9
0
import pandas as pnd
import numpy as np
from RSI import RSI
import matplotlib.pyplot as plt

Data = pnd.read_pickle('CompanyDataUpdated.pkl')
Period = 14
StockNames = list(Data.keys())

LowRsiLim = 20
HighRsiLim = 80

for StockName in StockNames:
    Time = Data[StockName].index
    Rsi = RSI(Data, StockName, Period)
    LowRsi = np.zeros(Time.size) + LowRsiLim
    HighRsi = np.zeros(Time.size) + HighRsiLim
    if Rsi[-1] < 40:
        fig, ax1 = plt.subplots()
        ax1.plot(Time, Rsi, 'red')
        ax1.plot(Time, LowRsi, 'black')
        ax1.plot(Time, HighRsi, 'black')
        ax1.set_xlabel('time')
        ax1.set_ylabel('RSI', color='red')
        ax1.tick_params(axis='y', labelcolor='red')

        ax2 = ax1.twinx()
        ax2.plot(Time, Data[StockName]['Close'], color='blue')
        ax2.set_ylabel('Price', color='blue')
        ax2.tick_params(axis='y', labelcolor='blue')