[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 126

 
agat8430:


Entonces dime cómo editar el código para que no parezca hackeado si entiendes lo que digo. Es mi primera vez en el foro, y he recibido una hermosa respuesta.

"Los genios tienen una respuesta genial".


Dé a las variables nombres legibles.
 
hoz:


No, no sin una parada. Acabo de publicar un trozo. Aquí está mi función de equilibrio:

La línea muestra claramente que si el tope calculado es igual al que ya tiene, ¡no habrá ninguna modificación! ¿Verdad? ¿Así que el cheque estaba inicialmente allí? Pero el error 1 aparecía constantemente, hasta que introduje otra condición en el inicio antes de la función de modificación:

Por eso .... eso es lo que quiero entender. Creo que he descrito todo a fondo.

Esta función se utiliza para todas las modificaciones, como la fijación de SL y TP, el desplazamiento de posiciones y órdenes al nivel inferior, el arrastre con intentos y la comprobación de errores.

Y el inicio sólo tiene que prescribir laselección de la posición, las condiciones y las medidas de precaución. Esta es la función:

void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }
Es pequeño, pero es grande.
 
borilunad:

Para los recién llegados, en primer lugar:

Navegador del foro y respuestas a las preguntas más frecuentes. Lectura muy recomendada.( 1 2 3 4 5 6 ) 51 18.02.2011 PREGUNTAS FRECUENTES


Gracias. Lo leeré sin duda.

En el mundo no falta gente buena.

 
hoz:

Dé a las variables un nombre "legible".


Quiero modificar no todas las órdenes abiertas, sino sólo el inicio y la última orden T/P. Ayúdame. Aquí está el código

 /* Так и до бана не далеко */
 

Hola a todos. Tomo los valores del indicador en una ventana separada de una barra ya formada (es decir, la barra 1) que cuento una vez en la barra 0 en su primer tick. Todo funciona rápida y correctamente.Pero si apago el ordenador y después de algún tiempo para volver a encenderlo, los indicadores siguen funcionando correctamente, pero sus valores en el momento en que el ordenador estaba apagado, sólo hay un lugar vacío. es decir, hay valores de los indicadores antes y después de que el ordenador se encienda. Pero sólo cambiar de TF a TF - todos los valores "desaparecidos" aparecen. Losindicadores son estándar - CCI, AO, etc. Los códigos fueron tomados de los foros, los estoy adjuntando, por favor expliquen en qué me equivoco y qué no entiendo.



      Код №1
        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);
 
  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }
//--------------------------------------------------------------------  



        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}


      
          Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------             
   
    Last=New;
   }     
//----
   return(0);
  }
//+------------------------------------------------------------------+




       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

 
borilunad:

Tengo una función para todas las modificaciones, como la fijación de SL y TP, la transferencia a B/S, la búsqueda de posiciones y órdenes con intentos y comprobaciones de errores.

Sólo tengo que prescribir la selección de posiciones, las condiciones y las advertencias en el inicio. Esta es la función:

¡Pequeño pero inteligente!


Wow :) Gracias. Tendré que echar un vistazo.
 
agat8430:


Quiero modificar no todas las órdenes abiertas sino sólo la inicial y la última en T/P quiero hacer un EA para mí.

En realidad, habría que "cribar" todas las órdenes cerradas, sin contar el mago y el símbolo, por supuesto. A continuación, debe seleccionar la orden inicial y la última orden a modificar.

El OrderSelect (g_pos_300, SELECT_BY_POS, MODE_TRADES); - esta es la última orden.

Y el OrderSelect(0, SELECT_BY_POS, MODE_TRADES); - esta será la primera orden.

Esta es una rama con preguntas sobre la lengua, y he respondido a su pregunta. Los robots no se dedican al rediseño aquí. Pero puedes encontrar todo lo necesario para incluirlo en el Asesor Experto si tienes una mínima comprensión del lenguaje. Espero que eso haya ayudado...

 
agat8430:


Quiero que no se modifiquen todas las órdenes abiertas, sino sólo el inicio y la última orden T/P. Quiero que no modifique todas las órdenes abiertas, sino sólo la última orden T/P.

Para atrapar los objetos adecuados, utiliza las "Funciones útiles" de Kim para casi todas las ocasiones posibles.

https://www.mql5.com/ru/forum/131859

 
hoz:

En general, las órdenes cerradas deben ser "filtradas", sin contar el mago y el símbolo, por supuesto. A continuación, seleccione la orden inicial y la última orden a modificar.

El OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES); - esta es la última orden.

Y el OrderSelect(0, SELECT_BY_POS, MODE_TRADES); - esta será la primera orden.

Esta es una rama con preguntas sobre la lengua, y he respondido a su pregunta. Los robots no se dedican al rediseño aquí. Pero puedes encontrar todo lo necesario para incluirlo en el Asesor Experto si tienes una mínima comprensión del lenguaje. Espero que eso haya ayudado...

Lo siento, no funcionará. Ni el primero, ni el último.
 
MK07:

Tomo los valores de los indicadores en una ventana separada de una barra ya formada (es decir, de la barra #1) que cuento una vez en la barra #0 en su primer tick. todo funciona rápida y correctamente. pero si apago el ordenador y después de un tiempo lo vuelvo a encender, los indicadores siguen funcionando correctamente, pero sus valores en el momento en que el ordenador estaba apagado no existen.Los códigos son indicadores estándar - CCI, AO, etc. Los tomé de foros, se adjuntan.

Código 1

        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);

  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }

//--------------------------------------------------------------------  

        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }

}

         Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      

   { 

       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

Utilice el botónSRC de la parte superior para pegar el código. Nadie va a hurgar así. Lo he pegado para ti. Puede hacer lo mismo en su puesto.