[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 1084
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Seria mais preciso colocá-lo desta forma:
Isso é ainda mais verdadeiro e agora funciona:
//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
Experimentei na M1 e a mensagem não aparece depois que a próxima barra é formada. Isso significa que não funciona?
E não vai funcionar - você não escreveu o programa corretamente. Isso porque você não tem idéia de como seu próprio código vai funcionar. Vamos quebrar isso. Corpo de consultores especializados:
Um novo tick chega e a função Fun_New_Bar() é chamada. Se ele retornar ao programa principal, um Alerta irá aparecer. Caso contrário, a EA encerra seu trabalho com um retorno e espera por um novo tique. Tudo se repete em um novo tique.
Você diz que o código não funciona? Agora veja o que você tem em seu subprograma.
Uma função booleana é declarada. Como é uma função e não um procedimento, deve retornar algo ao programa principal do qual é chamado. Como a função é booleana, ela deve retornar um valor booleano. Onde você tem um fio que devolve alguma coisa ao programa principal? Isto significa que no início do programa, já que nada é retornado da função, os parênteses da expressão if(Fun_New_Bar()) serão sempre falsos e o alerta nunca irá aparecer.
Vamos mais longe. Por que você declarou data/hora New_Time=0; como estático? Qual é o seu raciocínio? Você declarou uma variável e a inicializou imediatamente com zero. No próximo tick, a mesma coisa acontecerá - a variável será declarada e inicializada por zero novamente. If(New_Time!=Time[0]){ Esta linha verifica se o valor da variável não é igual à hora atual. Bem, sim, a variável tem zero, mas o tempo atual não é zero. A condição é cumprida, o valor de tempo atual é escrito na variável, o parâmetro New_Bar se torna verdadeiro. No próximo tick , New_Time não será igual ao Time[0] novamente , ele verificará com sucesso a desigualdade novamente e as duas próximas operações serão executadas. Em outras palavras, ao verificar a condição se(New_Time!=Time[0]), a expressão entre parênteses será verdadeira a cada tick. SEMPRE. O que levanta a questão, se é sempre verdade, por que diabos este cheque deveria estar aqui? Talvez devêssemos simplesmente removê-lo? Por que devemos atribuir New_Time=Time[0] e New_Bar=true, se estas duas variáveis não são usadas em nenhum lugar? Por que diabos precisamos dessas duas tarefas? Você quer brincar? Ou você é preguiçoso demais para pensar?
Como disponibilizar uma variável global para um EA rodando em um segundo terminal MT4 que esteja rodando?
Como disponibilizar uma variável global para um EA rodando em um segundo terminal MT4 que esteja rodando?
Através de uma api, ou através de um documento de texto.
Através de uma api, ou através de um documento de texto.
Como?
Como?
Através da api eu não sei como - li que é possível. Através de documento de texto - você precisa escrever uma dll em um idioma que não seja MQL4. Por exemplo, em Delphi ou C++. A dll tem que ser capaz de acessar o arquivo localizado fora do terminal. É bastante realizável. Mais adiante, tudo está claro - o Expert Advisor insere um novo valor da variável global em um documento de texto, e o outro Expert Advisor o lê a partir daí. A DLL dá acesso ao documento de texto aos dois consultores especialistas. Tais perguntas já foram feitas aqui antes. As pessoas têm perguntado algo como como fazer com que os EAs trabalhem juntos em dois canais diferentes.
Isso é ainda mais verdadeiro e funciona agora:
Isto é ainda mais correto e agora funciona:
//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
A função não é minha - eu a peguei on-line, mas não a usei. Agora, olhou com cuidado - falta um operador.
Esta é a maneira correta de fazer isso:
Através de uma api eu não sei como - eu li que é possível. Através de documento de texto - você precisa escrever uma dll em um idioma que não seja MQL4. Por exemplo, em Delphi ou C++. A dll tem que ser capaz de acessar o arquivo localizado fora do terminal. É bastante realizável. Mais adiante, tudo está claro - o Expert Advisor insere um novo valor da variável global em um documento de texto, e o outro Expert Advisor o lê a partir daí. A DLL dá acesso ao documento de texto aos dois consultores especialistas. Tais perguntas já foram feitas aqui antes. As pessoas perguntavam algo como como fazer com que os EAs funcionassem juntos em dois canais diferentes.
Obrigado, vou procurá-lo...