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

 
Hola ! ¿Hay algún robot basado en el indicador cocodrilo + EMA (233) + Estocástico? ¿Y cuál es su opinión sobre la estrategia?
 
Lizaku:
Hola ! hay un robot basado en Alligator + EMA (233) + indicador estocástico ? si me puedes dar un enlace . ¿Y cuál es su opinión sobre la estrategia?

La media móvil es claramente innecesaria aquí, porque el Alligator ya consta de tres medias móviles. Eso deja a Alligator + Stochastic:

Alligator + Estocástico

 
¿Cómo comprobar en el script/asesor el hecho del fin del cálculo del indicador, cuál de ellos es llamado? Hasta ahora he tenido que poner Sleep(), pero he perdido medio día sin entender por qué los valores de los buffers son cero...
 
Siempre es medianoche.
 
Aleksey Vyazmikin:
¿Cómo compruebo en el script/advisor si el cálculo del indicador ha terminado y cuál de ellos es llamado? Hasta ahora he tenido que poner Sleep(), pero he perdido medio día sin entender por qué los valores de los buffers son cero...

Utilizo el siguiente ciclo

 int n = 0;
    do
     {
      // Пытаемся получить нужное значение;
      if(значение не получено)
       {
        n++;
        Sleep(100);
       }
     }
    while(значение не получено && n < 7 && !IsStopped());
 
Alexey Viktorov:

Utilizo un ciclo como este.

Gracias. Esperaba que hubiera una herramienta estándar para esto, pero no entiendo por qué hay que llenar los búferes con ceros y luego poner los valores calculados - daría un error de copia del búfer y estaría bien...

 
Aleksey Vyazmikin:

Gracias. Esperaba que hubiera una herramienta interna para esto, pero no está claro por qué hay que llenar los búferes con ceros y luego poner los valores calculados allí - daría un error de copia de búfer y estaría bien...

Tengo herramientas internas, una vez traté de averiguarlo, pero sin éxito. Ni siquiera recuerdo ahora en qué sección de la documentación se menciona. Algo relacionado con la sincronización, si no recuerdo mal.

 

Buenas tardes, estoy escribiendo un indicador basado en líneas de Bollinger de 5 bandas, como paso final empecé a escribir condiciones para formar un patrón en relación a las líneas del indicador, pero durante las pruebas obtengo 2 variantes: o bien la alerta se cierra de alguna manera, o no pasa nada. Aquí hay un fragmento:

¿Puede decirme qué se puede arreglar aquí, si es que hay algo que arreglar?

int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const datetime& time[],     // Time
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
 {
 
//----     
//--- переменные
   int pos; // позиция
   static datetime prevtime = 0;
   int shift1;
   int shift2;
   int shift3;
   string pattern, period;
   int setPattern = 0;
   int alert = 0;
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;   
  
//----

//----   
//--- check for bars count - проверка колчества баров
   if(rates_total<ExtPlotBegin)
      return(0);
//--- начало вычисления
   if(prev_calculated>1) pos=prev_calculated-1;
   else pos=0;
//--- главный цикл
   for(int i = pos ; i < rates_total;i++)
    {
      int shift = 0;
      shift1 = shift + 1;
      shift2 = shift + 2;
      shift3 = shift + 3;      
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
      //--- middle line
      ExtMLBuffer[i]=SimpleMA(i,ExtBandsPeriod,close);
      //--- calculate and write down StdDev
      ExtStdDevBuffer[i]=StdDev_Func(i,close,ExtMLBuffer,ExtBandsPeriod);
      //--- upper line
      ExtTLBuffer[i]=ExtMLBuffer[i]+ExtBandsDeviations*ExtStdDevBuffer[i];
      //--- mediumH line
      ExtMDHBuffer[i]=ExtMLBuffer[i]+ExtBandsDeviationsM*ExtStdDevBuffer[i];
      //--- mediumL line
      ExtMDLBuffer[i]=ExtMLBuffer[i]-ExtBandsDeviationsM*ExtStdDevBuffer[i];  
      //--- lower line
      ExtBLBuffer[i]=ExtMLBuffer[i]-ExtBandsDeviations*ExtStdDevBuffer[i];
     
      // Импульсная свеча от нижней границы Боллинджера
        if(((O <= H) && (H <= ExtMDLBuffer[i])) && ((L >= C) && (C <= ExtBLBuffer[i])))
        {
            Alert("Pin up!");
            PlaySound ("UpperBandAlert.wav"); 
         }
            Sleep(5000);
    }                  
//---- OnCalculate done. Return new prev_calculated. Расчет закончен, возврат к новым предыдущим барам
   return(rates_total);
  }
//+-
 

Hola.

Volumen de la primera posición =0,1, última =0,2, ¿cómo obtengo el volumen de la última posición =0,2?

En la cuenta de cobertura este es el caso:

double Lot_pos_b()
  {
   int total=0;
   double lot=0;
   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               lot=m_position.Volume();
              }
//---
   return(lot);
  }
En una cuenta de compensación, ¿cómo puedo obtener el lote? esta función devuelve 0,3 en lugar de 0,2.
 
lil_lil:

Hola.

Volumen de la primera posición =0,1, última =0,2, ¿cómo obtengo el volumen de la última posición =0,2?

En una cuenta de cobertura, es así:

En la cuenta de compensación, ¿cómo se obtiene el volumen del lote? esta función devuelve 0,3 en lugar de 0,2.

Ver las operaciones que pertenecen a la posición y ver su volumen.

Simplemente imprima todas las operaciones encontradas de una posición (las propiedades de cada posición) - averigüe lo que necesita buscar allí.

Razón de la queja: