Erros, bugs, perguntas - página 553

 
Urain:

Depois faça uma sugestão no fio do perfil (não há erro, no entanto).

bem... Penso que isto é um erro. segundo o meu entendimento, se no calendário eu puder seleccionar o fim do período a ser a data de hoje,
então espera-se que o testador e optimizador trabalhem até à hora actual, mas isso não acontece ((
os criadores estão conscientes disto e está ao seu alcance fazer uma boa plataforma. se não, então não...

 

Li este artigo "A Step-by-Step Guide to Writing MQL5 Expert Advisors for Beginners" https://www.mql5.com/ru/articles/100 encontrou as seguintes linhas no mesmo:


Para citações de 3 e 5 dígitos multiplicamos os valores de Stop Loss e Take Profit por 10.

A amostra MACD incluída no terminal contém a mesma informação:

//--- afinação para 3 ou 5 dígitos
int digits_adjust=1;
if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;

m_adjusted_point=m_symbol.Point()*digits_adjust;

O que é esta acção? Porquê multiplicar as variáveis por 10 com 3 e 5 casas decimais?

Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
progeon:

Li este artigo "A Step-by-Step Guide to Writing MQL5 Expert Advisors for Beginners" https://www.mql5.com/ru/articles/100 encontrou as seguintes linhas no mesmo:

Para citações de 3 e 5 dígitos multiplicamos os valores de Stop Loss e Take Profit por 10.

A amostra MACD incluída no terminal contém a mesma informação:

//--- afinação para 3 ou 5 dígitos
int digits_adjust=1;
if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;

m_adjusted_point=m_symbol.Point()*digits_adjust;

O que é esta acção? Porquê multiplicar as variáveis por 10 com 3 e 5 casas decimais?

É para aqueles amigos que estão habituados a contar tudo em quatro dígitos e não querem mudar de ideias.

Assim, se estabelecermos 100 pontos de Stop Loss em parâmetros, obtemos 1000 pontos em cálculos de cinco dígitos, e 100 pontos em cálculos de quatro dígitos, o que é o mesmo.

O número de quatro dígitos tem vantagens, é fácil de recalcular o lucro, 1 pip faz 1% dos fundos investidos.

 
progeon:

Li este artigo "A Step-by-Step Guide to Writing MQL5 Expert Advisors for Beginners" https://www.mql5.com/ru/articles/100 encontrou as seguintes linhas no mesmo:

Para citações de 3 e 5 dígitos multiplicamos os valores de Stop Loss e Take Profit por 10.

A amostra MACD incluída no terminal contém a mesma informação:

//--- afinação para 3 ou 5 dígitos
int digits_adjust=1;
if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;

m_adjusted_point=m_symbol.Point()*digits_adjust;

Que tipo de acção é essa? Porque multiplicaria uma variável por 10 com 3 e 5 casas decimais?


Para uma melhor compatibilidade com diferentes corretores (fornecendo 4 ou 5 dígitos), ou seja, sem necessidade de alterar os parâmetros do Expert Advisor.

Este algoritmo baseia-se no facto de nos corretores que oferecem cotações de 4 dígitos _Dígitospodem ser 4 ou 2 (geralmente aos pares com JPY),

e em 5 dígitos 5 e 3 em conformidade.

Embora, eu próprio esteja interessado na segurança deste método, porque existem ferramentas com diferentesvalores de _Dígitos.

Pessoalmente, estou a verificar com "EURUSD". Mas pelo menos há corretores em MT4 onde o eurodólar tem um nome ligeiramente diferente, por exemploEURUSD_fx

ou algo do género.

 
crOss:
пункты 1 и 2 уходят, если фиксировать правое время на момент начала теста/оптимизации.
никто не просит актуальность до секунды... но один торговый день - это, извините, ни в какие ворота.

Urain:

Depois terá de introduzir não só a data do mês do ano, mas também a hora:minutos do fim.

Não necessariamente, o tempo pode ser fixado de forma puramente programática quando o teste/optimização corre.

Honestamente, acho a sugestão bastante sensata. Sou totalmente a favor.

É irrelevante para mim neste momento, mas poderá ser muito desejável em breve.

 
Urain:

Isto é para aquelas pessoas que estão habituadas a contar tudo em pontos de quatro dígitos, e que não querem reconstruir.

Assim, fixando a paragem para 100 pontos nos parâmetros, obtemos um recálculo de 1000 pontos em cinco dígitos, e 100 pontos em quatro dígitos, o que é a mesma coisa.

O número de quatro dígitos tem vantagens, a facilidade de recálculo do lucro, 1 pip 1% dos fundos investidos.

Vejo, vamos continuar) Outra questão - o mesmo artigo usa a função NormalizeDouble ao formar Stop Loss e Take Profit por que razão? Parece não fazer sentido.

mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - Документация по MQL5
 
progeon:

Vejo, vamos continuar) Tal pergunta - no mesmo artigo a função NormalizeDouble é usada quando se formam Stop Loss e Take Profit por que razão? Parece não fazer sentido.

Não há qualquer inutilidade. Durante o cálculo do nível, são realizadas operações com duplicações e o resultado não será normalizado e no caso de o passar para o servidor tal como está, receberá requotes. É por isso que o resultado do cálculo é normalizado.
 
Urain:
Não há inutilidade, ao calcular o nível, são realizadas operações com duplas, e o resultado não será normalizado, se o passar para o servidor tal como está, obterá requotes. É por isso que o resultado do cálculo é normalizado.
Suponha que a perda de carga é 100, o ponto é 0,00001. O que pode ocorrer ao multiplicá-los? Irão os 9 aparecer em algum lugar? Por exemplo, 0.000999999?
 
progeon:
Stoploss, digamos 100, ponto 0,00001. o que pode surgir ao multiplicá-los? Irão os 9 aparecer em algum lugar? Por exemplo 0,000999999?
   double a=1.45861+32*_Point;
   Print(DoubleToString(a,16));

Parece que um número normal deve sair como 1.45893 mas recebemos 1.4589300000000002

 
Renat:

Planeámos fazer um separador "Segurança" na informação da EA, que mostra o nível de segurança e uma lista das chamadas funções DLL.

Mesmo a tempo para o lançamento da loja, estaremos a trabalhar nos ficheiros EX5.

Renat, há mais duas questões sobre as chamadas DLL no novo formato EX5.

1. Como se comportará o código quando as chamadas são desactivadas? Como agora - não vai sequer correr?

2. Se não começa, para que serve MQL5_DLLS_ALLOWED /TERMINAL_DLLS_ALLOWED?