Algun alma caritativa?

Todo sobre el trading en los mercados financieros: funcionamiento, dudas, noticias, etc.
Responder
Avatar de Usuario
julen
Mensajes: 47
Registrado: 26 Dic 2007 10:03
Ubicación: Barcelona

Algun alma caritativa?

Mensaje por julen »

Hola a todos,

Como la misma introduccion indica eso es lo que busco, alguna alma caritativa que se apiade de este pobre hombre con muy buenas intenciones pero con un nivel de programacion... bueno sin ningun nivel de programacion :? , y con un nivel de ingles que yo creia bueno, pero al que el ninjascript de Ninja y el supportforum de idem han devuelto a la cruda realidad!!

Llevo una semana intentando programar algo que parece sencillo:

-Si Macd Fast en diario cierra en el dia anterior por encima de cero, compra si se rompe el maximo de la primera barra de 30minutos ( que finaliza a las 16:00);

-Si Macd Fast en diario cierra el dia anterior por debajo de cero, venta si se rompe el minimo de la barra de 30min que finaliza a las 16:00;

-Stoploss en 3%.

-Cierre al final del dia (Exitonclose)

Os adjunto el codigo que con sudores he creado durante la semana :? .

// This namespace holds all strategies and is required. Do not change it.
namespace NinjaTrader.Strategy
{
/// <summary>
/// Enter the description of your strategy here
/// </summary>
[Description("Enter the description of your strategy here")]
public class RotRangH : Strategy
{
#region Variables
// Wizard generated variables
private double stoploss = 0.030; // Default setting for Stoploss

// User defined variables (add any user defined variables below)


#endregion

/// <summary>
/// This method is used to configure the strategy and is called once before any strategy method is called.
/// </summary>
protected override void Initialize()
{
Add (PeriodType.Day, 1);

SetStopLoss("", CalculationMode.Percent, Stoploss, false);

CalculateOnBarClose = true;
}

/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{
if (BarsInProgress != 0)
return;

// Checks if the macd daily fast period is above 0 and time in 30min bars is 16:00,
//then gives variable0 value= high 16:00(30minbar) and enter a stop longposition at value0
if (MACD(BarsArray[1], 12, 26, 9)[1] > 0 && ToTime(Time[0]) == 160000)
Variable0 = High[0] + 1*TickSize;
EnterLongStop(DefaultQuantity, Variable0, "");

// Checks if the macd daily fast period is below 0 and time in 30min bars is 16:00,
//then gives variable1 value= Low 16:00(30minbar) and enter a stop shortposition at value1
if (MACD(BarsArray[1], 12, 26, 9)[1] < 0 && ToTime(Time[0]) == 160000)
Variable1 = Low[0] - 1*TickSize;
EnterShortStop(DefaultQuantity, Variable1, "");


}

Si lo aplicais sobre un grafico de AIG en 30min desde principio de año (16:00 a 22:30), funciona relativamente hasta el dia 12 de mayo de 2008 a partir del qual ya no realiza ninguna operacion hasta la fecha de hoy; el maximo de la barra de las 16:00 de ese dia es de 41,15, el sistema lanza una stoplong a 41,16 y ahí permanece la orden hasta hoy.

Se que es un morrazo, pero alguien me explica que pasa?
Muchisimas gracias de verdad.
Un banquero es un señor que nos presta un paraguas cuando hace sol y nos lo exige cuando empieza a llover.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

Tendría que probarlo para estar seguro al 100% pero si lanzas una EnterLongStop y el precio abre con gap por encima del punto de breakout, la orden no se te hace.
Si ha habido problemas con las órdenes suelen registrarse en el log. Luego también hay un fichero trace pero éste no lo he visto nunca. Mira en la ayuda del ninja.


Lo mejor y más rápido es anexar el debugger del VisualStudio y pararte en la barra que suelta la orden, e ir paso a paso por instrucciones para ver qué hace el código.

S2
Responder

Volver a “Trading en General”