Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 573

 
Olá!
Possivelmente de https://ru.investing.com/tools/correlation-calculator
É possível transferir as informações para o horário?
Como isso pode ser feito?
Agradecemos antecipadamente.
 
Irina Dymura:
Olá!
Possivelmente de https://ru.investing.com/tools/correlation-calculator
É possível transferir as informações para o horário?
Como isso pode ser feito?
Agradecemos antecipadamente.
TenteWebRequest().
 
Ihor Herasko:

Sim. Não há motivo para traduzir o tempo em cadeia, já que o tempo é um número de segundos. Este número é muito mais fácil e rápido de se trabalhar do que as cordas.

Você corrigiu uma coisa e estragou outra).

Na segunda parte, em vez de:

retornar:

Você tinha essa linha correta em sua tentativa anterior.


Obrigado pelas respostas! Eu tentei as duas opções.

Não vejo qual é o senão - ele ainda vai direto para dentro quando se fecha uma parada:

lil_lil:

Diga sua condição em voz alta e você verá o que está acontecendo)

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

Na verdade, lá != condição em toda parte, ou seja, o oposto > deveria estar lá, se eu entendi corretamente o que você quer dizer. Mas todas as variantes funcionaram - ainda funcionam.

 

Ajuda a entender a lógica, encontrar o erro

Comentou o código em detalhes.

Preciso dele para desenhar os fractais com um período, com um tipo "ziguezague", para que os fractais inferiores superiores superiores inferiores se sequenciem e assim por diante.

Mas como resultado, os fractais repetidos aparecem na tabela de qualquer forma

A base é extraída do indicador fractal padrão. Tela abaixo com fractal repetido no período 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);
  }

//+------------------------------------------------------------------+
Arquivos anexados:
6gvzow.JPG  149 kb
 
Você pode aconselhar como obter o volume de posições abertas na MQL4, se SYMBOL_SESSION_INTEREST não for suportado? Obrigado!
 
kotaries:
Você pode aconselhar como obter o volume de posições abertas na MQL4, se SYMBOL_SESSION_INTEREST não for suportado? Obrigado!

Ciclo através de todas as posições e cálculo de seu volume 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...
 

Não consigo entender por que um certo valor de pré_cálculo é devolvido?

Como é calculado, em primeiro lugar?

 
Roman Sharanov:

Não consigo entender por que um certo valor de pré_cálculo é devolvido?

Como é calculado, em primeiro lugar?

O sistema manterá o controle disto. Na verdade, você só deve estar interessado em seu valor, não em como ele é calculado internamente.
 
Roman Sharanov:

Não consigo entender por que um certo valor de pré_cálculo é devolvido?

Como é calculado?

Este é o valor retornado pela OnCalculate() na última iteração. Isto está explicitamente declarado na documentação:

A relação entre o valor retornado pela OnCalculate() e o segundo parâmetro de entrada pré-calculado deve ser notada. O parâmetro pré_calculado, quando a função é chamada, contém o valorretornado pela OnCalculate() na chamadaanterior. Isto permite algoritmos econômicos para o cálculo do indicador personalizado, a fim de evitar cálculos repetidos para aquelas barras que não mudaram desde a chamada anterior desta função.

 

A tarefa é encontrar a barra com o fechamento mínimo

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

{

contador++;

// Imprimir(Fechar[x],",", contador);

int h = ArrayMinimum(Fechar[x]);

if(contador > 20) break;

}

Compilador jura de Fechado

Razão: