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
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
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))
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 ]
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')
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)
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)
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')