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

 

El problema es que estos tickets son más de uno. tal vez 4, no lo sé exactamente todavía. por eso he creado una clase con el número de ticket y otra información que no es almacenada por orderselect. así que quería tener acceso al ticket. pero hasta ahora sólo puedo crear objetos de clase y ponerlos en CarrayObj y luego obtener el índice, comparar el ticket y seguir analizando. Pero ya lo he resuelto, gracias. Me culpo a mí mismo en otra parte. SeñoresevilliveAlexeyVik - ¡ gracias por sus rápidas respuestas!

 
Hola! Por favor, escriba por qué en el probador de la estrategia no abre las operaciones, escribe en el error de registro: (2015.07.13 00:22:39.218 TestGenerator: error de datos no coincidentes (valor alto 1.31150 en 2013.07.11 05:00 no se alcanza desde el marco de tiempo más bajo, el precio alto 1.31140 no coincide) cotizaciones actualizadas. Aquí está el código del Asesor Experto:
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int   stoploss=50; 
int   takeprofit=30;
int       slipage=2;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
      if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
      if(V1()==true) 
     
       ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
     
//-------------------------------------------------------------------+ 
    if ( OrdersTotal()<1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
      if(V2()==true) 
     
       ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}

)
 
rylay:
Hola! Por favor, escriba por qué en el Probador de Estrategias no abre operaciones, escribe en el error de registro: (2015.07.13 00:22:39.218 TestGenerator: error de datos no coincidentes (el valor alto 1.31150 en 2013.07.11 05:00 no se alcanza desde el marco de tiempo más bajo, el precio alto 1.31140 no coincide) cotizaciones actualizadas. Aquí está el código del Asesor Experto:
)

En cuanto al mencionado error de los probadores, siempre será así cuando se realicen pruebas con ticks. El historial de cotizaciones en MT4 no es perfecto, siempre hay desajustes.

El código está lleno de errores. Las variables no se inicializan, la función de inicio no entiende lo que devuelve, no hay comprobación de la ejecución de las funciones comerciales, por favor, arréglalo.

Añade #property strict al principio del código.

Y ya que hemos creado dos funciones para definir los tipos de órdenes, ¿por qué no integrar el contador de órdenes de cada tipo y escribir if ( OrdersBuy<1...), if ( OrdersSell<1...) en lugar de comparar if( OrdersTotal()<1...)? Sería más correcto.

 

Por favor, aconsejen cómo abrir una sola operación en condiciones de una barra, si la operación tiene lugar dentro de la barra, pero en el momento del cierre la señal de apertura aparece inmediatamente en la misma barra.

En otras palabras, la barra dio una señal para abrir una orden. Se abrió y se activó una toma corta. La operación se ha cerrado pero el EA cierra la primera e inmediatamente abre la segunda con exactamente la misma orden porque seguimos teniendo la condición de abrirla dentro de la misma barra. Necesito abrir sólo una posición en una barra. Y para abrir la siguiente operación debemos esperar a la apertura de otra barra.

 
Poinson:

Por favor, aconsejen cómo abrir una sola operación en condiciones de una barra, si la operación tiene lugar dentro de la barra, pero en el momento del cierre la señal de apertura aparece inmediatamente en la misma barra.

En otras palabras, la barra dio una señal para abrir una orden. Se abrió y se activó una toma corta. La operación se ha cerrado pero el EA cierra la primera e inmediatamente abre la segunda con exactamente la misma orden porque seguimos teniendo la condición de abrirla dentro de la misma barra. Necesito abrir sólo una posición en una barra. Y esperamos la apertura de otra barra para abrir la siguiente operación.

La opción _ya abierto = falso;

if (isNewBar()){ _ya abierto = false;}

si (!OrderSend(...) ) { /* gestión de errores */; } si no { _ya abierto = true; }

isNewBar() - estándar, como en los artículos, utilizando datetime estático date = Time[0];

if (_already opened) { return; //no envía la orden }

 
evillive:

En cuanto al error del probador mencionado, esto siempre será así cuando se pruebe en ticks. El historial de cotizaciones en MT4 es imperfecto, siempre hay desajustes.

El código está lleno de errores. Las variables no se inicializan, la función de inicio no entiende lo que devuelve, no hay comprobación de la ejecución de las funciones comerciales, por favor, arréglalo.

Añade #property strict al principio del código.

Y ya que hemos creado dos funciones para definir los tipos de órdenes, ¿por qué no integrar el contador de órdenes de cada tipo y escribir if ( OrdersBuy<1...), if ( OrdersSell<1...) en lugar de comparar if( OrdersTotal()<1...)? Sería más correcto.

Gracias. Lo corregiré. Es que cuando había una condición:
if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
no estaba funcionando bien, así que pregunté.
 
danik:

bool _already opened = false;

if (isNewBar()){ _ya abierto = false;}

if (!OrderSend(...) ) { /* gestión de errores */; } si no { _ya abierto = true; }

isNewBar() - estándar, como en los artículos, utilizando datetime estático date = Time[0];

if (_already opened) { return; //no enviar la orden }

dice 'isNewBar' - función no definida 2015

No soy realmente un mago. Me gustaría un copia y pega exacto si puedes por favor.

 
Poinson:

dice 'isNewBar' - función no definida 2015

No soy realmente un artesano. Me gustaría un copia y pega exacto si es posible, por favor.

Si se trata de una nueva barra, puedes copiar y pegar la función isNewBar(), tal vez aciertes, no es complicado - se compara el tiempo de apertura de una nueva barra (con índice 0, es decir, la última), si es más largo que antes - significa que acaba de aparecer una nueva barra. y si apareció - significa que puedes abrir una nueva operación si se cumplen las demás condiciones
 
Poinson:

dice 'isNewBar' - función no definida 2015

No soy realmente un artesano. Me gustaría un copia y pega exacto si es posible, por favor.

¡Sí en cualquier asesor en el kodobase lo encontraría!

//в старте перед условиями входа:
      if(NewBar() == true)
      { 
//----------------------
  return(0);
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
  static datetime lastbar = 0;
  datetime curbar = iTime(NULL,15,0);
  if(lastbar != curbar) 
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
} 
 
borilunad:

¡Cualquier concejal en un kodobase lo habría encontrado!

Gracias )) El más fuerte simplemente! todo funcionó desde la 1ª vez!

Gracias a todos.

Razón de la queja: