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

 
Mihail Matkovskij:

Mas será preciso fazer muitos ajustes antes que este código possa ser usado no comércio real...

Sim, eu entendo. É pouco provável que chegue a uma negociação totalmente automática. Você precisa testar completamente suas idéias comerciais durante um longo período de tempo com um grande número de negócios.

Sem o testador é impossível verificar qualitativamente uma idéia, o que é lamentável. A otimização dos parâmetros estratégicos também é lamentável. O testador torna o processo muito fácil.

 
Alexey Viktorov:

Nunca pensei que teria que citá-lo na documentação...

... o tempo de fechamento do pedido é 0...

Obrigado, eu também não pensava assim. Eu não tenho tido freqüência, mas tive que provar um bilhete e nunca tive um problema, provavelmente porque já passei por aqueles que estão no mercado.

 
Igor Makanu:
Alexey Viktorov:

Obrigado!

 

Olá. Tentando encontrar erros de cálculo no indicador. Produz um valor Close[0] (usado abaixo) via Alert. Produz um número com 4 casas decimais, o corretor tem cinco dígitos.

Alert(Close[0]);

O que eu estou fazendo de errado? Obrigado.

 
Oleg Bondarev:

Olá. Tentando encontrar erros de cálculo no indicador. Produz um valor Close[0] (usado abaixo) via Alert. Produz um número com 4 casas decimais, o corretor tem cinco dígitos.

O que eu estou fazendo de errado? Obrigado.

E de onde você chegou perto[0]? Seria interessante dar uma olhada no código fonte, já que você não está em um fórum psíquico... :)

 

Olá, ajude-me a encontrar uma saída - problema!

#define           Pmax 1200   //размер массива по периоду
double           ExtBuffer[];

//+------------------------------------------------------------------+
//| Структура для хранения данных Фибо                               |
//+------------------------------------------------------------------+
struct PosFib
  {
   double            period[Pmax]; 
  };

int OnCalculate(const int rates_total,....)
{
   PosFib BP[Pmax];
   
   for(int p=2; p<Pmax; p++) // отбор по периодам
      for(int b=prev_calculated>Pmax?prev_calculated:Pmax; b<rates_total; b++)
        {
         BP[b].period[p]=sm.d[p-1].m[b];
        }

   return(rates_total);
}

Ao compilar, ele dá um aviso - o tamanho das variáveis locais é muito grande (mais de 512kb)

Quão crítico é este aviso?


 
Top2n:

Olá, ajude-me a encontrar uma saída - problema!

Ao compilar, ele dá um aviso - o tamanho das variáveis locais é muito grande (mais de 512kb)

Favor aconselhar como contornar esta situação!

int OnCalculate(const int rates_total,....)
{
   PosFib BP[];
   ArrayResize(BP, Pmax);
....

SZY: é conveniente usar buffers Indicator para os cálculos (INDICADOR_CALCULATIONS), se você tiver problemas, use-os em seu lugar

 
Igor Makanu:

Obrigado

 

Bom dia a todos!

Pergunta sobre MQL-4.
Existe a função ArrayBsearch( S_L,Ask,WHOLE_ARRAY,0,MODE_ASCEND);. Ele procura por um elemento de uma matriz pré-selecionada. Se a matriz for bidimensional, então esta função procura apenas um elemento na primeira dimensão.

P. Qual função ou construção de linguagem pode ser usada para encontrar o elemento necessário na segunda dimensão da matriz? Eu tenho uma matriz bidimensional com duas fileiras

10,9,8,7,6,5,4,3,2,1

10,3,8,9,2,1,1,1,8,8,6
Como posso encontrar o elemento da matriz com o valor que eu quero na linha inferior em vez da linha superior? Porque o ArrayBsearch( ) busca somente na fileira superior.
Obrigado por sua ajuda.

 
ANDREY:

Bom dia a todos vocês!

Pergunta sobre MQL-4.
Existe a função ArrayBsearch( S_L,Ask,WHOLE_ARRAY,0,MODE_ASCEND);. Ele procura por um elemento de uma matriz pré-selecionada. Se a matriz for bidimensional, então esta função procura apenas um elemento na primeira dimensão.

P. Qual função ou construção de linguagem pode ser usada para encontrar o elemento necessário na segunda dimensão da matriz? Eu tenho uma matriz bidimensional com duas fileiras

10,9,8,7,6,5,4,3,2,1

10,3,8,9,2,1,1,1,8,8,6
Como posso encontrar o elemento da matriz com o valor que eu quero na linha inferior em vez da linha superior? Porque o ArrayBsearch( ) busca somente na fileira superior.
Obrigado pela ajuda.

Na MQL4, eu só tenho este caminho:

//+------------------------------------------------------------------+
//|                                                  FindInArray.mq4 |
//|                                       Copyright 2020, © Cyberdev |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev"
#property version   "1.00"
#property strict

#property script_show_inputs

#define  size1 2 
#define  size2 10

input double value1 = 3;
input double value2 = 8;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
  double array[size1][size2] = {
    {10,9,8,7,6,5,4,3,2,1}, 
    {10,3,8,9,2,1,1,8,8,6}
  };
  
  double bufer[size2];
  
  int i;
  
  int index;
  
  string str;
  
  i = 0;
  for(; i < size2; i++) {
    bufer[i] = array[0, i];
  }
  
  ArraySort(bufer, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  index = ArrayBsearch(bufer, value1, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  str = "";
  
  i = 0;
  for(; i < size2; i++) {
    array[0, i] = bufer[i];
    str += (string)array[0, i] + ((i != size2 - 1) ? ", " : "");
  }
  
  Print("array[0]: {" + str + "}");
  
  Print("value1 array[0]["+(string)index+"]: ", array[0][index]);
  
  
  i = 0;
  for(; i < size2; i++) {
    bufer[i] = array[1, i];
  }
  
  ArraySort(bufer, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  index = ArrayBsearch(bufer, value2, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  str = "";
  
  i = 0;
  for(; i < size2; i++) {
    array[1, i] = bufer[i];
    str += (string)array[1, i] + ((i != size2 - 1) ? ", " : "");
  }
  
  Print("array[1]: {" + str + "}");
  
  Print("value2 array[1]["+(string)index+"]: ", array[1][index]);
}
//+------------------------------------------------------------------+

Resultado:

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: value2 array[1][6]: 8.0

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: array[1]: {1, 1, 2, 3, 6, 8, 8, 8, 9, 10}

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: valor1 array[0][2]: 3.0

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: array[0]: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}


Arquivos anexados:
Razão: