Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1401

 
freemovpalm #:

Olá a todos, podem por favor ajudar-me a adicionar martingale à EA, necessito depois de accionar o stoploss (ficar perdido) e em novo sinal (coruja funciona por indicador) para entrar com lote aumentado (multiplicado por coeff). Será que acertei, primeiro preciso de escrever o evento - evento de paragem (não sei onde e como), e fazer as contas com lotes lá (preciso de variáveis adicionais)?

Por exemplo, adicionar uma variável - contador de perdas de negócios em fila. Em cada comércio perdido - aumentado em 1, em cada rentável - reposto a 0.

E a partir deste contra-lote fixado (por exemplo - multiplicar o lote mínimo por 2 em proporção a este contador).

Mas o martingale não tornará rentável uma estratégia perdedora.

 
JRandomTrader #:

Por exemplo, adicionar uma variável - contador de perdas de negócios em fila. Em cada comércio perdido - é aumentado em 1, em cada lucrativo - é reposto a 0.

E a partir deste contador, definir o lote (por exemplo, multiplicar o lote mínimo por 2 até à extensão deste contador).

Mas o martingale não tornará rentável uma estratégia perdedora.

Obrigado, a estratégia tem uma média de 2 e um máximo de 4 perdas consecutivas, é por isso que eu queria um martin. A propósito, alguém tem um exemplo de tal contador ou coruja a trabalhar com o mesmo princípio que eu descrevi? Poderia apenas copiar as linhas necessárias a partir daí.

 
string Button_TP = "Panel.String1.Button3";

Print(ObjectGetInteger(0, "Panel.String1.Button3", OBJPROP_STATE));
Print(ObjectGetInteger(0, Button_TP, OBJPROP_STATE));

Pode dizer-me por que razão a primeira opção funciona e a segunda não? O nome do botão não pode ser definido para uma variável?

 

Como pode o testador automatizar a passagem de vários pares?
Por exemplo, preciso de passar por 20 pares. Agora reinicio o testador para cada par.
Não consigo perceber como fazer uma variável.

Existem algumas soluções?

 
Evgeny Dyuka #:

Como pode o testador automatizar a passagem de vários pares?
Por exemplo, preciso de passar por 20 pares. Agora reinicio o testador para cada par.
Não consigo perceber como fazer uma variável.

Tem alguma solução?

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Como receber pares seleccionados para análise do mercado no Strategy Tester?

Alexey Viktorov, 2022.04.14 17:11

Não é possível utilizar o terminal MarketWatch no Testador de Estratégia. O testador gera o seu próprioMarketWatch a partir dos símbolos cujas propriedades foram solicitadas ao programa. Portanto, para formar umMarketWatch, é necessário solicitar qualquer propriedade do símbolo exigido.

sinput  string  Symb  = "GBPUSD,GBPAUD,GBPCAD,GBPJPY,EURUSD,EURGBP,EURAUD,EURCAD,EURJPY,AUDUSD,AUDNZD,AUDCAD,AUDJPY,NZDUSD,NZDCAD,USDCAD,USDJPY"
string s_arr[];
int OnInit()
{
  int i = 0, symbPos = 0;
  if(StringSplit(Symb, ',', s_arr) <= 0)
   {
    Print(__FUNCTION__ + " Error converting !");
    return(INIT_FAILED);
   }
  while(symbPos >= 0  && !IsStopped())
   {
    if(!SymbolInfoInteger(s_arr[i], SYMBOL_SELECT) || !SymbolInfoInteger(s_arr[i], SYMBOL_VISIBLE))
      SymbolSelect(s_arr[i], true);
    double price = SymbolInfoDouble(s_arr[i], SYMBOL_ASK);
    i++;
   }
 return(INIT_SUCCEEDED);
}/*******************************************************************/

Espero não ter cometido erros ao puxar o código do meu programa.


 
Evgeny Dyuka #:

Como pode o testador automatizar a passagem de vários pares?
Por exemplo, preciso de passar por 20 pares. Agora reinicio o testador para cada par.
Não consigo perceber como fazer uma variável.

Existem algumas soluções?

Se definirmos um par por um parâmetro EA que pode mudar durante a optimização, então simplesmente executamos a optimização por este parâmetro para iniciar uma passagem por vários pares.
Este parâmetro não pode ser do tipo 'string', mas pode ser do tipo 'int' ou 'enum'.
Utilizando este parâmetro, ao inicializar a EA, atribuímos a outra variável de string o nome do símbolo desejado que corresponde ao valor do parâmetro.
No código EA, terá de substituir Symbol() ou _Symbol pela sua própria variável com o nome do par.

Compreende o princípio ou precisa de um exemplo de código?

 
Evgeny Dyuka #:

Como pode o testador automatizar a passagem de vários pares?
Por exemplo, preciso de passar por 20 pares. Agora reinicio o testador para cada par.
Não consigo perceber como fazer uma variável.

Existem algumas soluções?

O Sabermultitester é a solução, pode configurar os passes por ferramentas e configurações.

Библиотеки: MultiTester
Библиотеки: MultiTester
  • 2019.07.19
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: MultiTester
 
Yuriy Bykov #:

Se um par é definido por um parâmetro EA que pode ser alterado durante a optimização, então, para executar uma passagem de múltiplos pares, executamos simplesmente a optimização por este parâmetro.
Este parâmetro não pode ser do tipo 'string', mas pode ser do tipo 'int' ou 'enum'.
Usando este parâmetro, ao inicializar a EA, atribuímos a outra variável de string o nome do símbolo desejado que corresponde ao valor do parâmetro.
No código EA, onde quer que Símbolo() ou _Símbolo seja utilizado, teremos de o substituir pela nossa própria variável com o nome do par.

Compreende o princípio ou precisa de um exemplo de código?

Óptimo! Não me ocorreu passar pelo optimizador.

 
Yuriy Bykov #:

Se um par é definido por um parâmetro EA que pode ser alterado durante a optimização, então, para executar uma passagem de múltiplos pares, executamos simplesmente a optimização por este parâmetro.
Este parâmetro não pode ser do tipo 'string', mas pode ser do tipo 'int' ou 'enum'.
Usando este parâmetro, ao inicializar a EA, atribuímos a outra variável de string o nome do símbolo desejado que corresponde ao valor do parâmetro.
No código EA, onde quer que Símbolo() ou _Símbolo seja utilizado, teremos de o substituir pela nossa própria variável com o nome do par.

O princípio é claro, ou é necessário um código de exemplo?

E a OnTick() ?
Posso substituir o meu próprio símbolo em todo o lado, masOnTick() será sempre retirado dosímbolo em que o testador está a correr.
A partir da ajuda: "
O evento OnTick() é gerado . quando é recebido um novo tick para um símbolo, ao qual o Expert Advisor está anexado".

Não pode haver conflito aqui? Por exemplo, o forex é interrompido durante o fim-de-semana, mas o crypto não.

 
Sim, isso é um problema. Não trabalhei com criptologia, por isso não pensei na diferença nos períodos de comércio permitidos. Mas é possível colocar alguma moeda criptográfica como símbolo de trabalho no testador, e adicionar (ou não) a verificação de que a negociação é permitida na EA. Depois disso, o principal problema é a inconsistência dos horários de chegada das carraças para diferentes instrumentos. Aqui podemos tentar escolher o instrumento com mais carraças para reduzir o erro dos resultados dos testes. Em Expert Advisors com várias moedas que trabalham em anexo a um gráfico, a situação será a mesma - OnTick() é accionado apenas para o símbolo principal. Para acompanhar correctamente o evento de um novo bar a chegar para símbolos diferentes neste caso, uso a minha biblioteca Novo Evento de Bar.
New Bar Event
New Bar Event
  • www.mql5.com
Позволяет определить наступление события нового бара в мультивалютном советнике. В вызове OnTick() можно многократно проверять, наступило ли на этом тике событие для нужного инструмента (symbol) и периода графика (timeframe).