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

 
A continuación tienes que eliminar una venta en la flecha roja y colocar una compra. ¡¡¡De repente se borran dos pedidos!!! ¡¡¡Dos pedidos, el que está claramente fijado y otro que no parecía estar ahí!!! Muy bien, al diablo con eso... Aparece el error 129 y no hay orden. Siento haber desconcertado así a todos los buenos ayudantes voluntarios.
 
//+------------------------------------------------------------------+
//|                                                     советник.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 int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


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),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, 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));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, 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);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
¡Espera, perdona, que voy a poner los resbalones por todas partes!
 
Dimka-novitsek:
A continuación tienes que eliminar una venta en la flecha roja y colocar una compra. ¡¡¡De repente se borran dos pedidos!!! ¡¡¡Dos pedidos, el que está claramente fijado y otro que no parecía estar ahí!!! Muy bien, al diablo con eso... Aparece el error 129 y no hay orden. Me perdonarás por desconcertar a todos los buenos ayudantes voluntarios...

Dimka - dame tu código en mi mensaje personal - voy a trastear - no tengo nada que hacer mientras se prueba mi"grial" ... y mi cerebro necesita un entrenamiento... Y no olvides la indulgencia...
 

Hola a todos, soy un novato, así que por favor no me pateéis mucho. Se han acumulado algunas preguntas.

1) ¿Dónde puedo descargar el historial completo de cotizaciones? Tengo entendido que en el terminal MT4 las cotizaciones de MetaQuotes se descargan por defecto pero hay un hueco desde enero de 2012 hasta octubre de 2012 y no se cierra al volver a descargar. Esto pone en duda toda la historia a partir de ahí.

2) El historial tiene fechas anteriores a 1999, los datos para ellos algunos extraños, muy pocos, incluso por minutos. ¿Alguien los tiene en cuenta o los borra?

3) Y alguna otra tontería está ocurriendo con la prueba. Decidí intentar escribir un simple Asesor Experto: Comprar cuando Open[1]<MA1 && Close[1]>MA1. Al realizar la prueba, la MA (exponencial) siempre muestra valores diferentes según la fecha de la prueba inicial. En ese sentido, cuanto más largo es el periodo МА (por ejemplo, 1000-1200) mayor es el error ¿Cuál es el problema?

 
Dimka-novitsek:

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!!!!

Sobre el ciclo:

for (int A = 0; A <100 ; A++)

Antes de hacer algo (escribir código), hay que tener una idea clara de lo que se quiere conseguir. Este indicador aparece en cada tic, y puedes tener un esquema completo de sus lecturas. De esta forma (bucle) tendrás salida en las variables strela1 y strela2 lecturas en la barra 100 y podrás operar por estas lecturas (último invierno)... :))) No he prestado atención a la vez - usted ha incluido las operaciones de comercio en el bucle de las lecturas de los indicadores - un total P... Por supuesto, tú lo sabes mejor. :)))

 
No, necesito el bucle para ver la entrada/salida, es decir, para probar el robot. Cómo hace los pedidos, cómo se equivoca. Bueno, no se prueba en el probador...
 
Dimka-novitsek:
No, necesito el bucle para ver la entrada/salida, es decir, para probar el robot. Cómo hace los pedidos, cómo se equivoca. No se prueba en el probador...

Qué puedo decir - GENIAL... Buena suerte.

P.S. En mi código encontré un pequeño error en relación con el cambio de dirección de la enumeración de los pedidos, incluso reduje el código, así como hice un intento de crear optimizabilidad en el probador (compruébelo usted mismo).
Y tengo la sospecha de que no lees correctamente los datos del indicador. El indicador tiene varios topes (4 en mi versión). Algunos, como los que dibujan flechas, tienen un valor SÓLO donde está la flecha. Para buscar señales en dichos búferes, es necesario organizar un bucle (while()) con la condición de que el valor de retorno no sea igual (en mi variante EMPTY_VALUE) a un valor "vacío". Cuando no hay "flechas" (en estos búferes), hay que buscar la señal comparando el valor de retorno con el precio.

Archivos adjuntos:
lxvhlxyx.mq4  5 kb
 

¡Buenos días o noches! Una pregunta para los desarrolladores de mt4 y todos los demás también.

¿Cuáles son los requisitos mínimos del sistema para el cliente MT?

Quiero ejecutarlo en mi viejo hardware: Athlon 800mg, 512mb, XP SP3. Cuando ejecuto MT 4 o 5, se apaga después de 2 segundos. Está claro que el problema no está en el bobinado ni en el hardware, este hardware funciona con Visual Studio con depurador (yo mismo soy programador), y la excepción no se produce en el sistema (ya que mi depurador no funciona). Supongo que al propio cliente no le gusta algo y por eso se cierra. Así que la pregunta, ¿cuál es la razón y lo que mt no le gusta, realmente la frecuencia de la CPU ? ))

 
Dimka-novitsek:
¡Espera, perdona, que voy a poner los resbalones por todas partes!
Dimitri, guárdate tus pensamientos y publica tus preguntas aquí.