Ayuda a la codificación - página 667

 
necesito que alguien me ayude a convertir este cruce de ema en un EA. abrir la compra cuando aparezca la flecha azul y vender cuando aparezca la flecha roja salir de la operación cuando la vela al lado de la flecha de cierre. por favor, dejar que el SL y TP ser ajustable y el MAs. sólo quiero usarlo para el comercio de la vela
 
dotmund:
necesito que alguien me ayude a convertir este cruce de ema en un EA. abrir la compra cuando aparezca la flecha azul y vender cuando aparezca la flecha roja salir del comercio cuando la vela al lado de la flecha de cierre. por favor, deje que el SL y TP sea ajustable y el MAs. sólo quiero usarlo para el comercio de la vela
Ver este post : https://www.mql5.com/en/forum/180648/page940
 
mladen:

Para el tiempo de las velas, mejor usar algún indicador especializado para eso (como el adjunto)

En cuanto al separador de periodos : ya es nmc pero quizás quieras usar el adjunto (debería ser más ligero en la cpu)

Muchas gracias. Estoy intentando añadir la opción de "BarsLimit" pero no lo he conseguido. Podrías ayudarme, por favor. Muchas gracias por su tiempo.
Archivos adjuntos:
 
Entropy:
Muchas gracias. Estoy intentando añadir la opción de "BarsLimit" pero no lo he conseguido. Podrías ayudarme, por favor. Muchas gracias por tu tiempo.

Entropía

Aquí tienes una versión con esa opción añadida

Archivos adjuntos:
 

Hola mladen me puedes enseñar a resolver la declaración .

Esto es lo que me da la advertencia .

declaration of 'MinLots' hides global declaration at line 93    
declaration of 'MaxLots' hides global declaration at line 94    
declaration of 'Magic' hides global declaration at line 118     
void CalculateMM()
{
   double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   Lots=AccountFreeMargin()/100000*RiskPercent;
   Lots=MathMin(MaxLots,MathMax(MinLots,Lots));
   if(MinLots<0.1)Lots=NormalizeDouble(Lots,2);
   else
   {
     if(MinLots<1)Lots=NormalizeDouble(Lots,1);
     else Lots=NormalizeDouble(Lots,0);
   }
   if(Lots<MinLots)Lots=MinLots;
   if(Lots>MaxLots)Lots=MaxLots;
   return;



int CloseBuyOrders(int Magic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY)
      {
       ClTicket= OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}

int CloseBuyOrdersHiddenTP(int Magic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY&&Bid>(OrderOpenPrice()+TakeProfit*Point))
      {
        ClTicket=OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}

Gracias.

 
stevenpun:

Hola mladen me puedes enseñar a resolver la declaración .

Esto es lo que me da la advertencia .



Gracias .

Primero esto :

void CalculateMM()
{
   double tMinLots=MarketInfo(Symbol(),MODE_MINLOT);
   double tMaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   Lots=AccountFreeMargin()/100000*RiskPercent;
   Lots=MathMin(tMaxLots,MathMax(tMinLots,Lots));
   if(tMinLots<0.1)Lots=NormalizeDouble(Lots,2);
   else
   {
     if(tMinLots<1)Lots=NormalizeDouble(Lots,1);
     else Lots=NormalizeDouble(Lots,0);
   }
   if(Lots<tMinLots)Lots=tMinLots;
   if(Lots>tMaxLots)Lots=tMaxLots;
   return;

y esto

int CloseBuyOrders(int tMagic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==tMagic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY)
      {
       ClTicket= OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}

int CloseBuyOrdersHiddenTP(int tMagic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==tMagic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY&&Bid>(OrderOpenPrice()+TakeProfit*Point))
      {
        ClTicket=OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}
 

Hola Mladen,

¿Podría usted me importa con este código señor, en lo que necesita ser arreglado?

También, cuando va más alto marco de tiempo, ¿Es posible cambiar de

===> 1Min ~ 30 Min ==> cada 10 pips

===> 1 Hora ======> cada 50 pips

===> 4 Horas, Diario ======> cada 100 pips

===> Semanal, Mensual ===> cada 1000 pips

Los rectángulos son deseados en lugar de líneas señor.

#property indicator_chart_window

#define ONDA_BEGINS 0

#define ONDA_CONTAINS 1



//+------------------------------------------------------------------+

//| Función de inicialización del indicador personalizada ||.

//+------------------------------------------------------------------+

int init()

{

//---- indicadores


//----

return(0);

}

//+------------------------------------------------------------------+

//| Función de desinicialización de indicadores personalizados ||.

//+------------------------------------------------------------------+

int deinit()

{

//----

for (int ix = 0; ix < nLines; ix++) // borrar mis líneas horizontales

{

ObjectDelete("tensLines "+ix);

}


//----

return(0);

}

//+------------------------------------------------------------------+

//| Función de iteración del indicador personalizada ||

//+------------------------------------------------------------------+

int inicio()

{

int nLines = 40; // Número de líneas totales a dibujar

double lineInterval = 0.0010; // Intervalo entre líneas

double normPrice = NormalizeDouble(Close[1],3); // El precio actual se redondea al "10" más cercano


for (int ix = 0; ix < nLines; ix++) // Bucle de duración de número de veces

{

if(ObjectFind("tensLines "+ix) < 0)

ObjectCreate("tensLines "+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval)); // Colocar la mitad por encima y la mitad por debajo del precio actual


else ObjectSet("tensLines "+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

ObjectSet("tensLines "+ix,OBJPROP_COLOR,DarkSlateGray); // Hacer que las líneas se vean mejor

}

//----

return(0);

}

//+------------------------------------------------------------------+


void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY)

{

for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

{

string on = ObjectName(iObj);

int iPos = StringFind(on, nombre);

si (iPos < 0) continúa;

if (iPos > 0 && where == ONDA_BEGINS) continue;

if (type == EMPTY) ObjectDelete(on);

else if (type == ObjectType(on)) ObjectDelete(on);

}

}




//---

 
murnathan32:

Hola Mladen,

¿Podría usted me importa con este código señor, en lo que necesita ser arreglado?

También, cuando va más alto marco de tiempo, ¿Es posible cambiar de

===> 1Min ~ 30 Min ==> cada 10 pips

===> 1 Hora ======> cada 50 pips

===> 4 Horas, Diario ======> cada 100 pips

===> Semanal, Mensual ===> cada 1000 pips

Los rectángulos son deseados en lugar de líneas señor.

#property indicator_chart_window

#define ONDA_BEGINS 0

#define ONDA_CONTAINS 1



//+------------------------------------------------------------------+

//| Función de inicialización del indicador personalizada ||.

//+------------------------------------------------------------------+

int init()

{

//---- indicadores


//----

return(0);

}

//+------------------------------------------------------------------+

//| Función de desinicialización de indicadores personalizados ||.

//+------------------------------------------------------------------+

int deinit()

{

//----

for (int ix = 0; ix < nLines; ix++) // borrar mis líneas horizontales

{

ObjectDelete("tensLines "+ix);

}


//----

return(0);

}

//+------------------------------------------------------------------+

//| Función de iteración del indicador personalizada ||

//+------------------------------------------------------------------+

int inicio()

{

int nLines = 40; // Número de líneas totales a dibujar

double lineInterval = 0.0010; // Intervalo entre líneas

double normPrice = NormalizeDouble(Close[1],3); // El precio actual se redondea al "10" más cercano


for (int ix = 0; ix < nLines; ix++) // Bucle número de veces

{

if(ObjectFind("tensLines "+ix) < 0)

ObjectCreate("tensLines "+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval)); // Colocar la mitad por encima y la mitad por debajo del precio actual


else ObjectSet("tensLines "+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

ObjectSet("tensLines "+ix,OBJPROP_COLOR,DarkSlateGray); // Hacer que las líneas se vean mejor

}

//----

return(0);

}

//+------------------------------------------------------------------+


void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY)

