Entradas NT

Foro dedicado a esta excelente herramienta de desarrollo e implementación de sistemas de trading
Responder
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Entradas NT

Mensaje por agtlgtar »

Hola.
Tengo la misma estrategia corriendo con 2 tipos de órdenes de entrada distintas.

La condición es: If ( Close[1]<Open [1] && Close [0]> Open[0] ) && ...
{
enterlong
}

Estoy diciéndole que si la barra anterior es roja y la actual es verde: Comprar. (Pretendo que entre solo en la 1ª barra verde de una onda)
Con EnterLongLimit(Close[0]); cumple la condición.
Pero con EnterLong(); a veces entra al close de la 2ª barra verde si las demás condiciones de entrada se cumplen en la 2ª barra verde.
Esta es la única diferencia entre las 2 estrategias.
¿A que puede deberse?
Gracias.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Entradas NT

Mensaje por cls »

Hola,
si trabajas a cierre de barra (CalculateOnBarClose == true) todas las órdenes a mercado enviadas dentro del OnBarUpdate con EnterLong o EnterShort se enviarán efectivamente en el cierre de barra y serán filled en el Open de la siguiente.

Las limitadas serán filled cuando el precio las toque (o las supere) y las Stop serán enviadas cuando el precio las toque (y en backtesting también filled a ese precio salvo que indiques deslizamiento).
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: Entradas NT

Mensaje por agtlgtar »

Gracias cls.
Lo que me está sucediendo con EnterLong (ídem con Short) es que cuando se cumplen todas las condiciones de entrada en la 2ª vela verde, la estrategia entra en el close de esa 2ª vela verde, contraviniendo en estas ocasiones la condición ( Close[1]<Open [1] && Close [0]> Open[0] ), que debería impedir que entrase en esa 2ª vela alcista.
Con las "EnterLimit" siempre cumple la condición indicada.
Efectivamente tengo CalculateOnBarClose == true
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Entradas NT

Mensaje por cls »

agtlgtar escribió:Gracias cls.
Lo que me está sucediendo con EnterLong (ídem con Short) es que cuando se cumplen todas las condiciones de entrada en la 2ª vela verde, la estrategia entra en el close de esa 2ª vela verde, contraviniendo en estas ocasiones la condición ( Close[1]<Open [1] && Close [0]> Open[0] ), que debería impedir que entrase en esa 2ª vela alcista.
Con las "EnterLimit" siempre cumple la condición indicada.
Efectivamente tengo CalculateOnBarClose == true
Hola agtlgtar,

Close[1] < Open[1] : estás chequeando que la barra anterior sea bajista.
Close[0] > Open[0]: estás chequeando que la barra corriente sea alcista.
si se dan esas dos condiciones más las otras que tengas en el if se ejecutará el código.

Algo estará mal escrito en la condición. Pega todo el código de la condición a ver.
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: Entradas NT

Mensaje por agtlgtar »

Gracias cls.
Adjunto un pantallazo donde se puede ver lo que hablamos.
He marcado una operación.
Dos operaciones antes se vende al cierre aprox. de la vela roja [0]. Ok
Una operación antes de la señalada se vende al open de la vela siguiente a [0]. Todo ok incluído draw.
En la operación marcada: Se vende al Close de la vela siguiente a [0]. Y dibuja drawtriangle también ahí. Ambas cosas en contra del código.
Index 2 está bajista todo el rato. Index 1 se pone bajista a 10.09.45 (como puedes ver, justo el momento en que se dibuja drawtriangle y se ejecuta la venta.)
También puedes ver operaciones en el pantallazo donde se dibujan 2 drawtriangle en la misma vela, o 1 en la 1ª y otra en la 2ª vela, etc. Todo ello parece en contra del código.
En el ejemplo de NT en help para multi time con CCI, los períodos de los bar object son 1,3 y 1 min. De esa forma los cierres coinciden en el tiempo. Si los períodos fueran 2,3 y 5 min (o con range, o con renko) no tienen porque coincidir. Veo que muchos de estos errores se producen cuando index 1 ó 2 no está en la dirección adecuada, cuando index 0 si lo está. En ocasiones index 1 ó 2 se ponen a favor al close de una vela suya y en ese momento se entra (aunque sea a mitad de una vela de index 0).
protected override void Initialize()
{
CalculateOnBarClose = true;
TraceOrders = true;
AddRenko("$EURUSD",4,MarketDataType.Last);
AddRenko("$EURUSD",5,MarketDataType.Last);
}
protected override void OnBarUpdate()
{
if (CurrentBars[0] <= BarsRequired || CurrentBars[1] <= BarsRequired || CurrentBars[2] <= BarsRequired)
return;
if (BarsInProgress == 0)
{
if ( (Closes [2][0]< (HMA(BarsArray[2],25)[0] ))
&& (Closes [1][0]< (HMA(BarsArray[1],25)[0] ))
&& ( (this.Close [0]< Open[0]) && (this.Close[1]>Open [1] ) ) )
{
DrawTriangleDown ("2"+CurrentBar, true, 0, High[0]+10 * TickSize, Color.Red);
Print("nt1es2");
EnterShort("nt1es2");
entry = Close[0];
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetProfitTarget("nt1es2",CalculationMode.Ticks, profittargetticks);
}
else if (Position.MarketPosition == MarketPosition.Short)
{
if ( Close[0]>=HMA(25)[0])
{
Print("nt1sp2");
SetProfitTarget("nt1es2",CalculationMode.Price,Close[0]);
}
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetStopLoss("nt1es2",CalculationMode.Ticks, stoplossticks,true);
}
else if (Position.MarketPosition == MarketPosition.Short)
{
if (Close[0]>= (entry+9*TickSize))
{
Print("nt1ss2");
SetStopLoss("nt1es2",CalculationMode.Price,Close[0],true);
}
}

}
}


De momento no me deja adjuntar pantallazo. Sigo intentándolo.

agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: Entradas NT

Mensaje por agtlgtar »

Tanto clickar al final se ha enviado 2 veces (no busquéis diferencias entre los 2 pantallazos que no las hay!!!!).
Adjuntos
Pantallazo nt1.doc
(121.5 KiB) Descargado 151 veces
Pantallazo nt1.doc
(121.5 KiB) Descargado 141 veces
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Entradas NT

Mensaje por cls »

Buenas,

tienes errores de concepto en estas sentencias:
SetProfitTarget("nt1es2",CalculationMode.Price,Close[0]);
SetStopLoss("nt1es2",CalculationMode.Price,Close[0],true);

No tiene sentido que las hayas puesto en el OBU y al mismo precio que el Close corriente. Si p.ej. la barra corriente cierra en 2100 no voy a poner un stoploss en 2100 ó un takeprofit en 2100, y si la siguiente barra abre con gap ya tienes todas las papeletas para que te queden órdenes sin cerrar o que hacen cosas extrañas.

En vez de usar los métodos SetProfitTarget y SetStopLoss usa los métodos Exit para salir. Al menos hasta que tengas claro cómo se programan las salidas.

Como ya te dije debes empezar por cosas sencillas para ir asimilando los fundamentos y poco a poco aumentar la complejidad. Si de entrada pretendes programar una estrategia multitimeframe sin tener los fundamentos bien asentados sólo conseguirás que las cosas no te salgan y te desmotives.

Además usas barras renko que como sabrás no son reales y en los backtestings SIEMPRE arrojan resultados falsos.

S2
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: Entradas NT

Mensaje por agtlgtar »

Gracias cls. Estoy con ello.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Ninja Trader”