Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 573

 
¡Hola!
Posiblemente de https://ru.investing.com/tools/correlation-calculator
¿Es posible transferir la información al horario?
¿Cómo se puede hacer esto?
Gracias de antemano.
 
Irina Dymura:
¡Hola!
Posiblemente de https://ru.investing.com/tools/correlation-calculator
¿Es posible transferir la información al horario?
¿Cómo se puede hacer esto?
Gracias de antemano.
Prueba conWebRequest().
 
Ihor Herasko:

Sí. No hay razón para traducir el tiempo en cadena, ya que el tiempo es un número de segundos. Este número es mucho más fácil y rápido de trabajar que las cadenas.

Has corregido una cosa y has estropeado otra).

En la segunda parte en lugar de:

volver:

Tenías esa línea correcta en tu anterior intento.


Gracias por las respuestas. He probado ambas opciones.

No veo cuál es la pega: sigue entrando a saco al cerrar en un tope:

lil_lil:

Di tu condición en voz alta y verás lo que pasa)

if ( TimeSeconds(TimeCurrent()) - TimeSeconds(OrderCloseTime()) > TimeSeconds(30*60) )
if ( TimeCurrent() -OrderCloseTime() > 30*60 )

De hecho, hay != condición en todas partes, es decir, lo contrario > debe estar allí, si he entendido bien lo que quieres decir. Pero todas las variantes corrieron - todavía funciona.

 

Ayudar a entender la lógica, encontrar el error

Comentado el código en detalle.

Necesito que dibuje fractales con un punto, con un tipo de "zigzag", para que los fractales inferiores superiores vayan en secuencia y así sucesivamente.

Pero como resultado, los fractales repetidos aparecen en el gráfico de todos modos

La base está tomada del indicador fractal estándar. Captura de pantalla de abajo con el fractal repetido en el periodo 5

//+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_color1  Gray
#property indicator_color2  Gray
#property indicator_label1  "Fractal Up"
#property indicator_label2  "Fractal Down"
bool high_f, low_f, lastIsUpper = true, lastIsLower = true;
int lastLowerIndex, lastUpperIndex;
//---- input data
input int period = 5;
int per = period;
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int    ExtArrowShift=-10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
  if(per % 2 == 0) per++; //период фракталов только нечетный
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//---
   if(rates_total < per)
      return(0);
//---
   if(prev_calculated < per + (per - 1) / 2)
     {
      limit = (per - 1) / 2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit = rates_total - per;
   for(i = limit; i < rates_total - (per + 1) / 2 && !IsStopped(); i++)
     {
      high_f = true; low_f = true;//с самого начала считаем что есть фрактал в i свече
      for(int g = 1; g < (per+1)/2; g++){//проверка на наличие фрактала (одновременной справа и слева от свечи с возможным фракталом)
         //---- Upper Fractal
         if(high[i-g] >= high[i] || high[i+g] > high[i]){//если одно из условий выполнено (high какой либо свечи справа или слева выше чем исследуемый), то фрактала сверху нет
            ExtUpperBuffer[i] = EMPTY_VALUE;
            high_f = false;            
         }        
         //---- Lower Fractal
         if(low[i-g] <= low[i] || low[i+g] < low[i]){ //если одно из условий выполнено, то фрактала снизу нет        
            ExtLowerBuffer[i] = EMPTY_VALUE;
            low_f = false;   
         }  
      }  
       //устанавливаем верхний
      if(high_f){//если фрактал все таки есть (из цикла-проверки выше)
         if(lastIsLower){//еси последний фрактал был нижний
            ExtUpperBuffer[i] = high[i];//устанавливаем сверху
            lastUpperIndex = i;//записываем индекс в буффере установленного
            lastIsLower = false;//говорим что последний - не нижний
            lastIsUpper = true;//а верхний
         }else{
            if(lastIsUpper){//если последний верхний (а мы пытаемся установить верхний)
               if(high[i] > ExtUpperBuffer[lastUpperIndex]){//если устанавливаем выше предыдущего
                  ExtUpperBuffer[lastUpperIndex] = EMPTY_VALUE;//удаляем предыдущий
                  ExtUpperBuffer[i] = high[i];//устанавливаем новый
                  lastUpperIndex = i;//записываем индекс нового
               }
            }
         }
      }
      //аналогично для фрактала снизу
      if(low_f){
         if(lastIsUpper){
            ExtLowerBuffer[i] = low[i];
            lastLowerIndex = i;
            lastIsLower = true;
            lastIsUpper = false;
         }else{
            if(lastIsLower){
               if(low[i] < ExtLowerBuffer[lastLowerIndex]){
                  ExtLowerBuffer[lastLowerIndex] = EMPTY_VALUE;
                  ExtLowerBuffer[i] = low[i];
                  lastLowerIndex = i;
               }
            }
         }
      }   
    }
  
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+
Archivos adjuntos:
6gvzow.JPG  149 kb
 
¿Pueden aconsejar cómo obtener el volumen de posiciones abiertas en MQL4, si SYMBOL_SESSION_INTEREST no es compatible? Gracias.
 
kotaries:
¿Pueden aconsejar cómo obtener el volumen de posiciones abiertas en MQL4, si SYMBOL_SESSION_INTEREST no es compatible? Gracias.

Recorrer todas las posiciones y calcular su volumen total:OrderLots()

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

No puedo entender por qué se devuelve un determinado valor de prev_calculated?

¿Cómo se calcula en primer lugar?

 
Roman Sharanov:

No puedo entender por qué se devuelve un determinado valor de prev_calculated?

¿Cómo se calcula en primer lugar?

El sistema llevará un registro de esto. De hecho, sólo debería interesarle su valor, no cómo se calcula internamente.
 
Roman Sharanov:

No puedo entender por qué se devuelve un determinado valor de prev_calculated?

¿Cómo se calcula?

Es el valor devuelto por OnCalculate() en la última iteración. Esto se indica explícitamente en la documentación:

Hay que tener en cuenta la relación entre el valor devuelto por OnCalculate() y el segundo parámetro de entrada prev_calculado. El parámetro prev_calculado, cuando se llama a la función, contiene el valordevuelto por OnCalculate() en la llamadaanterior. Esto permite economizar los algoritmos de cálculo del indicador personalizado para evitar cálculos repetidos para aquellas barras que no han cambiado desde la anterior llamada a esta función.

 

La tarea consiste en encontrar la barra con el mínimo cierre

for(int x=0; x<=xBars -1; x++)

{

contra++;

// Print(Close[x],",",counter);

int h = ArrayMinimum(Close[x]);

if(contador > 20) break;

}

El compilador jura en Close

Razón de la queja: