[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 520

 
Roger:

En general, he añadido dos variables: una para el nivel de depósito que se debe alcanzar y la segunda para el número de archivos que se deben eliminar. Sólo funcionará una vez, luego es necesario corregir el nivel por otro valor o reiniciar el Asesor Experto.
Gracias, ahora haré la prueba. ¿O no es apto para funcionar en el probador?
 
alex12:
Gracias - Voy a hacer la prueba ahora. ¿O no es adecuado para el funcionamiento de los probadores?

¿Cómo podría probarlo?
 
demlin:

¡Saludos a todos!

Por favor, aconseje un indicador normal para determinar un piso, gracias de antemano ))))


Yo mismo estoy probando esto.

Fácil de añadir (conectar) a un Asesor Experto a través de iCustom().

 
Un sistema sencillo para cruzar 2 vagones.
Compra - la rápida cruza la lenta hacia arriba.
Vender - la rápida cruza la lenta hacia abajo.

Cerrar - señal opuesta o arrastre. ¿Me pueden decir qué debo cambiar en el código para establecer un stop = 50 pips en cada apertura de posición?

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


Yo mismo estoy probando esto.

Se añade fácilmente (se conecta) al Asesor Experto a través de iCustom().

Me pregunto, ¿cómo se definen sus valores extremos bajos y altos en un EA? Después de todo, en una zona local del gráfico 0,3800 (la línea azul) era un valor extremo y correspondía a una corrección temporal, mientras que en la siguiente zona local 0,3041 (la línea verde) se convertía en su valor extremo y marcaba un retroceso...

¿Qué pasa con el valor mínimo del extremo 0,4596 en el primer largo (línea roja), que no dice nada?

¿Y cómo se determina si el valor bajo del extremo del indicador indica una corrección o una inversión? De hecho, el valor de 0,3800 en el primer caso indica una corrección (la línea vertical verde), y en el segundo caso - el final de la tendencia (la línea vertical roja)

Y, por último, hay muchos extremos locales de este tipo en el gráfico. Al fin y al cabo, para un periodo de 3 a 5 horas, habrá sin duda el valor más bajo, y será un valor extremadamente bajo para ese intervalo de tiempo. Si especificamos un determinado intervalo de tiempo para encontrar los valores extremos del indicador, se encontrarán, pero... Sin embargo, en las barras siguientes, más allá del marco temporal especificado, puede ocurrir que el valor del indicador sea aún más bajo (más alto) y entonces este valor será extremadamente bajo (alto), pero ¿qué hacer con el encontrado anteriormente? Más aún para que el Asesor Experto tome una decisión basada en ella.

Sin embargo...


 
artmedia70:

Me pregunto cómo se definen los valores extremos bajos y altos en su Asesor Experto. Después de todo, en una zona local del gráfico 0,3800 (la línea azul) era un valor extremo y correspondía a una corrección temporal, mientras que en la siguiente zona local 0,3041 (la línea verde) se convertía en su valor extremo y marcaba un retroceso...

¿Qué pasa con el valor mínimo del extremo 0,4596 en el primer largo (línea roja), que no dice nada?

¿Y cómo se determina si el valor extremadamente bajo del indicador indica una corrección o una inversión? De hecho, el valor de 0,3800 en el primer caso indica una corrección (la línea vertical verde), y en el segundo caso - el final de la tendencia (la línea vertical roja)

Y, por último, hay muchos extremos locales de este tipo en el gráfico. Si fijamos un intervalo de 3 a 5 horas, seguramente será el valor más bajo, y será un valor extremadamente bajo para ese intervalo de tiempo. Si especificamos un determinado intervalo de tiempo para encontrar los valores extremos del indicador, se encontrará, pero... Sin embargo, en las barras siguientes, más allá del marco temporal especificado, puede ocurrir que el valor del indicador sea aún más bajo (más alto) y entonces este valor será extremadamente bajo (alto), pero ¿qué hacer con el encontrado anteriormente? Tanto más que el Asesor Experto tomará una decisión basada en ella...

Sin embargo...





Considero este indicador como un filtro para entrar en el mercado de una estrategia tendencial o plana, es decir, aparece la siguiente interpretación de su lectura:

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

El valor del indicador por debajo de 0,5 significa que el mercado está en tendencia.

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

Los valores extremadamente bajos suelen preceder al final (corrección) de la tendencia actual - ya está en la figura - aquí funciona el arrastre (cuando está en el mercado).


Un valor del indicador superior a 0,5 significa una condición de mercado plana

iVAR_1 > 0.5 && 

El valor extremadamente alto suele preceder al inicio de una tendencia significativa - véase la interpretación anterior.

El valor del indicador alrededor de 0,5 significa una situación de mercado incierta - aquí es posible utilizar algún "nivel" de sangría (no excluyo que sea redundante, es decir tomar valor 0.5 y todo), tanto por debajo - x, como por encima - y valor 0.5 (nivel base), ponerlos en variables externas y optimizar con paso 0.02, digamos, lo mismo que la variable n - start:2 step:1 stop:7 - no es superfluo, lo hago - pronto postearé resultados en rama Avalancha (es sistema de tendencia...:-)), solo con MM de Martin... y todo... :-)))).

 
Roman.:


Considero este indicador como un filtro para entrar en el mercado ya sea a una estrategia tendencial o plana, es decir, su lectura tiene la siguiente interpretación:

Un valor del indicador inferior a 0,5 indica una condición de mercado tendencial -

Los valores extremadamente bajos suelen preceder al final (corrección) de la tendencia actual - esto ya conviene a la figura - aquí funciona el arrastre (cuando está en el mercado).


El valor del indicador por encima de 0,5 significa la condición de mercado plano

Un valor extremadamente alto suele preceder al inicio de una tendencia significativa - véase la interpretación anterior.

El valor del indicador alrededor de 0,5 significa una condición de mercado incierta - aquí es posible utilizar algún "nivel" de sangría (no excluyo que sea redundante, es decir tomar valor 0.5 y todo), tanto por debajo - x, como por encima - y valor 0.5 (nivel base), introducirlos en variables externas y optimizar con paso 0.02, digamos, lo mismo que la variable n - start:2 step:1 stop:7 - esto no es excesivo, yo lo hago - pronto colgaré resultados en la rama Lavina (es sistema de tendencia...:-)), solo con MM de Martin... y todo... :-)))).

No me gusta la optimización: la esencia es un ajuste... Y nunca optimizo los parámetros de mis bebés... Trato de elegir los parámetros necesarios para las diferentes condiciones del mercado.

Pero gracias por la aclaración... :) Sinceramente - coger el post de arriba era una piedra en la dirección del pavo... :)

 

¡Buenas tardes!

Tengo una pregunta de este tipo. El Asesor Experto tiene una función que escribe las operaciones en un archivo csv, pero he descubierto un problema que ocurre cuando habilito/deshabilito(TRUE/FALSE) la opción del sistema de gestión del dinero en los parámetros del Asesor Experto. Por ejemplo, justo después de compilar el archivo fuente todo funciona correctamente y las operaciones se escriben en el archivo como estaba previsto. La figura siguiente ilustra los datos escritos correctamente:

Luego, en el probador, habilito la opción del sistema de gestión del dinero en los parámetros del Asesor Experto, ejecuto la prueba, pero los datos no se escriben en el archivo correctamente. La figura siguiente muestra dos variantes para comparar. La de la izquierda es correcta (como la anterior) y la de la derecha no lo es:

No he podido averiguar por mi cuenta de qué puede tratarse, pero he encontrado lo siguiente. Si además habilito/deshabilito la opción del sistema de gestión del dinero y vuelvo a compilar el archivo fuente antes de iniciar la prueba, todo se escribe correctamente.

¿Puede decirme cuál puede ser el problema?

 
artmedia70:

No me gusta la optimización: la esencia es encajar... Y nunca optimizo los parámetros de mis productos... Trato de dejarles elegir los parámetros necesarios para las diferentes condiciones del mercado.

Aunque, gracias por la aclaración... :) Honestamente - ir con el post de arriba era un guijarro en la dirección de un pavo ... :)


Ya veo... Si te interesa, aquí tienes algo parecido (en el tráiler). Véase también aquí (hilo completo) -hayun tratamiento por encima/por debajo de 0,6 y aquí(páginas selectivas).

Archivos adjuntos:
 
Roman.:


Yo mismo estoy probando esto.

Se añade fácilmente (se conecta) al EA a través de iCustom().

Gracias, lo he descargado, lo probaré en mi Expert Advisor
Razón de la queja: