[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 141

 
artmedia70:

IMHO, es mejor encontrar su orden y ver si está en el mercado o cerrada, y cómo se cerró, en la toma, la parada o manualmente. A partir de aquí puedes empezar a bailar en diferentes direcciones.

Entonces todo será preciso. Pero las variables globales pueden perderse...


¿A qué te refieres con "perder variables"? ¿Te refieres a encontrarlo para que el EA lo compruebe también?
 
Begemot7:
Por favor, aclare lo que quiere decir con perder variables? ¿Se refiere a encontrarlo también para que el EA lo compruebe?

En todos los EAs para trading real y demo, no almaceno ningún dato importante sobre órdenes y posiciones en variables. Lo máximo que puedo escribir los datos, que son necesarios para la lógica del EA, en el comentario de la orden. Cuando necesito saber si hay posiciones, cuántas hay, si hay órdenes, posiciones cerradas, cómo se cerraron, ejecuto un bucle sobre las posiciones/órdenes del mercado o los datos históricos, busco la orden que necesito y recupero la información que necesito. Así, no almaceno toda la información importante en variables, ya que puede perderse durante un apagado inesperado del ordenador. Siempre se puede recuperar más tarde. Intenté almacenarlo en las variables globales del terminal - resultó que la información no siempre se guarda allí cuando el ordenador se bloquea/colapsa. Y para mí, supervisar constantemente la escritura de información fresca es demasiado problema... Me resulta más fácil encontrar lo que necesito en el momento en que lo necesito.
 
PapaYozh:

Puede obtener las coordenadas del punto sobre el que se ha dejado caer el indicador utilizando las funciones

WindowXOnDropped()

WindowYOnDropped()

Precio y hora:

WindowPriceOnDropped()

WindowTimeOnDropped()


Intentaré incorporarlo. Un ejemplo sería similar...
 

Me encuentro ante una situación extraña. ¿Podría decirme por favor...

Hay tres EAs auto-escritos. La estrategia es la misma, sólo que la aplicación es diferente, según el instrumento. Pares: EURUSD, EURGBP y USDJPY. Tengo una buena relación de trabajo con los dos primeros, pero el último no funciona. El broker es FX-Trend. Mi cuenta es una mini con el lote mínimo 0,01 (se ha utilizado hasta ahora para las pruebas).

Al mismo tiempo: todo está bien en una cuenta demo. Cuando lo ejecuto en el probador, las operaciones se abren en la misma cuenta real del probador. Pero no lo hacen durante el comercio real. Los marcadores del gráfico de apertura de la orden (y todos los demás marcadores) se colocan con éxito. No hay absolutamente nada en los registros.

Todo se ejecuta en un VPS.


Creo que esta es toda la información. Agradecería cualquier pista sobre la dirección en la que hay que cavar.

 
Sepulca:

Mejor así (en caso de que el EA se reinicie):



Si sólo hay una orden, podemos prescindir de ella.


if(PedidosTotal()<1)

{

}

......

 
artmedia70:
No almaceno ningún dato importante de órdenes y posiciones en variables en todos los EAs para real y demo. Lo máximo que puedo escribir los datos necesarios para la lógica del EA es en el comentario de la orden. Cuando necesito saber si hay posiciones, cuántas hay, si hay órdenes, posiciones cerradas, cómo se cerraron, ejecuto un bucle sobre las posiciones/órdenes del mercado o los datos históricos, busco la orden que necesito y recupero la información que necesito. De este modo, no almaceno toda la información importante en variables, ya que puede perderse durante un apagado inesperado del ordenador. Siempre se puede recuperar más tarde. Intenté almacenarlo en las variables globales del terminal - resultó que la información no siempre se guarda allí cuando el ordenador se bloquea/colapsa. Y para mí, supervisar constantemente la escritura de información fresca es demasiado problema... Me resulta más fácil encontrar lo que necesito en el momento en que lo necesito.

Así es... ...para estar más tranquilos. Lo correcto es, por supuesto, revisar todos los pedidos. Pero este es un caso específico. Si hemos perdido GlobalVariables, deberíamos dejar esta empresa de corretaje. Las GlobalVariables no se almacenan en su ordenador, sino en la empresa de corretaje hasta tres meses si las deja intactas. ¿O me equivoco?
 
Parece que lo he descubierto por mí mismo :). Es cierto lo que dicen: lo principal es formularlo. En general, cuando se ejecuta en el mercado, fijamos el stop y tomamos posiciones a cero. Y luego lo fijamos correctamente. Tal vez alguien lo encuentre útil...
 
Sepulca:
Así es... más tranquilidad. Lo correcto, por supuesto, es revisar todos los pedidos. Pero este es un caso específico. Y si GlobalVariables se pierde, deberíamos dejar esta empresa de corretaje.

¿Qué quieres decir? ¿Esta empresa de corretaje hace esto a propósito? Me han dicho que MT4 es un terminal que puede ser fácilmente controlado por el broker y por lo tanto puede haber muchas trampas, ¿quién ha oído hablar de ello?
 
Begemot7:

Es decir, ¿el DC hace esto a propósito? Me han dicho que MT4 es un terminal que puede ser fácilmente controlado por un broker y por lo tanto es posible hacer muchas trampas, ¿quién ha oído hablar de esto?


Realmente no lo entiendo. ¿Qué sentido tiene que DC destruya sus variables globales, a menos que, por supuesto, haya acumulado un montón de ellas x....... Cita de la documentación:
"Las variables globales del terminal de cliente no deben mezclarse con las variables declaradas en el ámbito global del programa MQL4. Las variables globales existen en el terminal de cliente durante 4 semanas desde el último acceso, después de lo cual se borran automáticamente. El acceso a una variable global no sólo consiste en establecer un nuevo valor, sino también en leer el valor de la variable global.Las variables globales del terminal de cliente son accesibles simultáneamente desde todos los programas MQL4 lanzados en el terminal de cliente. "Si trabajas con un lote de 0,01 o 0,1, nadie te oprimirá, porque es un trifle.... Pero si abrió 100 lotes en la cuenta real, más vale que esté preparado para luchar por su dinero.

 

¡¡¡Necesito ayuda de los profesionales!!! Ya me he devanado los sesos con este código... Hay 4 buffers 2 de ellos funcionan correctamente (Buffer &buffer2), pero los otros 2 no. Cuando se produce una determinada condición se llena el buffer, cuando este valor sube para uno y baja para el segundo, los buffers se eliminan (se ponen a cero), pero los 2 buffers restantes siguen colgados en el gráfico. ¿Puede decirme cómo solucionarlo?

      //--- Функция расчета буферов CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer1[], double& ExtMapBuffer2[], double& ExtMapBuffer3[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,lastlow1,lasthigh1;
   int count = iBars(pair,tf)-ExtDepth;

   for(shift=count; shift>=0; shift--)
     {
     //--- Расчитываем буфер BuferUp
      val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
       
          ExtMapBuffer[shift]=val;
      //--------------------------------------------------------------------    
          
     //--- Расчитываем буфер BuferUp2
      if (ExtMapBuffer[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMin(val,MathMin(iHigh(pair,tf,shift+1),iHigh(pair,tf,shift-1)));}
      if(ExtMapBuffer[shift+back]==0.0) ExtMapBuffer1[shift+back]=0.0;
      } 
          ExtMapBuffer1[shift]=val;
      //--------------------------------------------------------------------    
          
      //--- Расчитываем буфер BuferDn
      val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
     
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer2[shift]=val;
      //-------------------------------------------------------------------
      
      //--- Расчитываем буфер BuferDn2
      if (ExtMapBuffer2[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMax(val,MathMax(iLow(pair,tf,shift-1),iLow(pair,tf,shift+1)));}
      if(ExtMapBuffer2[shift+back]==0.0) ExtMapBuffer3[shift+back]=0.0;
      }
      ExtMapBuffer3[shift]=val;
      //-------------------------------------------------------------------
      
     }
           
   // Отсееваем ненужные значения
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=count; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=iBars(pair,tf)-1; shift>=0; shift--)
   {
      if(shift>=count) ExtMapBuffer[shift]=0.0;
         else
         {
            res=ExtMapBuffer2[shift];
            if(res!=0.0) ExtMapBuffer2[shift]=res;
         }
   }
}

Razón de la queja: