Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 120

 
Ihor Herasko:

Sim, eu posso ver isso. E vejo a resposta à pergunta no post abaixohttps://www.mql5.com/ru/forum/160587/page115#comment_6521492. Em outras palavras, o problema é que a funcionalidade não está dividida em subtarefas lógicas. Vocês se agruparam: recuperação da ordem, decisão sobre a ação comercial e execução do comércio.

Tal tarefa pode ser resolvida exatamente em três etapas:

  1. Coleta de informações sobre pedidos a serem monitorados pelo programa. Este é apenas o ciclo de avaliação dos pedidos, que você já tem. O resultado deste ciclo deve ser o conjunto de ordens.
  2. Cálculo de sinais comerciais. O resultado do cálculo é um comando para abrir e/ou fechar ordens. Isso depende da estratégia comercial. Anteriormente, quando não havia enumeração, eu usava códigos: 0 - sem sinal, 1 - abrir Comprar, -1 - abrir Vender, 2 - fechar Comprar, -2 - fechar Vender.
  3. Execução de uma operação comercial. Se houver um sinal comercial e uma das ordens (ponto 1) se encaixar, é realizada uma operação comercial. Depois disso, todo o algoritmo é reiniciado a partir do ponto 1. Em alguns casos, nós até saímos do OnTick para continuar com o próximo tick.

Bem, obrigado. Pelo menos é claro o que fazer. Eu mesmo tentarei descobrir "como" fazer isso. Embora eu ainda não esteja familiarizado com arrays. Mais uma vez, obrigado de qualquer forma.

 

Diga-me como sair dessa!!!


for(int i=OrdensTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

pausa;

A advertência é: o valor de retorno da 'OrderSelect' deve ser verificado

Dequeoutra formaeste valor'OrderSelect'deve ser verificado?

se eu fizer isto: j=OrderSelect(); Isto é correto?


 
Rewerpool:

Diga-me como sair dessa!!!


for(int i=OrdensTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

pausa;

A advertência é: o valor de retorno da 'OrderSelect' deve ser verificado

Dequeoutra formaeste valor'OrderSelect'deve ser verificado?

se eu fizer isto: j=OrderSelect(); Isto é correto?


 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
 
Alekseu Fedotov:

Não funcionou!(

((((

 
Eu escrevi para o arquivo, tudo está bem, mas agora como eu salvo dados como "eurusd" "1.2242". dados temporários, etc.?
 
Mickey Moose:Escrevi-o em um arquivo, tudo está bem, mas agora como posso poupar os dados, por exemplo "eurusd" "1.2242". dados temporários, etc.?

string s=FileReadString(F1); // Leia a próxima linha do arquivo de texto
StringSplit(s, "," , a); // Dividir elementos separados por vírgula na matriz
datetime T1=StrToTime(a[4]); // Além disso, a transformação continua...
int ord=StrToInteger(a[8]);
double Price=StrToDouble(a[12]);

 
novichok2018:

Bem, obrigado. Pelo menos é mais claro o que fazer. Vou tentar descobrir o "como" eu mesmo. Ainda não estou familiarizado com arrays, no entanto. De qualquer forma, mais uma vez, obrigado.

Escreva pelo menos um bloco e me mostre. Eles lhe dirão mais sobre este caso.

 
Rewerpool:

Não ajudou!(


Leia-o cuidadosamente, novamente.

 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

Todos os códigos terão este aspecto

   for(int i=OrdersTotal()-1; i>=0; i--) 
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
       if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)
          {
         break;
          }
        }
      }
 
Rewerpool:

Não funcionou!(


Portanto, você não fez nada. Você o escreveu acima:

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

E você o tem escrito sem verificação. Embora parecesse mais legível dessa forma:

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
   ....
}
 

@Ihor Herasko @Alekseu Fedotov

OBRIGADO!!! FUNCIONOU DESSA MANEIRA!