{

for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

{

string on = ObjectName(iObj);

int iPos = StringFind(on, nombre);

si (iPos < 0) continúa;

if (iPos > 0 && where == ONDA_BEGINS) continue;

if (type == EMPTY) ObjectDelete(on);

else if (type == ObjectType(on)) ObjectDelete(on);

}

}




//---

Prueba así

#property indicator_chart_window

#define  ONDA_BEGINS   0

#define  ONDA_CONTAINS 1


    int nLines = 40;                                   // Number of total line to draw

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {

//---- indicators


//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit()

  {

//----

    for (int ix = 0; ix < nLines; ix++) // delete my horizontal lines

      {

      ObjectDelete("tensLines"+ix);

      }


//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int start()

  {


   double lineInterval = 0.0010;                      // Interval between lines

   double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"


   for (int ix = 0; ix < nLines; ix++)                // Loop span number of times

      {

      if(ObjectFind("tensLines"+ix) < 0) 

         ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price


      else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

      ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better

      }

 

//----

   return(0);

  }

//+------------------------------------------------------------------+


void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY)

{

    for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

    {

        string on   = ObjectName(iObj);

        int    iPos = StringFind(on, name);

        if (iPos < 0)                         continue;

        if (iPos > 0 && where == ONDA_BEGINS) continue;

        if      (type == EMPTY)         ObjectDelete(on);

        else if (type == ObjectType(on)) ObjectDelete(on);

    }

}



 
¡El objetivo de este proyecto es el de contratar a alguien que escriba algo de código en python para mí, dispuesto a pagar por el trabajo de alguien o si alguien lo hace de forma gratuita también es genial lol. pero sólo volver a mí cuando y me hizo saber si alguien me puede ayudar, voy a entrar en más detalles una vez que tengo la atención de alguien. será en las bandas de Bollinger, principalmente con un par de otros indicadores. gracias por toda la ayuda chicos!
 
mladen:

Prueba así

Vaya. Usted es el hombre. Gracias mladen por las bendiciones.

Una petición más. ¿Puedes hacer la rejilla en rectángulos como el archivo adjunto / imagen de abajo. Por ejemplo 10 pips por rectángulo. Que el rectángulo proyecte el futuro.

Siento que es más fácil en los ojos que la rejilla por defecto. Y toma medio segundo para ver cuántos pips de movimiento estás viendo.

    ObjectCreate("Rect02", OBJ_RECTANGLE, 0, Time[0], Bid, Time[Bars], (Bid+0.0010) ); //make bar above cur price
      ObjectSet("Rect02", OBJPROP_COLOR, Silver );
      }
//================= Move the Rect with new ticks/candles ===========================
   
   else {
      ObjectMove("Rect01", 0, Time[0], WindowPriceMin()*0.95);
      ObjectMove("Rect02", 0, Time[0], Bid); 

}

Archivos adjuntos: