[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 644

 
Myth63:


A questão é que eu não sou muito bom em programação MQL e minha EA é baseada nos princípios BASIC =) Uma variável é atribuída a uma ordem em aberto. O terminal diz que fui recolocado e o valor desta variável desaparece quando a ordem é aberta. Acho que o que deve ser feito se a ordem for re-logada? Se isso acontecer, o terminal deve verificar as posições abertas e atribuir esses valores às variáveis que foram atribuídas pelo robô. E o Expert Advisor mostra boas leituras no teste.

Dependendo do que você deseja armazenar (quais informações), diferentes opções podem ser usadas:

  • as informações sobre o pedido podem ser armazenadas em seu comentário e depois lidas a partir do comentário;
  • as informações que você deseja podem ser escritas em um arquivo - um processo lento;
  • A variante mais freqüentemente utilizada é a de escrevê-la em variáveis globais do terminal.
 
FelixFX:

Se você não se importa, aqui está um exemplo. Tanto quanto eu entendo, os dados não serão atualizados até que o laço seja executado?
int start()
{
//----
    while (!IsStopped() && IsExpertEnabled())
    {fMineFunction();}
//----
    return (0);
}
 
TarasBY:

Serão utilizados apenas os mesmos dados durante este ciclo infinito? Os dados serão atualizados com um novo tick ou não?
 
Myth63:


O problema é que não sou muito bom em programação MQL e minha EA é baseada nos princípios de Bacyca =) Uma variável é atribuída a uma ordem em aberto. O terminal diz que fui recolocado e o valor desta variável desaparece quando a ordem é aberta. Pergunto-me como fazer para verificar se há posições abertas se há um overlog e atribuir esses valores às variáveis que foram definidas por um robô.

Você está falando de número mágico? Não há informações suficientes para ajudá-lo... qual é a variável e como ela é atribuída - é por aí que você precisa começar.

Mas meu Consultor Especialista está mostrando bons resultados no teste.

100 negócios não é uma leitura, é um bom pedaço de história. Um par de milhares de negócios em 2-3 anos é algo em que você pode confiar.
 
FelixFX:

Serão utilizados apenas os mesmos dados durante este ciclo infinito? Os dados serão atualizados com um novo tick ou não?
Não. Para que seja atualizado, tem que ser isto. A pergunta sobre o looping é respondida pelo mecanismo de busca do site, quantas páginas ele retorna. Leia-o.
 
FelixFX:

Serão utilizados apenas os mesmos dados durante este ciclo infinito? Os dados serão atualizados com o novo tick ou não?
O loop permite que você execute sua função em um "loop", sem esperar que o próximo tick chegue. Sobre que dados você está perguntando?
 
Por favor, informe se existe uma função embutida que me permite executar uma função que escrevi apenas na abertura de cada barra, não em cada carrapato. Parece ser fácil escrever à mão, mas quando parte do código é executada por carrapatos, e parte por barras, o programa fica muito confuso)
 
Qwertee:
Por favor, avise se houver uma função incorporada, que eu posso executar alguma função, escrita por mim, apenas na abertura de cada barra, não em cada carrapato. Não é difícil escrever à mão, mas quando executo algum código por carrapatos e alguns por barras, fica muito confuso)

Assim, você apenas determina quando um novo bar abre e desempenha sua função.

Você pode determinar a aparência de um novo bar memorizando o tempo de abertura do bar e depois comparando-o com o tempo atual do bar 0. Se o novo tempo for mais longo do que o anterior, então temos um novo bar.

 

sergeev agradece pelo conselho, parece funcionar)

Muito bem, mais uma coisa.

Na minha EA eu tenho esta ramificação:

if(period=="M15")
{
//check to open buy
Alert(buysell);

if(buysell=="comprar")

Alerta(1);

.............

}

Basicamente, aninhado se. MAS. condição se(period=="M15") for cumprida e Alert der um resultado, e comprar, mas condição se(buysell=="buy") não for cumprida e o comando Alert(1) nem sequer for iniciado. inferno, ambas as condições são mesmo sintáticamente as mesmas, mas por que uma é cumprida e a outra não é?

 
sergeev:

Assim, você apenas determina quando um novo bar abre e desempenha sua função.

Você pode determinar a aparência de um novo bar memorizando o tempo de abertura do bar e depois comparando-o com o tempo atual do bar 0. Se o novo tempo for maior do que o anterior, então você tem um novo bar.

Vou escrevê-lo:

int time.marker;

void start() {
   if(time.marker!=Time[0]) {
      time.marker=Time[0];
      // тут то что буде исполнятся только на открытии бара
      }
   // тут то что буде исполнятся на каждом тике
   }
Razão: