Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 7

 
Renat:

O uso de variáveis não inicializadas (ou incompletas) (especialmente estruturas) é um erro muito comum na programação.

Cara, este é o único recurso em russo em que (1) você sofre uma lavagem cerebral e (2) se sente grato por isso :))

Há 1,5 ano sei que as variáveis devem ser inicializadas; há 1,5 ano uso deliberadamente a frase "variável do tipo estrutura"; mas há 1,5 ano atribuo valores apenas a campos separados (obrigatórios) da variável do tipo Mqltraderequest, porque o Manual de Referência diz que "os campos obrigatórios devem ser especificados para cada operação de negociação"....

 
papaklass:
Renat, seria bom se você (MQ) publicasse um artigo ou uma série de artigos sobre "trabalhar com memória e variáveis". Em geral, qual é a maneira correta de trabalhar com memória e variáveis? Após a desqualificação de vários EAs no campeonato devido ao alto consumo de memória, esses artigos seriam apropriados. Rosh escreveu em algum tópico que os usuários devem solicitar os artigos de seu interesse, mas não encontrei esse tópico, então estou escrevendo aqui.
Sim, seria interessante ler um artigo sobre esse tópico. É muito interessante saber por que, no campeonato, alguns participantes tiveram especialistas usando tanta memória e como você pode evitar essa situação. Eu não tive esses problemas, mas é tudo aleatório. Quero dizer, não sei por que isso não acontece comigo, mas gostaria de saber o que fazer se isso acontecer.
 
Em primeiro lugar, o consumo de memória está relacionado às chamadas de indicadores. Antes de criar dezenas de indicadores em diferentes símbolos/tpymframes, pense no que você pagará por isso. Posso recomendar o artigo Reduzindo o consumo de memória para indicadores auxiliares e ler a entrevista de um dos participantes desqualificados - Entrevista com Atsushi Yamanaka (alohafx).
Интервью с Ацуси Яманака (alohafx) - Automated Trading Championship 2011
  • championship.mql5.com
Что общего между трейдингом, скайдайвингом, фьючерсами, Гавайями, переводами и шпионами? Мы тоже не знали, пока не пообщались с дисквалифицированным участником Ацуси Яманака (alohafx). Его кредо - ''Life is Good! - Жизнь прекрасна!'', и с этим трудно не согласиться. Было интересно узнать, что расстояние между разными континентами - не помеха в общении участников нашего Чемпионата.
 

Por que quando se aperta o S/L para 5 (deveria ser 5 pips)?

Eu tenho o seguinte

Arquivos anexados:
Capture.PNG  8 kb
 
statarb:

Por que quando se aperta o S/L para 5 (que deveria ser 5 pips)?

Eu tenho o seguinte

Você deve verificar os níveis de parada(SYMBOL_TRADE_STOPS_LEVEL) de um símbolo antes de enviar a solicitação de negociação. O SL/TP não deve estar mais próximo do que essa distância do preço atual para fechar. O exemplo para obter essa propriedade:

int StopLevel_Distance=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
double SL=... // obter novo SL por cálculo
//--- verificar o nível atual de Stop Loss calculado
if(SL>SymbolInfoDouble(_Symbol,SYMBOL_ASK)-StopLevel_Distance*_Point) 
   SL=SymbolInfoDouble(_Symbol,SYMBOL_ASK)-StopLevel_Distance*_Point;
//... modificar o SL para a posição
 

Obrigado, mas nem meu SL nem meu TP estão sendo executados. No "Terminal" do compilador, eles são listados como "0.00" ou "0.0". De qualquer forma, é impossível fornecer um stoploss geral para todas as ordens. E ainda não consegui alterar os valores dos parâmetros "de fora", ou seja, sem alterar o código no editor.

Fora isso, está funcionando muito bem! E os comentários são de grande ajuda!

Mais uma vez, obrigado,

locan BBS

.locan.BBS:

 

Olá, Olowsam,

Obrigado por este guia passo a passo. Tenho algumas perguntas, que espero que você possa me ajudar.

Segui suas instruções ao pé da letra, mas não consegui alcançar o resultado desejado. Em primeiro lugar, estou trabalhando com a versão mais recente do Meta Trader 5.00, Build 6.55 (6 de junho de 2012). Observei várias diferenças, sendo que a primeira é que o modelo do assistente MQL5 tem opções extras, além das que você mostra em suas observações. De qualquer forma, assegurei-me de que o programa é exatamente como você descreveu. Eu o compilei. Sem problemas. Nenhum erro. Consegui inserir todos os 5 pontos de interrupção de depuração, conforme sugerido em suas observações, na sub-rotina OnTick. Clico no botão verde Run e não acontece NADA. A execução do programa não chega a esse ponto. Por quê? O que está acontecendo? Se eu inserir os pontos de interrupção de depuração no início da subrotina OnInit, digamos, na linha adzHandle=iADX9Null,0,ADX_Period), tudo estará OK. As guias STEP de depuração se acendem e eu posso fazer uma única etapa desse controle até o final da subseção OnInit. Entretanto, depois disso, novamente nada. Em resumo, não consigo acessar a subseção OnTick. O que está acontecendo e por quê? Esse é um bug conhecido na operação do sistema Meta Trader? Como posso resolver esse problema e seguir em frente?

Espero que as informações acima expliquem o problema que tive e espero que você possa ver o que está acontecendo e que possa me ajudar.

Obrigado.

Com os melhores cumprimentos

Kishor

 

Olá. Ótimo artigo,

Digitei todo o código durante o processo e não obtive nenhum erro de compilação no final, portanto, deve ter sido bem explicado. Um bom exercício para quem está usando o sistema metatrader5/mql5 pela primeira vez.

Talvez seja necessário fazer alguma otimização para que o gráfico fique em uma direção ascendente :D

Tudo de bom e obrigado!

Mike

 

Hi,

Gostei muito do estilo de codificação deste artigo, muito fácil de ler e seguir. Só tenho um pedido a fazer, se não se importar, você poderia dar um exemplo de como implementar trailing stops com esse exemplo?

Muito obrigado!

 
Muito obrigado por esse guia maravilhoso!