Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 341

 

Amigos, por favor, ayuda. Quiero escribir una función para que cada siguiente orden abierta se abra con un lote 2 veces mayor que el anterior. Esta función está dando valores erróneos... ¿Qué tiene de malo? Gracias de antemano.



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}

 
Trader7777:

Amigos, ayuda por favor. Quiero escribir una función para que cada siguiente orden abierta se abra con un lote 2 veces mayor que el anterior. Esta función está dando valores erróneos... ¿Qué tiene de malo? Gracias de antemano.



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}


Para empezar:

extern double LotBuy = 0.01;

double GetLotBuy()

{
double ld_Lot = LotBuy;
for(int n = 1; n<=CountBuy(); n++)
{ld_Lot = LotBuy * n * 2;}
return (ld_Lot);
}

 
Trader7777:

Amigos, por favor, ayuda. Quiero escribir una función para que cada siguiente orden abierta se abra con un lote 2 veces superior al anterior. Esta función está dando valores erróneos... ¿Qué tiene de malo? Gracias de antemano.



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}

Prueba esto.

double OrderLotsSB(string sy="", int op=-1, int mn=-1) { 
 datetime o;
   int      i, k=OrdersTotal(); double r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if ( OrderType()==OP_SELL||OrderType()==OP_BUY) {
          if (op<0 || OrderType()==OP_SELL||OrderType()==OP_BUY) {
            if (mn<0 || OrderMagicNumber()==Magic) {
              r=OrderLots()*2;
            }
          }
        }
      }
    }
  }
  return(r);
}
 
TarasBY:

Para empezar:

extern double LotBuy = 0.01;

double GetLotBuy()

{
double ld_Lot = LotBuy;
for(int n = 1; n<=CountBuy(); n++)
{ld_Lot = LotBuy * n * 2;}
return (ld_Lot);
}



¿Me estás tomando el pelo?
 

Hice un EA basado en mi propio indicador.

Las operaciones de apertura compran al alza y venden a la baja del indicador en relación a ayer.

El problema es que las operaciones se abren y cierran a través de una barra o más.

El indicador está configurado para ignorar los movimientos sobre un determinado valor establecido.

Si no hay exceso, el valor del indicador se mantiene como en la barra anterior (creo que el problema está en alguna parte)

Código del indicador:

//+------------------------------------------------------------------+
//|                                                         EMAF.mq4 |
//|                                                 Kamil Gazizullin |
//|                                             forexman77@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//--- input parameters
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    raznica,raznica_static,
    MA_1_t,                                                  
    MA_2_t;
 
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;
   for(int i=0;i<limit;i++)
   {  
      static double MA_otshet;
      MA_1_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+0);  
      MA_2_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+1); 
      raznica=MA_1_t-MA_2_t;
      raznica_static=MA_1_t-MA_otshet;
      if(raznica_static > -0.003 && raznica_static < 0.003)
      {
      ExtMapBuffer1[i]=MA_otshet;
      }
      else
      if(raznica > -0.003 && raznica < 0.003)
      {
      ExtMapBuffer1[i]=MA_2_t;
      MA_otshet=MA_2_t;
      }
      if((raznica > 0.003) || (raznica <- 0.003))
      {
      ExtMapBuffer1[i]=MA_1_t;
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+

Criterios de negociación del EA:

   // Торговые критерии
EMAF_1=iCustom(NULL, 0, "EMAF",0,0,i+0);    
EMAF_2=iCustom(NULL, 0, "EMAF",0,0,i+1); 
static datetime t;
if  (EMAF_1 > EMAF_2)
          {                                          
          Opn_B=true; 
          t=Time[0];                  
          }
if  (EMAF_1 < EMAF_2)
      {
       if(Time[0]>t)
          {                                      
          Cls_B=true;              
          }
      }
 
klop:
¡Hola!

Se necesita un guión como este:

fue
eur/gbp / 1 lote / open 312.25 / sl 559.45 / tp 454.55
yui/ghf / 1 lote / open 3.28 / sl 5.65 / tp 4.65
.../... / 1 lote / abierto ...... / sl ...... / tp .......


se convirtió en
eur/gbp / 1.02 lote / open 312.25 / sl 559.45 / tp 454.55
yui/ghf / 1.02 lote / open 3.28 / sl 5.65 / tp 4.65
.../... / 1.02 lote / abierto ...... / sl ...... / tp .......

Qué cerraría órdenes pendientes con un determinado volumen (lote), y abriría una nueva orden con otro volumen, pero el mismo nivel de entrada, stop y take.

No lo sé... Tal vez alguien lo haya hecho.
Si está buscando un script con dicha función, puede utilizar un motor de búsqueda en este sitio.
 
max020780:



No entiendo nada aquí...


Quiero que el tamaño del lote aumente geométricamente (con un multiplicador de 2) si se abre una segunda orden unidireccional.

 
Vinin:

¿Estás bromeando?
La solución suele constar de varios "pasos". El primer paso es reducir el crecimiento exponencial del tamaño del lote. A lo largo del camino damos al menos algún sentido al uso del ciclo. Y como no sabemos "dónde está el principio", los pasos posteriores se los dejamos al autor. ;)
 
TarasBY:
La solución suele constar de varios "pasos". El primer paso es reducir el crecimiento exponencial del tamaño del lote. Al mismo tiempo, damos al menos algún significado al uso del ciclo. Y como no sabemos "dónde está el principio", los pasos posteriores dependen del autor. ;)

Esto es, por supuesto, maravilloso, pero aún así, ¿cómo expresar cómo abrir la siguiente orden unidireccional con lote dos veces más que la anterior? Ya existen dos funciones que funcionan: CountBuy() y CountSell()
 
Trader7777:
¿Qué le impide hacer esa comprobación (script)?
Archivos adjuntos: