Precisa da ajuda de programadores e programadores MT4 - página 3

 
Um perito fixado é uma tonelada de mauvais.
 
Integer:

2. A meio caminho da nova fiche. Anteriormente, a janela de propriedades do Expert Advisor looped não se abria. Agora sim, e seria bom que agora houvesse uma reacção a mudanças de parâmetros. Ou, a janela de propriedades poderia ser fechada para evitar confusão para o utilizador.

Exactamente! É isso que estou a tentar dizer, mas ninguém o ouve.

O "Service Desk" recusou, na medida em que penso que eles não compreenderam de todo a situação. Aqui está um excerto da mensagem de pedido:

Porque diria a um programador o que ele pode ou não pode fazer? A emissão foi transmitida sem erros. A execução decorre sem erros. O utilizador vê "A=5" no separador dos parâmetros de entrada, e o sistema dá "A=1" ao Expert Advisor. Se usar o laço start() ou while() é uma questão de gosto. O laço não é infinito, como afirma. Se observou cuidadosamente o texto do Expert Advisor, não é while(true), mas while(!IsStopped()&&IsConnected()&&IsExpertEnabled()). Nas construções MT4 anteriores, o utilizador não podia alterar os valores dos parâmetros de entrada durante a execução da função Sleep(). Na nova construção já não existe tal barreira. Assim, ou se restabelece a proibição de alterar os parâmetros de entrada nesta situação, ou se os deixamos REALMENTE no separadorINPUTS AND IN THE ADVISOR. É isso mesmo.


Número inteiro:

1. Quando instalei o terminal MetaTrader4, na janela de instalação há um convite para o fórum, este fórum e não outro.

As minhas desculpas. Mas reparei que a linha entre MT4 e MT5 está a desaparecer gradualmente. E foi a partir do meu perfil em "www.mql5.com" que me candidatei a "servicedesk" (espero que pela primeira e última vez). Preenchi um formulário que lhe mostra claramente a possibilidade de escolher a versão do terminal - escolhi "MT4".

Aqui está outro excerto de uma ordem já fechada (não sei se leram a ordem depois de a terem fechado precipitadamente?) (claro, engraçado, mas só consigo pensar num provérbio sobre apanhar pulgas).

Neste caso, porque é que o utilizador vê claramente os seus novos valores? Embora a EA possa funcionar em pleno, estes novos valores são uma ficção, e não estão disponíveis para a EA. A função RefreshRates() permite à EA obter as cotações actuais em QUALQUER ciclo. Porque não fornecer uma função semelhante para obter valores actualizados dos parâmetros de entrada ou adicionar esta função à função RefreshRates() existente?

Pressionar duas vezes o botão "AutoTrading" (para ligar e desligar os EAs) quebra o ciclo, após o que os novos valores ficam disponíveis, mas só depois do tick (nova citação) no GRAPHICS SYMBOL. E não sabemos quando virá, e o Expert Advisor não está proibido de processar outros símbolos também, e o utilizador não precisa desta perda de tempo. Assim, obtemos algo como "de volta ao futuro". Foi lançado um novo MT4. É mais moderno, mais rápido. Dizem que abranda muito bem no ecrã, à espera de citações de UM símbolo, enquanto as citações de outros símbolos estão em pleno andamento. Ou seja, agora digo aos meus clientes: alterem os parâmetros, carreguem duas vezes no botão "Expert Advisors" para os desligar e ligar, e esperem junto ao mar - um dia, "tique".

Nunca tinha pedido ajuda antes e espero que não o faça no futuro. Mais cedo ou mais tarde encontrarei uma forma de contornar o "gancho" de qualquer maneira. Tem sido sempre este o caso, desde que o MT4 e, claro, o seu"testador de estratégias" existam, do qual prefiro não falar agora. Mas é claro que qualquer imprecisão em tempo real é uma coisa muito séria, especialmente para um utilizador que está a arriscar o seu dinheiro, por vezes por quantias bastante elevadas. Como não vi outra forma eficiente de contornar este insecto, virei-me para o 'servicedesk' e, para ser honesto, fiquei um pouco duvidoso de que eles até se recusassem a consertá-lo. Bem...

Já é suficientemente mau que tudo tenha de ser feito "apesar" em vez de "graças a".

 
Integer:
Wex, use um temporizador, pode fazer sem looping agora.

Tem razão, claro, os novos EAs podem ser programados de forma muito diferente. Mas já existem muitos EAs bem programados. E os clientes não compreendem porque é que a coisa pela qual pagaram dinheiro de repente deixa de funcionar correctamente.

Ou seja, há uma tendência muito desagradável de incompatibilidade em princípio de EAs (Expert Advisors ou scripts, mesmo indicadores) já desenvolvidos, com novas construções de MT4.

E não utilizei nada atípico na programação por uma questão de princípio. O meu EA baseia-se unicamente nas características e funções da MQL4 BOMB. Já fui inundado por muitos indicadores e EAs (na sua maioria complexos ou os chamados "multicurrency ones"), que ou não funcionam de todo em novas construções de MT4, ou aparentemente funcionam bem, mas situações como no meu exemplo aparecem. (Quanto a erros de tradução, reparei, por exemplo, em variáveis com nome "novo" - compreendo - devido à expansão da lista de palavras reservadas).

 

Um é demasiado preguiçoso para ler a documentação. O resto mostra que são muito espertos... Phew!

Apanhar o código :)

Ainda não sei qual é o seu problema.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright     "Grizzly_v :)"
#property link          "http://www.mql5.com"
//+------------------------------------------------------------------+
extern int      A1=      1;
extern int      A2=      2;
int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   Comment("");
}
//+------------------------------------------------------------------+
void OnTick(){
   string   t;

   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
grizzly_v:

Um é demasiado preguiçoso para ler a documentação. O resto mostra que são muito espertos... Phew!

Apanhar o código :)

Ainda não sei qual é o seu problema.

O problema é que o Expert Advisor está em loop, pelo que o evento OnTick não ocorre no mesmo e não vê parâmetros alterados.
 

Bem, então é tudo. O mesmo ciclo apenas através das novas funções.

  extern int      A1=      1;
  extern int      A2=      2;
         int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   EventSetMillisecondTimer(100);
   return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer(){
   string   t;
   RefreshRates();
   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
stringo:

1. Dê uma vista de olhos ao perfil de Wex. Este é um desenvolvedor profissional MQL4. A fazer-se de parvo. Ou corrico. Não sei porquê.

2. temos de pensar sobre isto. Não se pode interromper à força o laço quando surgem novos parâmetros. Algo como a função IsNewParameter que deve ser chamada pelo próprio programador no loop infinito

1. também notei a estranheza...

2. isso seria muito agradável.

 
stringo:

1. Dê uma vista de olhos ao perfil de Wex. Este é um desenvolvedor profissional MQL4. A fazer-se de parvo. Ou corrico. Não é claro porquê.

2. é aqui que temos de pensar. Não podemos interromper à força o laço à chegada de novos parâmetros. Algo como a função IsNewParameter que deve ser chamada pelo próprio programador no loop infinito

Stringo.

A variável simplesmente não parece entrar num laço tão eterno. O método init não funciona quando os valores são alterados. E as variáveis externas são passadas apenas pelo init. As funções OnTick e OnTimer podem agora ser utilizadas em Expert Advisors,

OnChartEvent. Tanto quanto me lembro, a função de início no Expert Advisor foi desencadeada com um novo tick.

Excerto da documentação:

O programa recebe eventos apenas do gráfico em que é lançado. Todos os eventos são processados um a um na ordem em que são recebidos. Se já houver um evento NewTick na fila ou se este evento estiver no estado de processamento, um novo evento NewTick não é colocado na fila do programa mql4. Da mesma forma, se a fila do programa mql4 já contém o evento ChartEvent ou se tal evento estiver a ser processado, um novo evento deste tipo não será enfileirado. Os eventos temporizados são processados de acordo com o mesmo esquema - se existe ou já existe um evento Temporizador na fila, então um novo evento temporizador não é colocado na fila.

Assim, uma vez que a função de início se desloca infinitamente, quando ocorre um novo evento, a função não começará e as variáveis dentro dela não serão actualizadas.

Só há uma saída, utilizar as novas características da língua e não se preocupar com as funções antigas.

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4
 
artmedia70:

1. também reparei na estranheza...

E no olho de outra pessoa pode-se sempre ver até uma palhinha. E quanto mais troncos no olho, mais pequena a palha pode ser discernida.

Em qualquer negócio, é o resultado, e não o processo, que conta. O resultado é o seguinte: o preto é apresentado como branco - literalmente - e não figurativamente - o sistema executivo mostra ao utilizador outro valor em vez de um. ONDE isto é feito - dentro de alguma função, ou fora dela - não importa. Um sistema multitarefa em tempo real é capaz de lidar com vários processos simultaneamente. Nesse processo, a função Sleep()"corre" a maior parte do tempo e não consome quaisquer recursos do sistema. Isto é o clássico que é essencialmente utilizado para suspender o processo. Todos os outros processos podem decorrer sem impedimentos.

- Camaradas, podemos cumprir o plano a 102%?

- ... Sim, nós podemos.