[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 201

 
isaev-av:

Gracias. ¿Hay que cambiar los dígitos a 4 o 5 según la CC?

No hay que cambiarlo, sólo hay que tomarlo en función de la moneda. MarketInfo
 
isaev-av:

Gracias. ¿Es necesario cambiar los dígitos a 4 o 5, según el CC?

Deja los Dígitos, se ajustará solo.
 
Camaradas, considerando un sistema muy simple... si el MACD está en la zona durante no más de 5 minutos, entonces abro. Por alguna razón los intercambios no se abren.... aconsejar por favor...
//+------------------------------------------------------------------+ 
  //| MACD ^^^.mq4 | 
  //| Copyright © 2011, MetaQuotes Software Corp. | 
  //| http://www.metaquotes.net | 
  //+------------------------------------------------------------------+ 
  #property copyright "Copyright © 2011, MetaQuotes Software Corp." 
  #property link "http://www.metaquotes.net" 

  extern int TP = 100; 
  extern int TS = 100; 
  extern int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

 int total; 
 int ticket; //объявил тотал и тикет 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 

 bool signal = signal_MACD(); 
  AnalyzeSignal(signal); 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
     total = OrdersTotal();
     double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
     if(total < 1)
     {
     if(signal == true)
     {
         if(MACD > 0)
         {
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"Покупаем",Magic,0,Green); 
            if(ticket>0) 
            { 
            OrderSelect(ticket,SELECT_BY_TICKET); 
            Print("открылись на покупку по цене:", OrderOpenPrice()); 
            } 
            else 
            { 
            Print("открыться не удалось по причине:", GetLastError()); 
            return(0); 
            } 
         }
         if(MACD < 0)
         {
             ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Red); 
             if(ticket>0) 
             { 
             OrderSelect(ticket,SELECT_BY_TICKET); 
             Print("открылись на продажу по цене:", OrderOpenPrice()); 
             } 
             else 
             { 
             Print("открыться не удалось по причине:", GetLastError()); 
             return(0); 
             } 
         }
         else
            return(0);
     }
     }
  }
  
  
  
  
  
 
¡Ayuda! Todos tienen un EA de muestra de MACD al que estoy tratando de añadir el cálculo de lotes. Después de mis cambios no compila :( ¡Ayuda!
double Lots()
  {
   double Lots;
   Lots=AccountFreeMargin()/10000*5;
   Lots=MathMin(15,MathMax(0.1,Lots));
   if(Lots<0.1) 
     Lots=NormalizeDouble(Lots,2);
   else
     {
     if(Lots<1) Lots=NormalizeDouble(Lots,1);
     else       Lots=NormalizeDouble(Lots,0);
     }
     return(Lots);
  }
 

Hola

EA da un error, si ((Bid-OrderOpenPrice(),Digits) >= -60) código 130, da cada nuevo tick y realmente carga el servidor...

si lo cambio a if ((pBid-NormalizeDouble(OrderOpenPrice(),Digits)) == -60) - no funcionará...

Necesito exactamente >= y ¿qué hacer?

Por favor, ayúdenme a resolverlo.

¡¡¡Gracias de antemano!!!

 

¿Cómo puedo calcular mediante programación cuántos pares de divisas participan en una operación?

He intentado buscar los pedidos abiertos. Ejecuté el Asesor Experto en 3 pares de divisas. Obtuve resultados diferentes en cada uno de ellos:

en uno - 3 (correcto), en el segundo - 2, en el tercero - 1.

Lo he probado con 2 pares de divisas:

en uno - 2 (correcto), en el segundo - 1. Si no fuera por el patrón de declive, habría pensado que me había equivocado

int val() 
{
   int kp=1;
   string x1="0",x2="0", x3="0", x4="0", x5="0", x6="0", x7="0", x8="0", x9="0", x10="0", x11="0", x12="0", x13="0", x14="0",       x15="0",
          x16="0", x17="0", x18="0",  x19="0",  x20="0",  x21="0",  x22="0", x23="0",  x24="0";
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
     if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
     if(OrderSymbol()==Symbol())   break;
      if(x9!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol()  &&  x4!=OrderSymbol() &&  x5!=OrderSymbol()  &&  x6!=OrderSymbol()   &&  x7!=OrderSymbol()  &&  x8!=OrderSymbol()   &&  x9!=OrderSymbol() && x10=="0") {x10=OrderSymbol(); kp=11;}      
      if(x8!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol()  &&  x4!=OrderSymbol() &&  x5!=OrderSymbol()  &&  x6!=OrderSymbol()   &&  x7!=OrderSymbol()  &&  x8!=OrderSymbol() && x9=="0") {x9=OrderSymbol(); kp=10;}      
      if(x7!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol()  &&  x4!=OrderSymbol() &&  x5!=OrderSymbol()  &&  x6!=OrderSymbol()   &&  x7!=OrderSymbol() && x8=="0") {x8=OrderSymbol(); kp=9;}      
      if(x6!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol()  &&  x4!=OrderSymbol() &&  x5!=OrderSymbol()  &&  x6!=OrderSymbol() && x7=="0") {x7=OrderSymbol(); kp=8;}      
      if(x5!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol()  &&  x4!=OrderSymbol() &&  x5!=OrderSymbol() && x6=="0") {x6=OrderSymbol(); kp=7;}      
      if(x4!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol()  &&  x4!=OrderSymbol() && x5=="0") {x5=OrderSymbol(); kp=6;}      
      if(x3!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() &&  x3!=OrderSymbol() && x4=="0") {x4=OrderSymbol(); kp=5;}      
      if(x2!="0" &&  x1!=OrderSymbol() && x2!=OrderSymbol() && x3=="0") {x3=OrderSymbol(); kp=4;}      
      if(x1!="0" &&  x1!=OrderSymbol() && x2=="0") {x2=OrderSymbol(); kp=3;}      
      if(x1=="0") {x1=OrderSymbol(); kp=2;}
   }
  return(kp);
}
 
skyjet:
Después de mis cambios no compila :(

¿Qué dice?
 
Figar0:

Bueno, ¿qué dice?
12 errores, 12 advertencias. ¿Debo estar introduciendo mal el cálculo del lote?
 
forexnew:

¿Cómo puedo calcular mediante programación cuántos pares de divisas participan en una operación?

He intentado buscar los pedidos abiertos. Ejecuté el Asesor Experto en 3 pares de divisas. Obtuve resultados diferentes en cada uno de ellos:

en uno - 3 (correcto), en el segundo - 2, en el tercero - 1.

Lo he probado con 2 pares de divisas:

en uno - 2 (correcto), en el segundo - 1. Si no fuera por el patrón de descenso, habría pensado que me había equivocado


O tal vez sólo hacer una lista de instrumentos activos con la ayuda de un EA. El planteamiento es algo complicado. Hay formas más sencillas de hacer las cosas, ¿no?
 
skyjet:
12 errores, 12 advertencias. ¿Debo estar introduciendo mal el cálculo del lote?

No hay errores en la función en sí, probablemente los errores se producen al intentar utilizarla, pero no nos lo muestras. Por favor, publica algo que no compile directamente en un archivo y no tendrás que adivinar.
Razón de la queja: