[¡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 403

 
ruslanchik:
Por favor, dígame cómo calcular el tamaño de la pila

Sea más específico con su pregunta.
 

¿Es posible saltarse un paso innecesario en la optimización y pasar al siguiente?

Ejemplo: hay parámetros de entrada(tipo double) que deben ser optimizados: x1, x2, x3, x4. Sus valores son de 1 a 5. Paso 0.1

Está claro que en este caso habrá 41*41*41*41=2.825.761

Pero tenemos que buscar en la siguiente restricción: 10,5 < x1+x2+x3+x4 < 11,5. Aquí ya está claro que habrá muchas menos variantes de búsqueda. (esta es la propia restricción de la suma necesaria)

Por lo tanto, si se añade esta restricción al código del Asesor Experto de la siguiente manera

extern double    x1=1, x2=1, x3=1, x4=1;

int start()

{

  if (10.5<x1+x2+x3+x4 && x1+x2+x3+x4<11.5)

    {
      // основной код эксперта 

    }
  return; 

} 

entonces durante la optimización (cuando llega cada nuevo tick), también se tomarán las variantes no adecuadas, por ejemplo x1=4, x2=4, x3=4, x4=4; lo que no ocurrirá exactamente -- es la ejecución del código principal.

Es decir, mientras este paso de optimización no "atraviese" el intervalo histórico, no habrá transición al siguiente paso. Habrá una "convicción" de que la condición 10,5 < x1+x2+x3+x4 < 11,5 no se cumple y sólo detendrá la ejecución del código principal

Se perderá mucho tiempo en variantes tan obviamente inadecuadas

¿Cómo podemos excluir esos pasos en la optimización con parámetros obviamente inadecuados?

En otras palabras, cuando otro conjunto de parámetros resulta inadecuado, ¿por qué no se optimiza este paso y se pasa inmediatamente al siguiente?

 
fmql:

¿Es posible saltarse un paso innecesario en la optimización y pasar al siguiente?


es posible optimizar 3 parámetros y ajustar el cuarto para la cantidad deseada.

o utilizar la tercera pestaña "Optimización" para generar el evento deseado de forma espontánea.

 
sergeev:

es posible optimizar 3 parámetros y ajustar el cuarto para la cantidad requerida.

o utilizar la tercera pestaña "Optimización" para generar el evento deseado de forma espontánea.

La cuestión es que es imposible optimizar 3 parámetros sin el cuarto parámetro en mi caso.

Aquí lo importante es su selección conjunta y su suma está limitada en el intervalo.

(es aproximadamente como buscar las partes de todos los componentes de una mezcla y la masa total de esta mezcla está limitada a un intervalo estricto)

¿Puede decirme más sobre la tercera pestaña, qué es esta generación espontánea del evento deseado?

 

Buenas tardes.

¿Pueden decirme cómo extraer los valores de las velas (Alto, Bajo, Apertura, Cierre) del último extremo del indicador ZigZag?

 
Lo mismo que para cualquier otra vela. Las mismas funciones. ( Piensa en el diámetro de tu planeta.(c) )
 
Si desea obtener el número de barra del último extremo en sí, utilice el nombre del objeto de la última raya para obtener la hora de la primera coordenada, que corresponderá a la hora de la barra. Utilizando el tiempo del compás, determine el número del compás. Determine las características de la barra a partir del número de barra.
 
fmql:

¿Podría detallar la tercera pestaña, que es la generación espontánea del evento deseado?


Más detalles en la ayuda

En resumen, puede crear sus propias condiciones para el punto de la tercera pestaña (por ejemplo, abrir 10 órdenes perdedoras seguidas) y el comprobador saltará automáticamente esta ejecución y pasará a la siguiente.

 
Stells:

Buenas tardes.

¿Pueden decirme cómo extraer los valores de las velas (Alto, Bajo, Apertura, Cierre) del último extremo del indicador ZigZag?


Esta operación requiere algunos cálculos.

Yo lo hacía así:

int start()
  {
 double // экстремумы Зиг-Зага
  y3=0, 
   y2=0,
    y1=0,
     y0,
     zz;   
 int    x3, x2, x1, sh=ShiftBars;// номера баров  

  y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";

on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    

Ahora ya sabes los números de barra de los 2 últimos extremos (mínimo y máximo) y luego sus máximos, mínimos.... ¡fácil de encontrar!

- Cerrar[x1], Abrir[x2], .... etc.

Tal vez alguien sugiera una opción más sencilla.

 
No se puede organizar un bucle, X e Y son siempre 0.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i==0;i--){
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
  for( i=OrdersTotal();i==0;i--){OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+