[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 482

 
Dimka-novitsek:

¡¡¡Gracias!!! Poner la normalización... ¡¡¡¡¡¡Y maldita sea, ¿qué diablos está pasando en todo!!!!!! Mi cabeza está en llamas. Parece más fácil que la geometría de la escuela secundaria.



No necesitas normalización para ASK y BID, necesitas Sleep(Shh1sec-5secs);
 

¡Lo tengo! ¡Aquí está la cosa! A ver si lo entiendo... Muchas gracias por su participación, por su ayuda. Yo tampoco lo entiendo, presta atención al código de arriba. Hay una condición

 if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();

Si... y si... y si no hay órdenes de compra. ¡Quiero decir que las hay! No son cero. Como puede ver en la captura de pantalla, el código acaba de empezar a funcionar y no hay órdenes de compra. ¡Pues no! Y la condición se cumple, ¡aunque no debería!

Esto se puede ver en el mensaje de la impresora en la ventana de Asesores Expertos. Por cierto, la orden estaba perfectamente fijada cuando se cumplía la condición, es decir, ¡estaba fijada!

¿Resulta que he escrito mal la condición?

Por supuesto, se activó otra condición en el código,

if (strela1<strela2&&BUY==0&&SELL==0){

que es el que debería haberse activado dadas las circunstancias.

¿Qué pasa?

¿¡Qué hay de malo en la condición lógica!?

¿Cómo diablos es que se ejecutan los dos a la vez?

 

Mirando, no entiendo... ¡¡¡Son dos condiciones que se cumplen a la vez!!! Tal vez soy un idiota... Pero no lo entiendo. Esto es ridículo. ¡Creo que no sé cómo escribir un operador if!

Hombre, todo el código.

//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=200 ;                          
  extern double  takeprofit=500 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){//if (!IsVisualMode()) return(0);
keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
  {Print (   "  Начало " ); 
//----
for( int A=0; A<100 ; A++){
            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
            int BUY=0,SELL=0;int ticket; 
            Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot,NormalizeDouble( Bid, Digits), 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, NormalizeDouble(Ask, Digits), 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
 NormalizeDouble( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), OP_SELL, lot,NormalizeDouble( Bid, Digits), 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
 NormalizeDouble( Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits); }
               
    
   
   
     } Print (   "  Конец " ); BreakPoint();     
//----
   return(0);
  }
//+------------------------------------------------------------------+

void udalenie (){ int total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
   int type   = OrderType();  bool result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3*Point, CLR_NONE ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3*Point, CLR_NONE ); break; 
          }
    if(!result)
      {
      int error =  GetLastError(); 
      string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
      Print(errorcomment);
      }  
    }       
   }

Explicación, sólo para hacerlo más fácil... La recogida de pedidos estándar, como yo lo veo. Las órdenes abiertas por separado se leen en las variables COMPRA++, VENTA++.

Entonces estas variables están involucradas en condiciones lógicas. El resto no parece tener ninguna importancia, aunque quién sabe.

En realidad, está claro lo que he visto en las impresiones.

 
aedu:
He descargado un EA para el trabajo en "un solo clic", compilado - sin errores, pero excepto "cara" en la esquina no muestra nada. Ayuda !!!!!!!!!!!!!
McTrader_"+Symbol()+"_command.dat", creo que necesita algo así como un script con comandos para el EA. No lo crea por sí mismo. Por lo tanto, póngase en contacto con el desarrollador para obtener explicaciones.
 
Dimka-novitsek:

Mirando, no entiendo... ¡¡¡Son dos condiciones que se cumplen a la vez!!! Tal vez soy un idiota... Pero no lo entiendo. Esto es ridículo. ¡Creo que no sé cómo escribir un operador if!

Hombre, todo el código.

Explicación, sólo para hacerlo más fácil... La recogida de pedidos estándar, como yo lo veo. Vender por separado las órdenes abiertas en las variables COMPRA++, VENTA++.

Entonces estas variables están involucradas en condiciones lógicas. El resto no parece tener ninguna importancia, aunque quién sabe.

En realidad, está claro lo que he visto en las impresiones.

¿puede darme un "indicador"?

aunque no

 

¿Por qué se pone tan nervioso?
 
Dimka-novitsek:

Mirando, no entiendo... ¡¡¡Son dos condiciones que se cumplen a la vez!!! Tal vez soy un idiota... Pero no lo entiendo. Eso es ridículo. ¡Creo que no sé cómo escribir un operador if!

Hombre, todo el código.

Explicación, sólo para hacerlo más fácil... La recogida de pedidos estándar, como yo lo veo. Las órdenes abiertas por separado se leen en las variables COMPRA++, VENTA++.

Entonces estas variables están involucradas en condiciones lógicas. El resto no parece tener ninguna importancia, aunque quién sabe.

En realidad, está claro lo que he visto en las impresiones.

Muchos errores lógicos y técnicos. La lógica de las órdenes de apertura no es rastreable (he tenido que usar mi imaginación). Tienes que aprender por ti mismo, escogiendo tu propio código descuidado (hasta que se "enderece") O estudiar los códigos de otras personas. Hice tu código por ti. - ¿Le servirá de algo?

P.D. Como he dicho antes, no es necesario normalizar los precios para un probador. Pero una de las posibles razones del error "Precio incorrecto" al ejecutar una orden comercial puede ser el deslizamiento, que tiene 3 * Punto (cuando se convierte en int) = 0.

Archivos adjuntos:
rcjipewc.mq4  6 kb
 
¡¡¡¡¡Gracias!!!!!
 
san44es:

Amigos, un consejo.

Hay una función personalizada que cuenta el precio mínimo de la 5ª barra del marco temporal de fondo, ¿cómo puedo hacer que cuente el precio de un marco temporal específico?

iLow
 

Gracias. El código es más sencillo ahora. Ciertamente, es más sencillo.

¡Gracias por el deslizamiento!

El bucle for (int A = 0; A <100 ; A++) // no necesitamos esta búsqueda de barras, sólo me sirve para ver en el registro que el EA ha colocado órdenes exactamente donde están las flechas o donde está el número de error. La cuestión es que no había señales en el probador. Vi en las mismas impresiones que las variables flecha1 y flecha2 sólo eran cero en todas las barras y así salí de la situación.

Por supuesto, el ciclo puede contarse en ambos sentidos. Pero de nuevo veo el error 129 en todas partes. Veo las flechas del indicador en el gráfico y quiero asegurarme de que las órdenes han sido colocadas por ellos. ¡Por lo tanto, en una captura de pantalla en la flecha de inicio variables 1and2 son iguales, más adelante en 17 barras de cero, el orden se establece - okey, super! ¡¡¡¡A continuación, los mensajes de la impresora que hay una venta con tal y tal garrapata, y las flechas en las barras posteriores son iguales - gran!!!!