Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 442

 

Buenas noches a todos,

1.

Estrategia - barra aparecida, establecer orden pendiente con stoploss y takeprofit (sl, tp), nada más.

Supongamos que en la barra actual, al cabo de un tiempo, aparecerá un precio para que se active la orden, más tarde vendrá el precio sl, y luego el precio tp .

Por favor, intente explicar - supongamos que el precio de apertura de la nueva barra estará en algún lugar entre los límites de precio sl y tp. ¿Cómo se realiza este cálculo?

Lógicamente, no puede, porque el probador sólo tiene el precio de apertura de la siguiente barra? Y no es igual al precio especificado en la condición para la activación de la orden pendiente, lo que significa que la orden no debe activarse.

Pero: durante la ejecución del probador, las operaciones se ejecutan de alguna manera y los stops se activan. ¿En qué sentido?

2.

el probador crea fxt con cada inicio. y esto es tiempo. No he podido encontrar ninguna configuración que sugiera evitar esto... En idea: crearlo una vez y si no cambio nada, usar este archivo, pero no, el terminal lo reescribe

 
¿Puedes decirme si el EA necesita un tick para ejecutar init()?
 
-Aleks-:
¿Puedes decirme si el EA necesita un tick para ejecutar init()?

No. No lo haces. Aquí está el código para ayudarle a ver esto:

//+------------------------------------------------------------------+
//|                                                  test_expert.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright  "Copyright 2015, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
   Print(__FUNCTION__);
   return(INIT_FAILED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print(__FUNCTION__);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Print(__FUNCTION__);
  }
//+------------------------------------------------------------------+
Adjúntalo a la carta y mira qué funciones están trabajando en el fin de semana.
 
-Aleks-:
¿Puedes decirme si el EA necesita un tick para ejecutar init()?
No lo creo.
 
Karputov Vladimir:

No. No lo haces. Aquí está el código para ayudarte a verlo:

Adjúntalo a la carta y comprueba qué funciones funcionan durante el fin de semana.
Tapochun:
No lo creo.
Gracias por la rápida respuesta. Entonces no entiendo por qué no funciona - no hay impresión...
 
-Aleks-:
Gracias por su pronta respuesta. Entonces no entiendo por qué no funciona - no hay impresión...
¿Dónde está su impresora? ¿Puedo tener el código para reproducirlo?
 
Karputov Vladimir:
¿Y cuál es la situación de su impresora? ¿Puedo tener el código, para reproducirlo?

Resulta que la inicialización no se produce cuando se carga el terminal, pero sí cuando se cambia el marco temporal.

Tengo que comprobar si la lectura de un archivo por una docena de EAs durante la inicialización no sería un problema...

Estoy utilizando una clase.

int init()
  {
//Автоматическая настройка
   if(Use_SetupLoad==true)
     {
      CSVReader FileLoads(FileLoadSetup);
      FileLoads.SetDelimiter(';');
      FileLoads.SetCommon(true);
      int StrokaSetup=0;
      if(FileLoads.Load(1))
        {
         PrintFormat("File %s loaded. Total rows=%d, Total columns=%d",FileLoads.FileName(),FileLoads.TotalRows(),FileLoads.TotalColumns());
         
         for (int i=1;i<30; i++)
         //for (int i=1; i<100 || StrokaSetup!=0; i++)
         {
           if (Magic==FileLoads.GetIntValue(i,13))
           {
            StrokaSetup=i ;
            Print ("StrokaSetup=",StrokaSetup);
            break;
            }
         //   if (i==100) i=1;
         //  Print (FileLoads.GetIntValue(i,13));
         }
         /*
         for (int i=1; i<30; i++)
         {
         Print (FileLoads.GetIntValue(i,13));         
         }
         */
         if(StrokaSetup!=0)
           {
            pipsXH=FileLoads.GetIntValue(StrokaSetup,4)/10;
            if (pipsXH>0)
            {
            pMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         typeMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         priceMAH=FileLoads.GetIntValue(StrokaSetup,2);
            
  //          if (pipsXH<0)
  //          PrintFormat("pMAH=%d",pMAH,"typeMAH=%d",typeMAH,"priceMAH=%d",priceMAH,"pipsXH=%d",pipsXH);
            }
            else pipsXH=(-1);
            
            pipsXL=FileLoads.GetIntValue(StrokaSetup,7)/10*(-1);
            if (pipsXL>0)
            {
            pMAL=FileLoads.GetIntValue(StrokaSetup,6);
     //       typeMAL=FileLoads.GetIntValue(StrokaSetup,3);
     //       priceMAL=FileLoads.GetIntValue(StrokaSetup,2);
            
      //      PrintFormat("pMAL=%d",pMAL,"typeMAL=%d",typeMAL,"priceMAL=%d",priceMAL,"pipsXL=%d",pipsXL);
            }
            else pipsXL=(-1);
                        
            pMAT=FileLoads.GetIntValue(StrokaSetup,9);
      //      typeMAT=FileLoads.GetIntValue(StrokaSetup,3);
      //      priceMAT=FileLoads.GetIntValue(StrokaSetup,2);
      //      PrintFormat("pMAT=%d",pMAT,"typeMAT=%d",typeMAT,"priceMAT=%d",priceMAT);
            
            lot=FileLoads.GetDoubleValue(StrokaSetup,11);
      //    PrintFormat("pMAH=%d",pMAH,"pipsXH=%d",pipsXH,"pMAL=%d",pMAL,"pipsXL=%d",pipsXL,"lot=%d",lot);            
            Print("Magic=",Magic," pMAH=",pMAH," pipsXH=",pipsXH," pMAL=",pMAL," pipsXL=",pipsXL," lot=",lot);            
            
           }

        }
      else PrintFormat("Error in loading data from %s",FileLoads.FileName());
     }
///Конец автоматической настройки///  
   return(INIT_SUCCEEDED);
  } 

Una pieza de clase responsable de la lectura de un archivo

//+------------------------------------------------------------------+
//| Load                                                             |
//+------------------------------------------------------------------+
bool CSVReader::Load(int start_line)
  {
   int filehandle=FileOpen(m_filename,FILE_CSV|FILE_READ|FILE_ANSI|FILE_SHARE_READ,'\n');
   if(filehandle==INVALID_HANDLE)
     {
      Alert("Error in open of file ",m_filename,", error",GetLastError());
      return(false);
     }
//---
   int line_index=0;
   while(!FileIsEnding(filehandle))
     {
      string str=FileReadString(filehandle);
      //--- skip 0th row
      if(line_index>=start_line)
         if(str!="")
           {
            if(line_index==1) AddData(str,true);
            else AddData(str,false);
           }
      line_index++;
     }
//---
   FileClose(filehandle);
   return(true);
  } 
 
-Aleks-:

Resulta que la inicialización no se produce cuando se carga el terminal, pero sí cuando se cambia el marco temporal.

Tengo que comprobar si la lectura de un archivo por una docena de EAs durante la inicialización no sería un problema...

Estoy utilizando una clase.

Parte de la clase responsable de la lectura de archivos

Así que hay un montón de comprobaciones y condiciones en su código antes de la impresión. Revise en modo de depuración y compruebe lo que no funciona.
 
Karputov Vladimir:
Así que hay un montón de comprobaciones y condiciones en su código antes de la impresión. Vaya al modo de depuración y compruebe qué es lo que no funciona.
En el probador todo funciona - pero no hay impresiones cuando se carga el terminal - eso es lo que me confundió.
 
-Aleks-:
En el probador, todo funciona - pero no hay impresoras cuando se carga el terminal - eso es lo que me confundió.
Así que vale la pena añadir más impresoras y ver hasta dónde llega el algoritmo.