[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 382

 
vitor:
Desculpe, mas eu costumava trabalhar em Rumuse e agora estou aprendendo MT4. Eu ainda sou um "Dummie" aqui . 11 .09 . Não posso iniciar as citações. Por favor, diga-me o que está errado. Terei prazer em ajudá-los.
Abra uma nova conta demo, se isso não funcionar reinstale o terminal.
 
Olá, você pode me dizer como desativar uma EA se uma ordem aberta pela mesma EA for fechada por um comerciante, ou por SL ou TP.
 
eropov:
Olá, você pode me dizer como desativar uma EA se uma ordem aberta pela mesma EA for fechada por um comerciante ou por SL ou TP.
Veja, isso é o que são os conselheiros, não é preciso aconselhá-los... e se uma ordem está aberta, não se preocupe, o tio Kolya virá e fechará tudo.
 

BeerGod

Понимаете, советники на то и советники, что не нужно им советовать... а если ордер открыт, то не переживайте, дядя Коля прийдет и всё закроет.

Então não é possível parar o funcionamento da EA?

 
eropov:

BeerGod

Então não é possível parar a EA?

Desative a EA pressionando o botão no terminal, e a ordem não pode ser revertida, é claro, feche-a manualmente.


 

BeerGod

Desative a EA pressionando o botão no terminal e a ordem não pode ser revertida, é claro, feche-a manualmente.

Estou escrevendo uma coruja que abre um pedido com SL e TP.

Preciso da condição de que se um pedido for fechado pela TP ou fechado por um comerciante, eu tenho que parar a EA. Como implementar isso de forma programática?

 

Ajude-me a resolver o problema, por que se o loop tem apenas 2 passes i primeiro é igual a 0 e depois imediatamente igual a 4?

for(i=0,g=0,c=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
    if(OrderMagicNumber() == MasterMagicNumber)
      {
      starttime = OrderOpenTime();
      ArrayResize(prices,ArraySize(prices)+TradesCount);
      if(OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber() == MasterMagicNumber) endtime = OrderOpenTime();
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      times[i] = starttime;
      times[i+1] = endtime;
      tickets[i] = OrderTicket();
      symbol = OrderSymbol();
      Alert(i);
      while(g < TradesCount*(i+1))
        {
        if(OrderType() == OP_BUY)
          {
          if(g == TradesCount*i)
            {
            prices[g] = OrderOpenPrice()-LowOpen*Point;
            }else
            {
            prices[g] = prices[g-1]-step*Point;
            }
          }
        if(OrderType() == OP_SELL)
          {
          if(g == TradesCount*i)
            {
            prices[g] = OrderOpenPrice()+HighOpen*Point;
            }else
            {
            prices[g] = prices[g-1]+step*Point;
            }
          }
        g++;
        }
      }
    }

A partir deste roteiro, o alerta sai 0, 4.

 
Помогите решить задачу, почему если в цикле всего 2 прохода i сначала равна 0, а затем сразу равна 4?

Até onde eu entendo o código

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;

faz uma pausa, o que significa que vamos para o início do laço e aumentamos i de acordo com a condição do laço

provavelmente assim

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) {i--; break; }

 
Boa tarde, você poderia me dizer se existe uma simples EA baseada em duas médias? Sem filtros, paradas para trás ou algo parecido. Isto é, se o curto cruza o longo de baixo para cima, uma ordem de compra é aberta e uma ordem de venda é fechada; e vice-versa, se o curto cruza o longo de cima para baixo, uma ordem de venda é aberta e uma ordem de compra é fechada.
 
first_may:
Boa tarde, você poderia me dizer se existe uma simples EA baseada em duas médias? Sem filtros, paradas para trás ou algo parecido. Isto é, se o curto cruza o longo de baixo para cima, uma ordem de compra é aberta e uma ordem de venda é fechada; e vice-versa, se o curto cruza o longo de cima para baixo, uma ordem de venda é aberta e uma ordem de compra é fechada.
Ver Codebase na seção EAs.