Publi

Publi

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 11


  1. #1

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 24
    Créditos: 847

    Novato atascado en asesor experto mql5


    Publi
    Buenos días,

    Soy novato en esto de programar asesores expertos, por lo que aun estoy aprendiendo en mql5 y me he quedado atascado.

    Esa forma de realizar las señales mediante un rsi la vi en el manual de mql5, aunque la adapte, por lo que no se si la estoy realizando correctamente.

    El problema es que no me entra en el if (rsi_buffer[2]<30 && rsi_buffer[1]>30) ni en el else if(rsi_buffer[2]>70 && rsi_buffer[1]<70). Todo lo demás lo hace correctamente, ya que probé a quitarle los if.

    Como podéis intuir el If lo que indica es que cuando el rsi se encuentre por debajo de 30 pase a la siguiente linea de código y haga un compra. Y con el otro sucede lo mismo, cuando esta por encima de 70 haga una venta.

    Es algo muy simple pero por mas que he buscado no encuentro el error.


    //+------------------------------------------------------------------+
    //| Declaracion de variables
    //+------------------------------------------------------------------+input double Lote=0.01; // Lotes
    input int magic=7777777; // magic
    //+------------------------------------------------------------------+
    //| Declarar variables para almacenar los manejadores de indicadores |
    //+------------------------------------------------------------------+
    int rsi_handle;
    int CCI_handle;
    //+------------------------------------------------------------------+
    //| Declarar variables para almacenar los datos de los indicadores |
    //+------------------------------------------------------------------+
    double rsi_buffer[];
    //+------------------------------------------------------------------+
    //| Expert initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    rsi_handle=iRSI(Symbol(),Period(),14,PRICE_CLOSE);

    if(rsi_handle==INVALID_HANDLE)
    {
    Alert("Error al cargar el indicador, intentar de nuevo");
    return(-1);
    }

    return(0);
    }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    if(rsi_handle!=INVALID_HANDLE)IndicatorRelease(rsi _handle);

    }
    //+------------------------------------------------------------------+
    //| Expert tick function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    if(CopyBuffer(rsi_handle,0,0,3,rsi_buffer)<0) // manejador del indicador // número del buffer del indicador //posición de inicio // cantidad de datos a copiar // array de destino en el que se copian los datos
    {
    return;
    }

    if(!ArraySetAsSeries(rsi_buffer,true))
    {
    return;
    }

    if(!PositionSelect(_Symbol))
    {

    MqlTradeRequest mrequest;
    MqlTradeResult mresult;
    ZeroMemory(mrequest);
    mrequest.action = TRADE_ACTION_DEAL;
    mrequest.symbol = Symbol();
    mrequest.volume = Lote;
    mrequest.magic = magic;

    if (rsi_buffer[2]<30 && rsi_buffer[1]>30)
    {

    mrequest.type = ORDER_TYPE_BUY;
    mrequest.price = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    }
    else if(rsi_buffer[2]>70 && rsi_buffer[1]<70)
    {

    mrequest.type=ORDER_TYPE_SELL;
    mrequest.price = SymbolInfoDouble(Symbol(),SYMBOL_BID);

    }

    }
    }

    No se si hay otra forma de implantar el código aquí, me refiero a que visualmente se asemeje a cuando lo haces en el editor del metatrader 5, y si lo hay ¿me podríais decir como hacerlo? ya que he copiado y pegado directamente.

    Espero que podáis echarme una mano.

    Un saludo y muchas gracias.
    Foro de Forex Trading United

     

  2.                         
    Publi
  3. #2
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Novato atascado en asesor experto mql5

    Compi, a ver si luego tuviera algún rato y lo puediera mirar, pero voy basante a tope de tiempo. De momento puedes comprobar qué valores te está almacenando en el array del rsi, poníendole que te muestre los valores en un Comment, por ejemplo.

    Saludos y un abrazo.
    Foro de Forex Trading United

     

  4. #3

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 24
    Créditos: 847

    Re: Novato atascado en asesor experto mql5

    Ya es la segunda vez que me pasa que mando un mensaje citando y no se publica, vuelvo a ponerlo pero sin citar.

    Muchas gracias amigo, no había caído en utilizar esa función, pero en el manual pone que "no se puede pasar los arrays a la función Comment(). Los arrays tienen que imprimirse elemento por elemento" (aquí ya me pierdo).

    ¿Como puedo hacer para ver los valores que se almacenan en el array?

    Un saludo y muchas gracias.


    Edito: Si que se puede ver el contenido del array con comment (de hecho me es bastante útil), pero no encuentro el motivo de porque no me entra en el if.
    Foro de Forex Trading United
    Última edición por Rick7; 30-10-2014 a las 22:17

     

  5. #4
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Novato atascado en asesor experto mql5

    Hombre, con que le pongas un solo valor del array es suficiente. En el comment por ejemplo le pones que te muestre el valor rsi_buffer[0] para ir viendo el valor que te va asignando en la vela actual, y si quieres le pones luego +"\n Valor vela previa = "+DoubleToString(rsi_buffer[1],4]) y cierras el parentesis del comment );

    (El nombre exacto del array no recuerdo el que le habías puesto, ponle el nombre de tu array).

    Saludos y un abrazo.
    Foro de Forex Trading United

     

  6. #5

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 24
    Créditos: 847

    Re: Novato atascado en asesor experto mql5

    Cita Iniciado por robertomar Ver mensaje
    Hombre, con que le pongas un solo valor del array es suficiente. En el comment por ejemplo le pones que te muestre el valor rsi_buffer[0] para ir viendo el valor que te va asignando en la vela actual, y si quieres le pones luego +"\n Valor vela previa = "+DoubleToString(rsi_buffer[1],4]) y cierras el parentesis del comment );

    (El nombre exacto del array no recuerdo el que le habías puesto, ponle el nombre de tu array).

    Saludos y un abrazo.
    Vale gracias, ya lo hice en el comment. Ahora una cosa, tu me dices que le ponga un solo valor al if, ¿que le pondrías, rsi_buffer[0], [1] o [2]?


    Edito: Poniendo uno solo ya me entra en el if, pero no se cual seria el mas acertado poner, mas bien el que mayor eficacia de.
    Foro de Forex Trading United

     

  7. #6
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Novato atascado en asesor experto mql5

    No no, un solo valor al If no, me refería a que te mostrase un solo valor en el Comment (la vela actual por ejemplo) o bien 2 valores (la actual y la previa), con eso es suficiente para ver qué valores te está asignando y ver si son correctos o no.

    El objetivo era ver eso, si te asigna bien los valores a ese array, ¿te va marcando bien los valores en el buffer del rsi??-

    Saludos
    Foro de Forex Trading United

     

  8. #7

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 24
    Créditos: 847

    Re: Novato atascado en asesor experto mql5

    Cita Iniciado por robertomar Ver mensaje
    No no, un solo valor al If no, me refería a que te mostrase un solo valor en el Comment (la vela actual por ejemplo) o bien 2 valores (la actual y la previa), con eso es suficiente para ver qué valores te está asignando y ver si son correctos o no.

    El objetivo era ver eso, si te asigna bien los valores a ese array, ¿te va marcando bien los valores en el buffer del rsi??-

    Saludos

    ah vale! a mi ya me parecía pero como soy novato... Respecto a si me marca bien los valores, sí en el array me almacena los valores que el indicador rsi marca.

    Gracias por tu ayuda. Saludos.
    Foro de Forex Trading United

     

  9. #8

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 24
    Créditos: 847

    Re: Novato atascado en asesor experto mql5

    Hola de nuevo,

    ¿Como debería hacer el if? ¿que arrays, rsi_buffer[0], rsi_buffer[1], rsi_buffer[2]...?

    Muchas gracias. Un saludo.
    Foro de Forex Trading United

     

  10. #9
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Novato atascado en asesor experto mql5

    Cita Iniciado por Rick7 Ver mensaje
    Hola de nuevo,

    ¿Como debería hacer el if? ¿que arrays, rsi_buffer[0], rsi_buffer[1], rsi_buffer[2]...?

    Muchas gracias. Un saludo.
    Si quieres operar cuando haya cruce de nivel de 30 o de 70 más o menos como lo tienes iría bien, solo que habría que poner mejor :

    if (rsi_buffer[2] >= 70 && rsi_Buffer[1] < 70) {

    entonces que te haga lo que quieres

    }

    Esto es porque si pones primero > y despues < a veces no te entra en algunos cruces, porque en la vela 2 estaba justo igual que 70, y era en la vela 3 cuando estaba por encima, con que sea mayor o igual que 70 y la vela siguiente menor que 70 te coge todos los cruces.

    No obstante, de dónde has sacado ese código, lo estás haciendo tú??. A mí personalmente no me gusta mucho cómo está estructurado, yo no lo haría así. Yo pondría primero que compruebe las condiciones del RSI, y una vez comprobadas, si se da una, que me compre, y si se da la otra que me venda (pero esto ya debajo.

    Y luego muchas más condiciones, como por ej que si tienes ya una abierta no te vuelva a abrir otra, etc etc. Supongo que ahí solo pusiste un fragmento dele código.

    Saludos y un abrazo.
    Foro de Forex Trading United

     

  11. #10

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 24
    Créditos: 847

    Re: Novato atascado en asesor experto mql5


    Publi
    Cita Iniciado por robertomar Ver mensaje
    Si quieres operar cuando haya cruce de nivel de 30 o de 70 más o menos como lo tienes iría bien, solo que habría que poner mejor :

    if (rsi_buffer[2] >= 70 && rsi_Buffer[1] < 70) {

    entonces que te haga lo que quieres

    }

    Esto es porque si pones primero > y despues < a veces no te entra en algunos cruces, porque en la vela 2 estaba justo igual que 70, y era en la vela 3 cuando estaba por encima, con que sea mayor o igual que 70 y la vela siguiente menor que 70 te coge todos los cruces.

    No obstante, de dónde has sacado ese código, lo estás haciendo tú??. A mí personalmente no me gusta mucho cómo está estructurado, yo no lo haría así. Yo pondría primero que compruebe las condiciones del RSI, y una vez comprobadas, si se da una, que me compre, y si se da la otra que me venda (pero esto ya debajo.

    Y luego muchas más condiciones, como por ej que si tienes ya una abierta no te vuelva a abrir otra, etc etc. Supongo que ahí solo pusiste un fragmento dele código.

    Saludos y un abrazo.

    Buenos días,

    Gracias por seguir ayudándome. Después del parón del fin de semana seguimos aquí intentándolo dar todo

    Sí, el código lo estoy haciendo yo, lo único que saque de por ahí fue la condición del if para saber la señal de compra y venta y lo que fui viendo en el manual, el resto lo estructure como yo creía que era mejor. Aunque realmente lo que estoy haciendo es ir probando diferentes partes de código de forma independiente, es decir como si fuera otro programa, y luego las voy adaptando en este que estoy haciendo. Mas que nada hago esto porque me interesa entender como funciona y porque cada parte.

    Con la función PositionSelect, hice una condición para que solo me compre una vez, pero debo estar haciéndolo mal, ya que en tu ultima respuesta me indicas que harías esto, aunque no se si vale esa función.

    Lo puse así if(!PositionSelect(_Symbol))


    Luego también me indicas que tu probarías primero las condiciones del RSI y una vez se den estas, que compre y venda, pero ¿a que te refieres con ponerlo debajo? ¿harías una función de compra y venta fuera del ontick?

    Gracias amigo.

    Un saludo.
    Foro de Forex Trading United

     

Página 1 de 2 12 ÚltimoÚltimo
Publi
Publi


Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal