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

 

MT4

O que é este item e o que ele faz, não consigo encontrar uma descrição em nenhum lugar?

Como eu o desabilito por padrão?


 
void OnStart()
  {
string text="Hello man";
   string keystr="ABCDEFG";
   uchar src[],dst[],key[];
//--- подготовка ключа шифрования
   StringToCharArray(keystr,key);
//--- подготовка исходного массива src[]
   StringToCharArray(text,src);
//--- вывод исходных данных
   PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- шифрование массива src[] методом DES с 56-битным ключом key[]
   int res=CryptEncode(CRYPT_AES256,src,key,dst);
//--- проверка результата шифрования
   if(res>0)
     {
      //--- вывод шифрованных данных
      PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
      //--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[]
      res=CryptDecode(CRYPT_AES256,dst,key,src);
      //--- проверка результата
      if(res>0)
        {
         //--- вывод дешифрованных данных
         PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
        }
      else
         Print("Ошибка в CryptDecode. Код ошибки=",GetLastError());
     }
   else
      Print("Ошибка в CryptEncode. Код ошибки=",GetLastError());
  }
//+------------------------------------------------------------------+
string ArrayToHex(uchar &arr[],int count=-1)
  {
   string res="";
//--- проверка размера
   if(count<0 || count>ArraySize(arr))
      count=ArraySize(arr);
//--- преобразование в шестнадцатиричную строку
   for(int i=0; i<count; i++)
      res+=StringFormat("%.2X",arr[i]);
//---
   return(res);
  }

Estou tentando executar o exemplo criptográfico do manual, masuso CRYPT_AES256 em vez do métodoCRYPT_DES. O resultado é o erro 4029 após o métodoCryptEncode

 
Dmitri Custurov:

Estou tentando executar o exemplo criptográfico do manual, masuso CRYPT_AES256 em vez do métodoCRYPT_DES. Como resultado, erro 4029 após o métodoCryptEncode

Descobrimos isso. Ele precisa de uma chave mais cuidadosa).

 

Olá!

Sou burro e não consigo descobrir sozinho, por favor, informe qual poderia ser o problema ou pelo menos me aponte na direção certa.

Diferentes indicadores estão começando a mostrar um pedaço diferente de história de forma síncrona. Isso acontece às vezes, não todos os dias.

Pensei que a razão é que os indicadores não processam corretamente o histórico carregado dinamicamente. Eu tentei tudo que diz respeito à atualização correta do indicador sobre o histórico de atualização, não sei o que mais deve ser feito para evitar isto.

Corretor Alpari. MT5 constrói 2363 a partir de 13.03.2020.

As capturas de tela mostram primeiro a versão "falhada".

Em seguida, a versão correta após atualização manual.

//+------------------------------------------------------------------+
bool IsReadyForCalculate(const int rates_total,const int prev_calculated,const datetime &time[])
  {
   //--- подключение терминала и синхронизация данных
   if(TerminalInfoInteger(TERMINAL_CONNECTED))  
      if(!SymbolIsSynchronized(_Symbol) || 
         !SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED))   return(false);
   //--- некорректное значение prev_calculated
   if(prev_calculated<0)                  return(false);
   //---
   if(prev_calculated==0)     prev_time = time[rates_total-1];
   //--- произошли изменения в данных, но prev_calculated не сброшен в 0
   //--- или изменение времени не соответствует одному бару
   if(  (rates_total!=prev_calculated+1 &&
         rates_total!=prev_calculated &&
         prev_calculated!=0) ||
        (time[rates_total-1]>prev_time &&
         time[rates_total-2]!=prev_time))
     {
      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);
     }
   //--- корректный сценарий
   if(  (rates_total==prev_calculated   || rates_total==prev_calculated+1 || prev_calculated==0) &&
        (time[rates_total-1]==prev_time || time[rates_total-2]==prev_time))
     {
      loc_prev_calculated = prev_calculated;
      return(true);
     }
   //--- 
   return(false);       // верну false, пока не знаю, какие варианты ещё могут быть
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   if(!IsReadyForCalculate(rates_total,prev_calculated,time))     return(0);
//---
        // вызов функции зигзага
   
//--- return value of prev_calculated for next call
   prev_time = time[rates_total-1];
   return(rates_total);
  }
//+------------------------------------------------------------------+
Arquivos anexados:
 

Olá.

Eu tenho esta pergunta na MQL5. Como posso forçar a função OnChartEvent() a começar? Existe alguma maneira padrão de fazer isso?

Para este fim, uso a função ChartNavigate() e a executo a partir de OnChartEvent(). Mas funciona instável - quando muitos carrapatos entram, muitas vezes o OnChartEvent() não reinicia após chamar ChartNavigate() por alguma razão. Não consigo entender como está conectado - ChartNavigate() e taxa de chegada de carrapatos, mas isso acontece apesar disso.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
inwinterborn:

Olá!

Sou burro e não consigo descobrir sozinho, por favor, informe qual poderia ser o problema ou pelo menos me aponte na direção certa.


      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);

Talvez eu tenha acrescentado isto recentemente para nada...

Removido
loc_prev_calculated 

Substituiu-o por...

      return(false);

Vou ficar de olho nisso.


Fale-me sobre os indicadores padrão que vêm com o MT5, como eles funcionam? Eles falham como eu fiz nas capturas de tela acima?

 

Bom dia a todos!
Estou dominando a dupla função OnTester() e TesterStatistics( ). Escrevi um código simples para meu testador no MT4, que abre um pedido por dia às 10:00, às 16:00, às 20:00 e à 01:00. Ao final dos testes, a função TesterStatistics( ) retorna o menor valor de balanço (ou seja, o drawdown relativo).

PROBLEMA

TesterStatistics( ) retorna o menor valor de saldo para TODAS as ordens abertas

PERGUNTA

Que construção de linguagem pode ser usada para fazer com que os TesterStatistics() devolvam o menor valor de saldo somente para um pedido aberto em algum momento em particular, por exemplo às 16:00 horas. Neste caso, todas as ordens especificadas no código devem ser testadas simultaneamente. Isso significa que o TesterStatistics deve rastrear a dinâmica de equilíbrio para apenas um pedido aberto às 16:00 e, ao final do teste, exibir o valor mínimo de equilíbrio apenas para o pedido aberto às 16:00.

Eu ficaria muito grato se você pudesse inserir a construção lingüística necessária em meu código. Isso me permitirá compreender rapidamente o algoritmo de solução do meu problema.
Aqui está meu código.

int H;
double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
 
ANDREY:

Bom dia a todos!
Tenho dominado a dupla OnTester() e TesterStatistics( ). Escrevi um código simples para meu testador no MT4, que abre um pedido às 10:00, às 16:00, às 20:00 e à 01:00 todos os dias. No final dos testes, a função TesterStatistics retorna o menor valor de balanço (ou seja, o drawdown relativo).

PROBLEMA

TesterStatistics( ) retorna o menor valor de saldo para TODOS os pedidos em aberto

PERGUNTA

Que construção de linguagem pode ser usada para fazer com que os TesterStatistics() devolvam o menor valor de saldo somente para um pedido aberto em algum momento em particular, por exemplo às 16:00 horas. Neste caso, todas as ordens especificadas no código devem ser testadas simultaneamente. Isto é, TesterStatistics( ) deve rastrear a dinâmica do balanço de apenas um pedido aberto às 16:00 e, ao final do teste, retornar o valor mínimo do balanço para o pedido aberto às 16:00 apenas.

Eu ficaria muito grato se você pudesse inserir a linguagem necessária em meu código. Isto me permitirá compreender muito rapidamente o algoritmo para resolver meu problema.
Aqui está meu código.

int H;
double  TesterStatistics( );
void OnTick()

O que é isso?

 
 Сергей Таболин
:

É isto o que é?

Obrigado por seu feedback. Graças a você percebi que a especificaçãoTesterStatistics( ); funciona junto com a declaração da variável global H ... foi um erro meu. Eu o consertei.

int H;
//double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Bom dia! Como posso implementar a exibição de dados de barras altas e baixas em um gráfico? E destacar a mesma cor.
Razão: