Arquímedes Expert Advisor

 

Publi

Página 1 de 402 12 ÚltimoÚltimo
Resultados 1 al 10 de 20

Tema: Arquímedes Expert Advisor

  1. #1
    Abro este tema del foro para discutir y desarrollar un Expert Advisor para Metatrader según la eegia descrita por Arquímedes:

    arquimedes wrote:
    -Periodo de tiempo: 5min
    -Medias moviles: Rapida:12, Lenta:26
    -Macd: Por defecto.
    -Estocastico: Por defecto.
    -TP: 25-30pips
    -SL: 20-25pips
    Eegia: Se da la primera señal de compra cuando la media movil rapida traspasa deabajo hacia arriba a la media movil lenta y viceverza. Se da la segunda señal de compra cuando la linea del macd traspasa de abajo hacia arriba la linea de 0 y viceverza. Se da la tercera señal y ala ves la del pistoletaso es la que da el estocastico cuando traspasa de abajo hacia arriba el nivel de 30 y viceverza. Cabe anotar que esta ultima señal es muy poko frecuente, con esto creo que se podrian evitar las falsas señales en lo posible. Tambien seria positivo indicar al robot que no utilice esta eegia en periodos de rangos si es posible.

    Para continuar necesitaría que fueses un poco más específico, si puedes, por ejemplo, las tres señales se han de producir a la vez?? Una depues de otra?? O una sóla señal vale si los demás indicadores estan en consonancia?? (Por ejemplo sería válido tomar la señal de compra del stoch si MACD está sobre 0 y la media rápida está sobre la lenta aunque el cruce de estos dos indicadores no se haya producido en la última vela??). Podrías subir un gráfico con las señales que considerarías válidas?? (cuanto más ejemplos con todos los posibles escenarios mejor).

    Otra cosa, lo que el EA no opere en rango…….como predecir cuando el mercado entrará en rango para desactivar el EA??? Se podría saber si el mercado esta en rango una vez que un mercado lateralizado se ha establecido, pero entonces como predecir cuando el mercado saldra de movimientos laterales y entrará otra vez en movimientos de tendencia??? Si estas cosas se pueden predecir mediante programación está fuera de lo que yo puedo hacer. Como opción te queda desactivar el EA cuando sientas que el mercado entrará en rango y volverlo a activar cuando creas que habrá buenos movimientos. Lo que quiero decir es que podemos identificar que le mercado se está moviendo en rango o como mucho que va entrar en rango (por ejemplo ADX menor a 20, bollinger bands estrechas, erc) pero no predecir cuando lo hará, por lo menos yo no sé como predecir esto, si tienes alguna idea tan sólo dila a ver si la podemos programar.

    Arquimedes1: Toma las señales cuando el cruece de MA, MACD en 0 y Stoch se dan a la vez.

    Arquimedes2: Toma las señales cuando se dan los cruces de MA, cruce en 0 de MACD y señal de Stoch a la vez o sólola señal del stoch cuando MACD y MA están en la misma dirección sin necesidad de que se haya producido el cruce en el mismo momento.

    Arquímedes3: Eliminado el Stoch, toma las señales en el cruce de MACD en 0 cuando las medias móviles están en la misma dirección sin necesidad de que se hayan cruzado en el mismo momento.

  2. #2
    Para continuar necesitaría que fueses un poco más específico, si puedes, por ejemplo, las tres señales se han de producir a la vez?? Una depues de otra?? O una sóla señal vale si los demás indicadores estan en consonancia?? (Por ejemplo sería válido tomar la señal de compra del stoch si MACD está sobre 0 y la media rápida está sobre la lenta aunque el cruce de estos dos indicadores no se haya producido en la última vela??). Podrías subir un gráfico con las señales que considerarías válidas?? (cuanto más ejemplos con todos los posibles escenarios mejor).

    Bien. creo que se podrian hacer dos tipos de ordenes para entrar al mercado, son las siguientes:
    1. Que se den las 3 circustancias antes sitadas al mismo tiempo.
    2. Que se de la orden de tomar como indicadores principales las medias moviles y el macd. en este caso se tomarian las señales por correctas solo cuando se den al mismo tiempo.
    3. Tambien se puede dar otra situacion que no e explicado hasta el momento que utilizaria como señal principal el RSI, se podria dar la orden al robot de ejecutar la orden de venta: una ves que la media movil rapida traspase de arriba hacia abajo a la lenta, el macd taspase de arriba hacia abajo la linea 0 y una ves que el rsi marque una divergencia bajista; aqui es dodne yo te pediria tu consejo ya que el problema imagino esta en poder hacer que el robot identifique dicha divergencia. Se me ha occurido que una forma de poder lograrlo seria dandole una orden en la cual se le especifique que si el RSI se mantiene debajo o en el borde de la linea de 30 o bien de 70 POR MAS DE MEDIA HORA se podria dar la orden definitiva de entrar en el mercado.

    Como puedes ver hay tres posibilidades en alguna de ellas estoy seguro esta la solucion que nos dara buenas probabilidades de acierto. si logras adecuar el robot con la orden que toma como patron principal el RSI se lograran obtener mas pips en las opereciones. Por cierto se me olvido mencionarte que las medias moviles han de ser exponenciales.

    Otra cosa, lo que el EA no opere en rango…….como predecir cuando el mercado entrará en rango para desactivar el EA???
    Respecto a esto estoy deacuerdo con tigo, no hay manera de adelantarse a ltiempo asi que optare por activarlo o desactivarlo por mi mismo.

    Bueno eso es todo creo.. espero que esto te resulte igual de expectante como ami por ver que resultados puede ofrecer.

    Un Saludo!.

  3. #3
    hola pues comentarte que en el primer arquimedes nose daban casi señales de entrada al mercado asi que podemos descartar dicha eegia. El segundo si que daba bastantes señales pero desafortunadamente no dio resultados positivos. He estado observando las entradas al mercado que hacia y en muchos casos la eegia implantada no era para nada la que yo utilizo manualmente. Por ejemplo:
    Abria possicion de venta cuando la media movil rapida se encontaba por enciama de la lenta, si bien el macd estaba por debajo de cero, se encontraba ya terminando la tendecia bajista subiendo casi apunto de traspasar la linea de 0, es decir en este punto no tenia sentido entrar al mercado vendiendo.

    Creo que la mejor porgramacion de la eegia para implantar en el robot seria la siguiente:

    Se vende cuando: el macd traspase la linea de 0 de arriba hacia abajo y la media movil rapida se encuentre por debajo de la lenta, no necesariamete debe de ser la mismo tiempo, para la compra esactamente igual pero a la inversa, encuanto al estocastico creo que da demasiadas señales falsas como para tnerlo en cuenta en este periodo de tiempo.

  4. #4
    De nuevo te kiero dar las gracias ya que al comienso del camino se agradece una mano amigaa.
    Si kieres me podes decir como lo introdusco las ordenes en el roboty lo realizo yo mismo si no tienes mucho tiempo.

    Un Saludo!

  5. #5
    hola. pero se le puede dar al robot la orden de que ejecute la orden de compra o venta justo en el momento en le ke el macd traspasa la linea de 0 esque esto es muy importante. Va por orden: 1 la media movil y luego el macd.

    le e echado un vistado al “Buscar señal” pero para serte sincero no lo entiedo muy bien, creo que seria importante darle solo una opcion respecto al macd es decir y cito un ejemplo:
    “MACD1>=0 && FastMA1>=SlowMA1” se le podria decir que solo cuando sea mayor o menor y que el robot identifique el momento esacto en el que el macd traspase la linea de 0 para introducir la orden.

  6. #6
    hola he intentado modificarlo pero me sigue dando los mismos resultados, el robot compra cuando debe vender y vende cuando debe comprar.

  7. #7
    Hola quetal!! muchas gracias, voy a probarlo aver quetal sale todo.. bueno entoces imagino que ahora tendra que arrojarnos resultados positivos..ejje..en cuanto tenga algunos resultados te informare aver quetal.

    Por cierto he estado introduciendo otra eegia que me confio un amigo mio en el MetaEditor, obviamente he utilizado el bosketo que tu has echo con el “arquimedes dos” solo que le he quitado los indicadores del macd y del estocastico. En la eegia solo se usan 3 medias moviles 2 rapidas y una lenta. Pero al ir configurandolo me sale la siguente señal y no logro arreglarlo. es esta:

    Código:
    void BuscarAbrir()…. Me sale una señal de prohibido
    {
    if (var_752)
    {
    if (Kumo == 1) Print(“SELL signal”);
    int ticket = 0;
    Arko = 0;
    while ((ticket < = 0) && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ticket = OrderSend(Symbol(),OP_SELL,LotsRisk(StopLoss),Bid,Slippage,Bid + StopLoss * MyPoint,Bid – TakeProfit * MyPoint,Version,MagicNumber,0,Red);
    if (ticket < 0)ESTO ME SALE EN EL PANEL DE ABAJO LLAMADO DESCRIPTION:‘(‘ – function definition unexpected	C:Archivos de programaXTB-Trader 4expertstatito.mq4 (203, 17)Si me pudieras ecplicar porke susede esto? te lo agradescoUn SAludo!

  8. #8
    pues lo he revisado varias veces y no todo parece en orden voya a pegartelo todo aki aver si alomejor ves algo.

    Hacerca de las eegias que me programaste, el numero 3 es el que mejores resultados me a dado unque creo que el echo de entrar tantas posiciones al cabo del dia hace que finalmente los resultados sean poco alentadores, lo he estado probando con SL de 400 pips y solo lso meses de enero y febrero me daba muy buenos resultados. todo haciendolo en el par del eur/usd, n fin seguire probando a ver ketal..

    AQUI VA LO DEL METAEDITOR AVER SI SABES LO KE LE PASA:

    Código:
    #property copyright “Copyright c 2009, IndioriNosu”
    #property link “https://www.efxto.com/”
    
    #include
    
    extern string Version = “Arquimedes”;
    extern string Settings=”Settings”;
    extern int Slippage = 5;
    extern int StartHour = 0;
    extern int EndHour = 24;
    extern int Expiration = 24;
    extern bool Account5Digits = false;
    extern double TakeProfit =30;
    extern double StopLoss = 30;
    extern bool UseHiddenLevel=false;
    extern int HiddenTP=50;
    extern int HiddenStop=150;
    extern bool UseTrailingStop = false;
    extern int TrailingStart = 80;
    extern int TrailingStop =100;
    extern string MM = “Money Management”;
    extern bool UseMoneyManagement=false;
    extern bool UseMicroLots = true;
    extern double MaximumRisk = 2.5;
    extern string FixedLot = “Fixed Lots”;
    extern double FixedLots = 0.01;
    extern string SlowMA = “SlowMA Settings”;
    extern int SlowMAPeriod = 18;
    extern int SlowMAShift = 0;
    extern int SlowMAMethod = 0;//0 Simple, 1 Exponencial, 2 Suavizada, 3 ponderacion lineal
    extern int SlowMAApllyPrice = 0; //0 Close, 1 Open, 2 High, 3 Low, 4 Median, 5 Typical, 6 Weighted
    extern string FastMA = “FastMA Settings”;
    extern int FastMAPeriod = 9;4;
    extern int FastMAShift = 0;
    extern int FastMAMethod = 0;//0 Simple, 1 Exponencial, 2 Suavizada, 3 ponderada
    extern int FastMAApllyPrice = 0; //0 Close, 1 Open, 2 High, 3 Low, 4 Median, 5 Typical, 6 Weighted
    extern int MagicNumber = 123456;
    int Kumo = 1;
    int Number = 20;
    bool var_748;
    bool var_752;
    bool var_756;
    bool var_760;
    int var_764;
    int Arko;
    int var_772;
    double SlowMA2;
    double SlowMA1;
    double FastMA2;
    double FastMA1;
    string var_792 = “a”;
    int var_800 = 0;
    double var_804;
    bool var_812 = false;
    bool var_816 = false;
    bool var_820 = false;
    bool var_824 = false;
    bool var_828 = false;
    bool var_832 = false;
    bool var_836 = false;
    bool var_840 = false;
    bool var_844 = false;
    bool var_848 = false;
    int var_852;
    int var_856;
    int var_860;
    bool var_864 = false;
    int var_868;
    int var_872;
    int var_876;
    bool var_880 = false;
    int var_884;
    int var_888;
    int var_892;
    bool var_896 = false;
    int var_900;
    bool var_904 = false;
    double MyPoint=0;
    //+
    
    +
    void start()
    {
    bool tradeallowed=IsTradeAllowed();
    if(!tradeallowed){
    Print(“Trade not allowed”);
    }
    bool contextbusy=IsTradeContextBusy();
    if (contextbusy){
    Print(“Trade context is busy”);
    }
    if (MyPoint == 0.0)
    {
    MyPoint = Point;
    if (Account5Digits) MyPoint *= 10;
    }
    if (UseHiddenLevel==true){
    Hidden();
    }
    int hour = Hour();
    if (hour == Expiration) Limpiar();
    
    if ((hour>=StartHour) && (hour
    {
    BuscarSenal();
    if (BuscarOrdenes() != 0) BuscarCierre(); else BuscarAbrir();
    if (BuscarOrdenes() != 0)
    {
    if (UseTrailingStop == true) TrailStop();
    
    }
    }
    Commenting();
    }
    
    //+
    
    +
    double LotsRisk(int sl)
    {
    if (UseMicroLots == false)
    {
    if (!UseMoneyManagement)
    {
    var_804 = NormalizeDouble(FixedLots,1);
    if (var_804 < 0.1) var_804 = 0.1;
    if (Kumo == 1) Print(“Position lot size: ” + var_804);
    }
    if (UseMoneyManagement)
    {
    var_804 = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 1000.0 / sl,1);
    if (var_804 < 0.1) var_804 = 0.1;
    if (Kumo == 1) Print(“Position lot size: ” + var_804);
    }
    }
    if (UseMicroLots == true)
    {
    if (!UseMoneyManagement)
    {
    var_804 = NormalizeDouble(FixedLots,2);
    if (var_804 < 0.01) var_804 = 0.01;
    if (Kumo == 1) Print(“Position lot size: ” + var_804);
    }
    if (UseMoneyManagement)
    {
    var_804 = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 1000.0 / sl,2);
    if (var_804 < 0.01) var_804 = 0.01;
    if (Kumo == 1) Print(“Position lot size: ” + var_804);
    }
    }
    return(var_804);
    }
    
    //+
    
    +
    int BuscarOrdenes()
    {
    int buy_cnt = 0;
    int sell_cnt = 0;
    
    for (int i = 0; i < OrdersTotal(); i++)
    {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
    if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))
    {
    if (OrderType() == OP_BUY) buy_cnt++;
    if (OrderType() == OP_SELL) sell_cnt++;
    }
    }
    
    if (buy_cnt > 0) return(buy_cnt); else return(-sell_cnt);
    }
    
    //+
    
    +
    void BuscarSenal()
    {
    if (var_772 != Time[0])
    {
    var_772 = Time[0];
    SlowMA2 = iMA(NULL,0,SlowMAPeriod,SlowMAShift,SlowMAMethod,SlowMAApllyPrice,2);
    SlowMA1 = iMA(NULL,0,SlowMAPeriod,SlowMAShift,SlowMAMethod,SlowMAApllyPrice,1);
    FastMA2 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,2);
    FastMA1 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,1);
    FastMA2 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,2);
    FastMA1 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,1);
    var_752 = false;
    var_748 = false;
    if (FastMA1>=SlowMA1)&(FastMA2>=SlowMA1) var_748 = true;
    if (FastMA1< =SlowMA1)&(FastMA2<=SlowMA1) var_752 = true;var_760 = var_748;
    var_756 = var_752;
    if (var_760 || var_756) return;
    
    if (BuscarOrdenes() != 0)
    {
    var_760 = false;
    var_756 = false;
    }
    }
    
    //+
    
    +
    void BuscarAbrir()………..AKI ME PONE EL UNICO ERROR!
    {
    if(var_752)
    {
    if (Kumo == 1) Print(“SELL signal”);
    int ticket = 0;
    Arko = 0;
    while ((ticket < = 0) && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ticket = OrderSend(Symbol(),OP_SELL,LotsRisk(StopLoss),Bid,Slippage,Bid + StopLoss * MyPoint,Bid – TakeProfit * MyPoint,Version,MagicNumber,0,Red);
    if (ticket < 0)
    {
    Print(“Error opening SELL order! “,ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    }
    else
    {
    if (var_748)
    {
    if (Kumo == 1) Print(“BUY signal”);
    ticket = 0;
    Arko = 0;
    while ((ticket < = 0) && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ticket = OrderSend(Symbol(),OP_BUY,LotsRisk(StopLoss),Ask,Slippage,Ask – StopLoss * MyPoint,Ask + TakeProfit * MyPoint,Version,MagicNumber,0,Blue);
    if (ticket < 0)
    {
    Print(“Error opening BUY order! “,ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    }
    }
    //+
    
    +
    void BuscarCierre()
    {
    bool result;
    
    for (int i = 0; i < OrdersTotal(); i++)
    {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)
    {
    break;
    }
    if ((OrderMagicNumber() != MagicNumber) || (OrderSymbol() != Symbol()))
    {
    continue;
    }
    if (OrderType() == OP_BUY)
    {
    if (var_756)
    {
    result = false;
    Arko = 0;
    if (Kumo == 1) Print(“Trying to close Buy position.”);
    while (!result && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    result = OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Gold);
    if (!result)
    {
    Print(“Error closing BUY order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
    Arko++;
    }
    if (result) var_800 = 0;
    }
    }
    break;
    }
    if (OrderType() == OP_SELL)
    {
    if (var_760)
    {
    result = false;
    Arko = 0;
    if (Kumo == 1) Print(“Trying to close Sell position.”);
    while (!result && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    result = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Gold);
    if (result) var_800 = 0;
    if (!result)
    {
    Print(“Error closing SELL order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    }
    break;
    }
    }
    }
    //+
    
    +
    void TrailStop()
    {
    bool result;
    double sl;
    Arko = 0;
    if (TrailingStart > 2)
    {
    for (int i = 0; i < OrdersTotal(); i++)
    {
    if (OrderSelect(i,SELECT_BY_POS) == false) continue;
    if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
    if (OrderType() == OP_BUY)
    {
    if (Bid < OrderOpenPrice() + TrailingStart * MyPoint) continue;
    var_800 = 1;
    sl = Bid – TrailingStop * MyPoint;
    if (sl > OrderStopLoss())
    {
    if (Kumo == 1) Print(“TrailingStop modifying open position.”);
    while (!result && (Arko < Number))
    {
    RefreshRates();
    result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Gold);
    if (!result)
    {
    Print(“Error modifying BUY order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    }
    }
    if (OrderType() == OP_SELL)
    {
    if (Ask > OrderOpenPrice() – TrailingStart * MyPoint) continue;
    var_800 = 1;
    sl = Ask + TrailingStop * MyPoint;
    if (sl < OrderStopLoss())
    {
    if (Kumo == 1) Print(“TrailingStop modifying open position.”);
    while (!result && (Arko < Number))
    {
    RefreshRates();
    result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Gold);
    if (!result)
    {
    Print(“Error modifying SELL order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    }
    }
    }
    }
    }
    //+
    
    +
    void Hidden(){
    for (int i = 0; i < OrdersTotal(); i++)
    {
    if (OrderSelect(i,SELECT_BY_POS) == false) continue;
    if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
    if (OrderType() == OP_BUY){
    if ((Bid>OrderOpenPrice()+HiddenTP*MyPoint) || (Bid< =OrderOpenPrice()-HiddenStop*MyPoint)){
    Limpiar();
    }
    }
    if (OrderType()==OP_SELL){
    if ((Ask< =OrderOpenPrice()-HiddenTP*MyPoint) || (Ask>=OrderOpenPrice()+HiddenStop*MyPoint)){
    Limpiar();
    }
    }
    }
    }
    void Limpiar()
    {
    bool result;
    Arko = 0;
    for (int i = 0; i < OrdersTotal(); i++)
    {
    if (OrderSelect(i,SELECT_BY_POS) == 0) continue;
    if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
    if (OrderType() == OP_BUY)
    {
    result = 0;
    Arko = 0;
    if (Kumo == 1) Print(“Trying to close trade.”);
    while (!result && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    result = OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Gold);
    if (!result)
    {
    Print(“Error closing BUY order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    break;
    }
    if (OrderType() == OP_SELL)
    {
    result = 0;
    Arko = 0;
    if (Kumo == 1) Print(“Trying to close trade.”);
    while (!result && (Arko < Number))
    {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    result = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Gold);
    if (!result)
    {
    Print(“Error closing SELL order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
    Arko++;
    }
    }
    break;
    }
    }
    }
    
    void Commenting()
    {
    if (Kumo == 1) Comment(“nArquímedes Expert Advisor n http://www.efxto.comnn“, AccountCompany(),”nAccount Number: “, AccountNumber(), “nName: “, AccountName(), “nServer: “, AccountServer(),”nBalance: “, AccountBalance(),”nPar: “, Symbol(),”nSpread: “, MarketInfo(Symbol(),MODE_SPREAD));
    }

  9. #9
    Saludos!!

    Tan sólo hacer una pequeña anotación, si subis mucho código intentad hacerlo en forma de archivo adjunto o utilizando los tags para código de BBcode [ code ]el código que sea[/ code ] (tags accesibles de forma directa con el botón # de la barra de edición de texto del mensaje). De este forma se facilita muchísimo la lectura de los mensajes :yes:

    Suerte con vuestros proyectos!!

  10. #10
    Cita Iniciado por qgalan Ver mensaje
    Abro este tema del foro para discutir y desarrollar un Expert Advisor para Metatrader según la eegia descrita por Arquímedes:

    arquimedes wrote:
    -Periodo de tiempo: 5min
    -Medias moviles: Rapida:12, Lenta:26
    -Macd: Por defecto.
    -Estocastico: Por defecto.
    -TP: 25-30pips
    -SL: 20-25pips
    Eegia: Se da la primera señal de compra cuando la media movil rapida traspasa deabajo hacia arriba a la media movil lenta y viceverza. Se da la segunda señal de compra cuando la linea del macd traspasa de abajo hacia arriba la linea de 0 y viceverza. Se da la tercera señal y ala ves la del pistoletaso es la que da el estocastico cuando traspasa de abajo hacia arriba el nivel de 30 y viceverza. Cabe anotar que esta ultima señal es muy poko frecuente, con esto creo que se podrian evitar las falsas señales en lo posible. Tambien seria positivo indicar al robot que no utilice esta eegia en periodos de rangos si es posible.

    Para continuar necesitaría que fueses un poco más específico, si puedes, por ejemplo, las tres señales se han de producir a la vez?? Una depues de otra?? O una sóla señal vale si los demás indicadores estan en consonancia?? (Por ejemplo sería válido tomar la señal de compra del stoch si MACD está sobre 0 y la media rápida está sobre la lenta aunque el cruce de estos dos indicadores no se haya producido en la última vela??). Podrías subir un gráfico con las señales que considerarías válidas?? (cuanto más ejemplos con todos los posibles escenarios mejor).

    Otra cosa, lo que el EA no opere en rango…….como predecir cuando el mercado entrará en rango para desactivar el EA??? Se podría saber si el mercado esta en rango una vez que un mercado lateralizado se ha establecido, pero entonces como predecir cuando el mercado saldra de movimientos laterales y entrará otra vez en movimientos de tendencia??? Si estas cosas se pueden predecir mediante programación está fuera de lo que yo puedo hacer. Como opción te queda desactivar el EA cuando sientas que el mercado entrará en rango y volverlo a activar cuando creas que habrá buenos movimientos. Lo que quiero decir es que podemos identificar que le mercado se está moviendo en rango o como mucho que va entrar en rango (por ejemplo ADX menor a 20, bollinger bands estrechas, erc) pero no predecir cuando lo hará, por lo menos yo no sé como predecir esto, si tienes alguna idea tan sólo dila a ver si la podemos programar.

    Arquimedes1: Toma las señales cuando el cruece de MA, MACD en 0 y Stoch se dan a la vez.

    Arquimedes2: Toma las señales cuando se dan los cruces de MA, cruce en 0 de MACD y señal de Stoch a la vez o sólola señal del stoch cuando MACD y MA están en la misma dirección sin necesidad de que se haya producido el cruce en el mismo momento.

    Arquímedes3: Eliminado el Stoch, toma las señales en el cruce de MACD en 0 cuando las medias móviles están en la misma dirección sin necesidad de que se hayan cruzado en el mismo momento.
    iNDICATORY ya e arreglado lso 3 errores que dijiste , ahora me sale uno mas ,,ejje esto parece no terminar. acontinuacion te lo enseño:

    Código:
    void BuscarCierre()…aqui me da el error!
    {
    bool result;
    
    for (int i = 0; i < OrdersTotal(); i++)
    {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)
    {
    break;
    }
    if ((OrderMagicNumber() != MagicNumber) || (OrderSymbol() != Symbol()))
    {
    continue;
    }
    
    ABAJO PONE:'(‘ – function definition unexpected	C:Archivos de programaXTB-Trader 4expertstatito.mq4 (248, 18)

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Cookies
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información y política de cookies aquí.