Pages:
Author

Topic: Sistemas y automatización (Read 3843 times)

legendary
Activity: 1960
Merit: 1130
Truth will out!
August 22, 2016, 01:36:44 PM
#51
Para los que seáis de Javascript también tenéis alguna que otra cosilla por Github con la que empezar, se trata de Gekko. Un bot de trading en node.
https://github.com/askmike/gekko

Antes de ir a la batalla y arriesgar tenéis la opción de realizar backtests basados en los históricos de las cotizaciones. También incluye estrategias básicas basadas en:
DEMA
MACD
PPO
RSI
StochRSI
CCI
talib-macd
https://github.com/askmike/gekko/blob/stable/docs/Trading_methods.md

y aquí explican como podéis realizar vuestra propia operativa Wink
Soporta bastantes exchanges: https://github.com/askmike/gekko#supported-exchanges

Hilo en bitcointalk: https://bitcointalksearch.org/topic/gekko-a-javascript-trading-bot-and-backtesting-platform-209149
sr. member
Activity: 407
Merit: 250
August 09, 2016, 03:41:34 AM
#50
Me ha costado lo mío digerir tu explicación, pero creo que lo he pillado.
Gracias por compartirllo !! Lo que a mi el marco semanal para BTC se me hace eteeeeerno

Por mi lado ha transcurrido un mes desde que tengo automatizada mi estrategia el marco de 15' y así es como se ha comportado en el último mes.



No está mal... ¿que opinais?
legendary
Activity: 1974
Merit: 1030
July 25, 2016, 01:22:36 PM
#49
Esto es lo que estuve haciendo este viernes y sábado pasados:



La gráfica es de bitcoin, semanal. Las líneas azules que siguen al precio son, como puede suponerse, medias móviles. Tanto el precio como estas medias se corresponden con la escala de la izquierda.

Aparte, usando otra escala diferente (que no está pintada porque realmente no hace falta) hay 3 lineas horizontales de color añil, en +x, 0 y -x. La línea roja es el resultado de dividir las medias móviles entre sí; por tanto cuando las medias se cruzan, la roja atraviesa el nivel 0 (las típicas señales por cruce de medias de toda la vida). Cuando la línea roja sube, el escenario es positivo para estar largo (la media móvil de corto plazo está por debajo de la otra y se acerca, o está por encima de la otra y la deja atrás). Inversamente, cuando la línea roja baja, lo suyo es estar corto. La línea púrpura es una media móvil sobre la roja. El cruce de la roja con la púrpura nos da las señales para operar. La línea verde es otra representación de este cruce, de la misma forma que la línea roja representa al cruce de las medias sobre el precio. Cuando la verde está por encima de 0, largos; cuando está por debajo; cortos. Está exagerada verticalmente para que los cruces con el nivel 0 se vean claramente.

Ahora bien, puede ocurrir que la señal a veces llegue demasiado pronto. Por ejemplo al principio de la gráfica, el 8 de marzo, tenemos una señal para abrir largo, pero puede verse que las medias móviles están bajando con bastante alegría y, aunque en este caso particular no hay graves daños, lo normal es que sí los haya, que el precio mantenga la tendencia a la baja y las líneas roja y púrpura se vuelvan a separar (o sea, que la verde vuelva a bajar de 0). Esta es la razón por la que están las otras dos líneas añil. Realmente no abrimos largo hasta que la roja supera el nivel -x, es decir, el 3 de mayo. Y cogemos hasta un precio mejor y todo Smiley. Cerramos largo cuando la verde baja de 0, el 28 de junio. Aquí abriríamos corto, y lo hacemos realmente porque la roja está por debajo de +x. El precio se da la vuelta y en la siguiente vela volvemos a largo. […] Hay un par de señales más hasta que el 24 de enero la verde cruza hacia abajo, pero la roja está muy arriba (las medias sobre el precio están subiendo mucho), así que solo cerramos largo y nos salimos. El corto se abre el 6 de marzo.

Estas señales son patéticas, pero es que los períodos de las tres medias y el valor de x no son los óptimos para bitcoin semanal.

Este sistema da beneficios con bitcoin, Antena 3, Abertis, Abengoa, ACS, Acerinox, Amadeus, Acciona, BBVA… pero con Bankia me lo ha perdido todo en una sola operación (ejem, sube de 1€ a 6€ en una sola vela, para que luego hablen de la volatilidad de bitcoin xD). Ahora estoy analizando Bankinter Tongue
aTg
legendary
Activity: 1358
Merit: 1000
July 10, 2016, 02:09:40 AM
#48
Por ejemplo, este es uno de los míos contra Antena 3

Justamente estoy haciendo esto mismo en qtbtct, que el bot lance por el log las estadísticas en tiempo real y le estoy dando la misma estética que cgminer Cheesy Pero en mi programa se reinician y no se almacenan.

Veo que vamos cada uno por un lado distinto.

sr. member
Activity: 407
Merit: 250
July 09, 2016, 10:28:52 AM
#47
Ahora necesitas estadísticas monas, que no todo en un sistema es la pasta que saca Wink Por ejemplo, este es uno de los míos contra Antena 3, en la bolsa de verdad:

Pues si estaría bien, ¿no hay por ahí nada que se  usar que este ya hecho?
legendary
Activity: 1974
Merit: 1030
July 09, 2016, 05:50:33 AM
#46
Ahora necesitas estadísticas monas, que no todo en un sistema es la pasta que saca Wink Por ejemplo, este es uno de los míos contra Antena 3, en la bolsa de verdad:

Code:
+----------------------------------------------------+
|                       Trades                       |
+-------+--------------+--------------+--------------+
|       |long          |short         |total         |  
+-------+--------------+--------------+--------------+
|winning|   8 ( 34.78%)|  12 ( 54.55%)|  20 ( 44.44%)|
|losing |  15 ( 65.22%)|  10 ( 45.45%)|  25 ( 55.56%)|
|total  |  23 (100.00%)|  22 (100.00%)|  45 (100.00%)|
+-------+--------------+--------------+--------------+

+----------------------------------------+
|             Total profits              |
+-------+----------+----------+----------+
|       |long      |short     |total     |
+-------+----------+----------+----------+
|winning|  328.53% |  178.98% | 1095.49% |
|losing |  -60.88% |  -53.17% |  -81.68% |
|net    |   67.66% |   30.64% |  119.02% | (6.67% annual, 1.76% per trade)
|ratio  |          |          |   13.41  |
+-------+----------+----------+----------+
Maximum drawdown: 50.17%
B/H pct gain/loss: 285.17% (11.74% annual)

+-----------------------------------+
|     Statistics about profits      |
+-----+---------+---------+---------+
|     |largest  |average  |median   |
+-----+---------+---------+---------+
|win  |  83.27% |  14.23% |  10.24% |
|loss | -22.06% |  -6.44% |  -5.13% |
|ratio|   3.78  |   2.21  |   2.00  |
+-----+---------+---------+---------+
Largest pct loss / Annual pct gain/loss: 3.31 years to recover largest loss

+-------------------------------------------------+
|                     Durations                   |
+-----+----------------+------+---------+---------+
|     |total           |max   |average  |median   |
+-----+----------------+------+---------+---------+
|win  |  883 ( 28.67%) |  101 |   44.15 |   47.50 |
|loss |  432 ( 14.03%) |   59 |   17.28 |   14.00 |
|out  | 1765 ( 57.31%) |  217 |   38.37 |   29.50 |
|total| 3080           |      |         |         |
+-----+----------------+------+---------+---------+
Most consecutive wins/losses: 3/8
Current position after 4435 days: Out
Expectancy: 2.74
sr. member
Activity: 407
Merit: 250
July 09, 2016, 05:12:54 AM
#45
Os dejo unas capturas de como se hubiera comportado el bot desde el 1 de junio hasta ayer.
He hecho algunas modificaciones en el código original, para que por ejemplo no compre aunque haya habido sobreventa y el WMA se haya dado la vuelta si cuando toca comprar RSI esta marcando sobrecompra (o lo contrario para cortos), también para que cuando salte el stoposs no lo ejecute hasta que precio no esté sobrecomprado/sobrevendido. Lo he afinado para el marco de 15' con este setup:

Quote
INTERVAL = 900
WMA_PERIOD = 14
WMA_SLOPE_DEPTH = 5
WMA_SLOPE_MAX = 0.2
WMA_SLOPE_MIN = -0.2
RSI_TYPE = 'wilder' #['wilder', 'cutler, 'modern']
RSI_PERIOD = 16
OVERBOUGHT = 75
OVERSOLD = 27
SAFE_LONG = 1.25 #[1.00, Not safe = 1]
SAFE_SHORT = 0.75 #[0.xx, Not safe = 1]
RSI_DEPTH = 60
HIGH_DEPTH = 16
LOW_DEPTH = 16
STOPLOSS_CURRENCY = 0.970
STOPLOSS_ASSETS = 1.030





hero member
Activity: 865
Merit: 1006
July 07, 2016, 09:44:45 AM
#44
He añadido este programa y otro que ya tenía a Github:

https://github.com/xcbtrader

Saludos
hero member
Activity: 865
Merit: 1006
July 06, 2016, 10:58:09 AM
#43
Las mejoras de hoy...

Ya calcula el RSI i el máximo/minimo de un periodo.

El periodo depende del número de capturas que haga y del tiempo entre capturas.
En el ejemplo puesto:

lapso = 30  Esto indica 30 segundos entre lecturas.
perRSI = 120 Esto indica 120 lecturas para estudiar el RSI. Aprox. 1 Hora

El programa guarda un fichero con los valores capturados, una vez empieza a contar el RSI.
Tened en cuanta que el RSI no empieza a marcar hasta que no se ha llegado al número mínimo de lecturas.

Yo no soy programador, por lo tanto, este programa hay que utilizarlo con cuidado...

Code:
__author__ = 'xcbtrader'
# -*- coding: utf-8 -*-
# PROGRAMA PARA AUTOTRADER EN BITCOINS UTILIZANDO LAS APIs DE POLONIEX

import urllib
import requests
import json
import time

class Clase_btc:
BTC_fecha = time.strftime('%d %b %y')
BTC_hora = time.strftime('%H:%M:%S')
BTC_last = 0.0
BTC_high24hr = 0.0
BTC_percentChange = 0.0
BTC_low24hr = 0.0
BTC_highestBid = 0.0
BTC_lowestAsk = 0.0
BTC_baseVolume = 0.0

def actualizar_valores(self):
err = True
while err:
try:
request = 'https://poloniex.com/public?command=returnTicker'
response = requests.get(request)
content = response.json()
err = False

self.BTC_fecha = time.strftime('%d %b %y')
self.BTC_hora = time.strftime('%H:%M:%S')
self.BTC_last = content ['USDT_BTC'] ['last']
self.BTC_high24hr = content ['USDT_BTC'] ['high24hr']
self.BTC_percentChange = content ['USDT_BTC'] ['percentChange']
self.BTC_low24hr = content ['USDT_BTC'] ['low24hr']
self.BTC_highestBid = content ['USDT_BTC'] ['highestBid']
self.BTC_lowestAsk = content ['USDT_BTC'] ['lowestAsk']
self.BTC_baseVolume = content ['USDT_BTC'] ['baseVolume']
except KeyboardInterrupt:
exit()
except:
print ('### ERROR DE CONEXION - ESPERANDO 10 SEGUNDOS ###')
err = True
time.sleep(10)
def imprimir_valores(self):
print ('######################################################')
print ('  FECHA:      ' + self.BTC_fecha + ' -- ' + self.BTC_hora)
print ('  LAST:       ' + self.BTC_last)
print ('  HIGH24HR:   ' + self.BTC_high24hr)
print ('  MOVIMIENTO: ' + self.BTC_percentChange)
print ('  LOW24HR:    ' + self.BTC_low24hr)
print ('  HIGHESTBID: ' + self.BTC_highestBid)
print ('  LOWESTASK:  ' + self.BTC_lowestAsk)
print ('  BASEVOLUME: ' + self.BTC_baseVolume)

def RSI(periodo):
global datosBTC

final = len(datosBTC)
if periodo > final:
print('### ERROR PERIODO RSI INCORRECTO ###')
return 0

inicio = final - periodo
incMed = 0.0
decMed = 0.0
for d in range (inicio, final):
incRSI = round((float(datosBTC[d].BTC_last) - float(datosBTC[d-1].BTC_last))/float(datosBTC[d-1].BTC_last),10)
if incRSI != 0:
if incRSI > 0:
incMed = incMed + incRSI
else:
decMed = decMed + abs(incRSI)
incMed = round(incMed/periodo,10)
decMed = round(decMed/periodo,10)
if decMed > 0:
return float(100-(100/(1+(incMed/decMed))))
else:
return float(100-(100/(1+incMed)))

def calcular_MinMax(periodo):
global datosBTC, vMinBTC, vMaxBTC
# CALCULA VALOR MAX Y VALOR MIN DE UN PERIODO. SI PONEMOS 0 COGE TODOS LOS DATOS
if periodo == 0:
vMinBTC = round(float(datosBTC[0].BTC_last),10)
vMaxBTC = round(float(datosBTC[0].BTC_last),10)
for d in range (1,len(datosBTC)):
if datosBTC[d].BTC_last > vMaxBTC:
vMaxBTC = datosBTC[d].BTC_last
if datosBTC[d].BTC_last < vMinBTC:
vMinBTC = datosBTC[d].BTC_last
else:
final = len(datosBTC)
inicio = final - periodo
if inicio < 0:
print ('### ERROR - PERIODO INCORRECTO ###')
return
vMinBTC = round(float(datosBTC[inicio].BTC_last),10)
vMaxBTC = round(float(datosBTC[inicio].BTC_last),10)
for d in range (inicio,final):
if datosBTC[d].BTC_last > vMaxBTC:
vMaxBTC = datosBTC[d].BTC_last
if datosBTC[d].BTC_last < vMinBTC:
vMinBTC = datosBTC[d].BTC_last
#PROGRAMA PRINCIPAL #################################################
global datosBTC, vMinBTC, vMaxBTC

datosBTC = []

n = 0
lapso = 30
perRSI = 120
vMinBTC = 0.0
vMaxBTC = 0.0

fEstadist = open('./EstPoloniexAPI.txt', 'a')

while True:
btcAct = Clase_btc()
btcAct.actualizar_valores()
datosBTC.append(btcAct)
btcAct.imprimir_valores()
if n > perRSI:
Vrsi = RSI(perRSI)
fEstadist.write(str(btcAct.BTC_fecha) + ';' + str(btcAct.BTC_hora) + ';' + str(btcAct.BTC_last) + ';' + str(Vrsi) + ';' + str(vMinBTC) + ';' + str(vMaxBTC) + '\n')
print ('  >>RSI' + str(perRSI) + ':     ' + str(Vrsi))
else:
print ('  >>RSI:    ####' )
if n > perRSI:
calcular_MinMax(perRSI)
print ('  >>ValMin:   ' + str(vMinBTC))
print ('  >>ValMax:   ' + str(vMaxBTC))
else:
print ('  >>ValMin: ####')
print ('  >>ValMax: ####')
print ('######################################################')
print ('ESPERANDO ' + str(lapso) + ' SEGUNDOS')
n +=1
time.sleep(lapso)

fEstadist.close()
sr. member
Activity: 407
Merit: 250
July 05, 2016, 02:28:24 PM
#42

Yo también estoy trabajando en un código para, por una parte capturar valores de POLONIEX, y una vez tenemos los valores, empezar a buscar indicadores/estrategias para analizarlos.

Pongo de momento la captura y enseñar por pantalla los valores.
Ahora estoy con el cálculo del RSI y otros...

CODIGO:

Code:
__author__ = 'xcbtrader'
# -*- coding: utf-8 -*-
# PROGRAMA PARA AUTOTRADER EN BITCOINS UTILIZANDO LAS APIs DE POLONIEX

import urllib
import requests
import json
import time

class Clase_btc:
BTC_fecha = time.strftime('%d %b %y')
BTC_hora = time.strftime('%H:%M:%S')
BTC_last = 0.0
BTC_high24hr = 0.0
BTC_percentChange = 0.0
BTC_low24hr = 0.0
BTC_highestBid = 0.0
BTC_lowestAsk = 0.0
BTC_baseVolume = 0.0

def actualizar_valores(self):
err = True
while err:
try:
request = 'https://poloniex.com/public?command=returnTicker'
response = requests.get(request)
content = response.json()
err = False

self.BTC_fecha = time.strftime('%d %b %y')
self.BTC_hora = time.strftime('%H:%M:%S')
self.BTC_last = content ['USDT_BTC'] ['last']
self.BTC_high24hr = content ['USDT_BTC'] ['high24hr']
self.BTC_percentChange = content ['USDT_BTC'] ['percentChange']
self.BTC_low24hr = content ['USDT_BTC'] ['low24hr']
self.BTC_highestBid = content ['USDT_BTC'] ['highestBid']
self.BTC_lowestAsk = content ['USDT_BTC'] ['lowestAsk']
self.BTC_baseVolume = content ['USDT_BTC'] ['baseVolume']
except KeyboardInterrupt:
exit()
except:
print ('### ERROR DE CONEXION - ESPERANDO 10 SEGUNDOS ###')
err = True
time.sleep(10)

datosBTC = []
btcAct = Clase_btc()
n = 0
lapso = 60

while True:
btcAct.actualizar_valores()
datosBTC.append(btcAct)
print ('######################################################')
print ('  FECHA:      ' + datosBTC[n].BTC_fecha + ' -- ' + datosBTC[n].BTC_hora)
print ('  LAST:       ' + datosBTC[n].BTC_last)
print ('  HIGH24HR:   ' + datosBTC[n].BTC_high24hr)
print ('  MOVIMIENTO: ' + datosBTC[n].BTC_percentChange)
print ('  LOW24HR:    ' + datosBTC[n].BTC_low24hr)
print ('  HIGHESTBID: ' + datosBTC[n].BTC_highestBid)
print ('  LOWESTASK:  ' + datosBTC[n].BTC_lowestAsk)
print ('  BASEVOLUME: ' + datosBTC[n].BTC_baseVolume)
print ('######################################################')
print ('ESPERANDO ' + str(lapso) + ' SEGUNDOS')
n +=1
time.sleep(lapso)

Que guay, que envidia me dais los que sabéis programar cosas, yo lo único que se es "toquitear" y enredar  Cheesy
Suerte con tu proyecto!
hero member
Activity: 865
Merit: 1006
July 05, 2016, 11:20:48 AM
#41
Quote
¿Compartirás el código?

No me ha salido gratis, el que lo ha hecho cobra por su tiempo como es lógico. No tengo problema en compartirlo a cambio de una modesta colaboración.
Mándame un privado si quieres.

Je je je...

No sabia que habías pagado por el.
Yo también estoy trabajando en un código para, por una parte capturar valores de POLONIEX, y una vez tenemos los valores, empezar a buscar indicadores/estrategias para analizarlos.

Pongo de momento la captura y enseñar por pantalla los valores.
Ahora estoy con el cálculo del RSI y otros...

CODIGO:

Code:
__author__ = 'xcbtrader'
# -*- coding: utf-8 -*-
# PROGRAMA PARA AUTOTRADER EN BITCOINS UTILIZANDO LAS APIs DE POLONIEX

import urllib
import requests
import json
import time

class Clase_btc:
BTC_fecha = time.strftime('%d %b %y')
BTC_hora = time.strftime('%H:%M:%S')
BTC_last = 0.0
BTC_high24hr = 0.0
BTC_percentChange = 0.0
BTC_low24hr = 0.0
BTC_highestBid = 0.0
BTC_lowestAsk = 0.0
BTC_baseVolume = 0.0

def actualizar_valores(self):
err = True
while err:
try:
request = 'https://poloniex.com/public?command=returnTicker'
response = requests.get(request)
content = response.json()
err = False

self.BTC_fecha = time.strftime('%d %b %y')
self.BTC_hora = time.strftime('%H:%M:%S')
self.BTC_last = content ['USDT_BTC'] ['last']
self.BTC_high24hr = content ['USDT_BTC'] ['high24hr']
self.BTC_percentChange = content ['USDT_BTC'] ['percentChange']
self.BTC_low24hr = content ['USDT_BTC'] ['low24hr']
self.BTC_highestBid = content ['USDT_BTC'] ['highestBid']
self.BTC_lowestAsk = content ['USDT_BTC'] ['lowestAsk']
self.BTC_baseVolume = content ['USDT_BTC'] ['baseVolume']
except KeyboardInterrupt:
exit()
except:
print ('### ERROR DE CONEXION - ESPERANDO 10 SEGUNDOS ###')
err = True
time.sleep(10)

datosBTC = []
btcAct = Clase_btc()
n = 0
lapso = 60

while True:
btcAct.actualizar_valores()
datosBTC.append(btcAct)
print ('######################################################')
print ('  FECHA:      ' + datosBTC[n].BTC_fecha + ' -- ' + datosBTC[n].BTC_hora)
print ('  LAST:       ' + datosBTC[n].BTC_last)
print ('  HIGH24HR:   ' + datosBTC[n].BTC_high24hr)
print ('  MOVIMIENTO: ' + datosBTC[n].BTC_percentChange)
print ('  LOW24HR:    ' + datosBTC[n].BTC_low24hr)
print ('  HIGHESTBID: ' + datosBTC[n].BTC_highestBid)
print ('  LOWESTASK:  ' + datosBTC[n].BTC_lowestAsk)
print ('  BASEVOLUME: ' + datosBTC[n].BTC_baseVolume)
print ('######################################################')
print ('ESPERANDO ' + str(lapso) + ' SEGUNDOS')
n +=1
time.sleep(lapso)
sr. member
Activity: 407
Merit: 250
July 05, 2016, 11:15:47 AM
#40
Quote
Ahora lo importante es hacerte con unas buenas estadísticas para comprobar su correcto funcionamiento.

En tradewave se puede hacer todo el backtesting de forma gratuita. Con gráficos puntos de entrada, salida, los indicadores ploteados muy completito.

Quote
¿Compartirás el código?

No me ha salido gratis, el que lo ha hecho cobra por su tiempo como es lógico. No tengo problema en compartirlo a cambio de una modesta colaboración.
Mándame un privado si quieres.
hero member
Activity: 865
Merit: 1006
July 05, 2016, 08:42:22 AM
#39
Bueno pues nada, informar de que tengo mi estrategia hecha en Phyton y funcionando bien en backtesting en el sitio de tradewave. Estoy haciendo pruebas y más pruebas modificando parámetros y viendo resultados en diferentes periodos históricos sobre todos en marcos de tiempo de entre 15' y 4H con algunos resultados interesantes. Veo que aquí el tema importante es elegir bien el momento de entrada al mercado y afinar muy bien los parámetros para evitar entre otras muchas cosas excesos de transacciones y que los Fees (en caso de haberlos)  se trapiñen el beneficio.

Lo que es la herramienta en si misma, basada en RSI y WMA, me está sorprendido gratamente, es muy personalizable para poder adaptarla a los diferentes momentos del mercado. Ahora la clave es comprender y acertar bien con los parámetros que no es moco de pavo.

Felicidades...

Ahora lo importante es hacerte con unas buenas estadísticas para comprobar su correcto funcionamiento.

¿Compartirás el código?

Un saludo
sr. member
Activity: 407
Merit: 250
July 05, 2016, 05:01:18 AM
#38
Bueno pues nada, informar de que tengo mi estrategia hecha en Phyton y funcionando bien en backtesting en el sitio de tradewave. Estoy haciendo pruebas y más pruebas modificando parámetros y viendo resultados en diferentes periodos históricos sobre todos en marcos de tiempo de entre 15' y 4H con algunos resultados interesantes. Veo que aquí el tema importante es elegir bien el momento de entrada al mercado y afinar muy bien los parámetros para evitar entre otras muchas cosas excesos de transacciones y que los Fees (en caso de haberlos)  se trapiñen el beneficio.

Lo que es la herramienta en si misma, basada en RSI y WMA, me está sorprendido gratamente, es muy personalizable para poder adaptarla a los diferentes momentos del mercado. Ahora la clave es comprender y acertar bien con los parámetros que no es moco de pavo.
sr. member
Activity: 407
Merit: 250
July 04, 2016, 01:55:23 AM
#37


¿Por qué no vale? Lo he intentado mirar pero no me apetece registrarme ahora mismo. No sé si voy a poder sacar tiempo :/

Decía que con el editor visual que tienen no se puede crear mi estrategia concretamente. Otras si.
sr. member
Activity: 407
Merit: 250
July 04, 2016, 01:48:09 AM
#36
Bueno entonces deduzco que crear un indicador no tiene mucho apoyo ni interés por el momento, nos vamos a lo de toda la vida pero automatizado ¿no?

Pues me pongo a crear el programa con JL Script que es el lenguaje de QTBTCT pero en lugar de enviar ordenes hago que lance mensajes al log tipo (comprados 2BTC a 649$) y que lleve un balance propio, el tema de hacer un backtesting ya lo veo mas complicado.

SI el tema del backtesting en QTBTCT es complicado, quizás se podría clonar la estrategia en cuestión en otro lenguaje como python y probarla en el backtesting de por ejemplo tradewave que es gratis, podría ser una solución probar antes de hacerla funcionar en el QTBTCT, o os parece una marcianada esto?

Yo ya tengo la mía terminada en Phyton, aunque de momento no me funciona en backtest (ni en live) me tira errores que todavía no se seguro si son porque yo soy un zopenco, o por otra cosa...

Aparte en mi estrategia yo lo que veo más delicado es el tema de los stoploss que a veces no se ejecutan si el precio cae muy rápido más abajo/arriba de donde está situado, eso es una putada gorda ya que te deja muy muy fuera.
Pregunto:¿ en QTBTCT es posible lanzar ordenes a mercado en script? Porque con el modo visual me parece que no...
legendary
Activity: 1974
Merit: 1030
July 03, 2016, 05:10:27 PM
#35
Si yo fuera lo probaría sobre  datos de un histórico antes de lanzarlo al mercado real. A sabiendas de que comportamientos pasados no tienen porque implicar que sean los mismos en un futuro, pero permitirían afinar ciertas variables stop en función de la volatilidad o del volumen de mercado, la liquides del intercambio, marcos de tiempo, marcas Fibo, RSI, linea de tendencia, etc.

El problema de esto es que con ese método no afinas el sistema para que funcione. Lo afinas para ajustarlo al histórico sobre el que estés trabajando (curve fitting). Luego lo pones en la selva y se lo meriendan porque el mercado ya no se comporta como lo hacía antes.

Yo cojo el histórico y lo divido en varias partes y las trato como si fueran el histórico entero (realmente es un poco más complejo). Un buen sistema debe comportarse bien en todas ellas. Repito 3 veces, con históricos semanales, diarios e intradía.

Idealmente habría que probar el sistema en varios históricos de varios activos de varios tipos (stock, commodity, currency), en varios marcos temporales. Pero dudo mucho que el santo grial exista Smiley
legendary
Activity: 1974
Merit: 1030
July 03, 2016, 04:45:41 PM
#34
Este hilo no me salía en "Show unread posts since last visit" y ahora resulta que ha tenido un montón de actividad…


Ah.

Pero yo estoy hablando constantemente en el marco de automatizar y tal Smiley Por eso insisto tanto en que todo debe estar definido y previsto.
En que lenguaje programarías nuestro BOT Dserrano?

Yo hablo Perl. Todo mi tinglao de desarrollo y testing de sistemas está en Perl. Me falta poquito para ponerle que hable con el API de bitfinex, que estoy hasta el pene de llegar tarde.


Estaba mirando este sitio https://tradewave.net/ no lo conocía, me ha parecido gracioso e interesante hay un editor de estrategias muy sencillo en plan visual (que no vale para lo nuestro) pero también se pueden escribir en Python, lástima no tener ni idea sino me animaba.

¿Por qué no vale? Lo he intentado mirar pero no me apetece registrarme ahora mismo. No sé si voy a poder sacar tiempo :/
aTg
legendary
Activity: 1358
Merit: 1000
July 03, 2016, 12:20:03 PM
#33
Bueno entonces deduzco que crear un indicador no tiene mucho apoyo ni interés por el momento, nos vamos a lo de toda la vida pero automatizado ¿no?

Pues me pongo a crear el programa con JL Script que es el lenguaje de QTBTCT pero en lugar de enviar ordenes hago que lance mensajes al log tipo (comprados 2BTC a 649$) y que lleve un balance propio, el tema de hacer un backtesting ya lo veo mas complicado.
sr. member
Activity: 407
Merit: 250
July 03, 2016, 11:31:41 AM
#32
Como lo veas  Smiley
Pages:
Jump to: