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

 
.roman.:

Os cálculos desnecessários (irrelevantes para o problema) foram removidos. As impressoras foram adicionadas ao código especificamente para mostrar o problema. Apesar da comparação do símbolo do pedido com o símbolo no qual a EA está aberta, a EA pode mostrar o seguinte (a partir do gráfico Ozi pegue os dados do pedido em euros, por exemplo, como neste caso):

                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     

Este não poderia ser o caso, não há como o Ask no canguru ser mais alto do que qualquer preço aberto no Eurodólar em 2015...

E todas as verificações para a ordem selecionada são melhor feitas após a seleção, com uma cláusula if() separada.

 
evillive:

Este não poderia ser o caso, não há como o Ask on the Kangaroo ser mais alto que qualquer preço de abertura do Eurodollar em 2015...

E todas as verificações para a ordem selecionada devem ser feitas após a seleção, com uma cláusula if() separada.

É verdade, não poderia. É por isso que deu ordens Bid<openPrice em 1.11262.

Em outras palavras, você sugere verificar a presença de um pedido usando o if(OrderSelect()), e depois no embutido se já compararmos o símbolo do gráfico com o símbolo do pedido, preço aberto, etc.?

 
.roman.:

É verdade, não poderia. É por isso que ele deu uma ordem Bid<openPrice para a UE em 1.11262.

Em outras palavras, você sugere verificar a existência de um pedido usando o if(OrderSelect()), e depois comparar o símbolo do gráfico com o símbolo do pedido, preço aberto, etc., no if embutido?

Sim, exatamente, primeiro OrderSelect(), e depois a próxima verificação para o resto dos parâmetros.
 

Dançar ao redor não vai ajudar.

Não há diferença para escrever a seleção do pedido e verificar se há símbolo e mágico em uma linha ou dividi-los em 3 linhas diferentes. De acordo com as mudanças nas condições de verificação das novas construções são verificadas em etapas, ou seja, se a primeira condição não for cumprida, as seguintes não serão verificadas. É o mesmo que as 3 linhas. A primeira condição é cumprida e a segunda é verificada. E somente se a segunda condição também for cumprida é que procederemos à verificação da terceira.

O problema é provavelmente que há uma chamada de uma função do usuário na parte apagada do código onde outra ordem é selecionada.

 

Se tivesse havido alguma menção de trabalhar com encomendas, essa teria sido a primeira coisa em que reparei. Mas há apenas cálculos, não uma única função do usuário utilizada. Não está claro o que exatamente causa uma ordem para ser selecionada de outro par. É por isso que estou tão intrigado com o "ambiente de software" mencionado na documentação e já refiz o código como o evillive sugeriu e estou pronto para dançar com pandeiros. A próxima perversão será uma comparação forçada com a proposta de compra do par necessário através do marketinfo.


UPD.: Problema resolvido. Na verdade, encontrou uma função aninhada que utiliza seu próprio OrderSelect. Obrigado pela idéia, AlexeyVik.

 
Olá a todos, vocês podem me dizer como resolver um problema, eu encontro o número de barra que quero no laço, mas também preciso do número de barra passado no laço, como implementar isto sucintamente? Obrigado.
for(i=limit; i>=0; i--)
{
yesterday_weekday = TimeDayOfWeek(iTime(Symbol(),0,i-1))-TimeDayOfWeek(iTime(Symbol(),0,i));
if (yesterday_weekday ==1)
yesterday_time=iTime(Symbol(),0,i);
yesterday_shift=iBarShift(Symbol(),0,yesterday_time0);//последний бар 

}
 

Criei um EA (não para trabalhar, apenas para praticar)

Se eu definir os dois parâmetros na função IF, se eu os definir um por um, tudo funcionará bem, aqui está o código (Além disso, como posso ter certeza de que se eu já tiver uma ordem de compra aberta a próxima ordem de compra não será aberta, mesmo se todas as condições combinarem)?

//+------------------------------------------------------------------+
//|                                                        новый.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()

  {
  
double PC = iClose ("EURUSD", PERIOD_H1, 0);  

double MA = NormalizeDouble (iMA ("EURUSD", PERIOD_H1, 12, 0, MODE_LWMA, PRICE_MEDIAN, 0), 4); 


if (Ask == MA && PC-->MA )
OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-30*Point, Ask+30*Point);

   
return (0);





   
  }
//+------------------------------------------------------------------+
 
inuboh:

Criei um EA (não para trabalhar, apenas para praticar)

Se eu colocar os dois um por um, funciona bem, ou seja, o código (e se eu já tiver uma ordem de compra aberta, como faço para que uma ordem de compra não abra a próxima, mesmo que todas as condições estejam corretas?)

Não que seja a fonte de todos os problemas, mas puramente de interesse acadêmico: por que simultaneamente OnInit(), OnDeinit() e depois de repente começar()?

E quanto à pergunta, não é altamente recomendável que tal comparação Ask == MA, muito raramente se realiza na história. Então, o que significa tal expressão PC-->MA?

Quanto à permissão para uma compra, fazemos um loop em todas as posições de mercado e as comparamos com os critérios especificados - símbolo, tipo, número mágico, e aumentamos o contador em um se for encontrado o procurado. Em seguida, quando necessário, este contador é verificado.

É assim que as coisas são:

   _ExpertOrdersB=0;
   _ExpertOrdersS=0;

   for(int z=OrdersTotal()-1; z>=0; z --)
     {
      if(!OrderSelect(z,SELECT_BY_POS))
        {
         Print(". OrderSelect("+IntegerToString(z)+", SELECT_BY_POS ) FAIL!. Error #"+IntegerToString(GetLastError()));
        }
      if((OrderMagicNumber()==magic) && OrderSymbol()==_Symbol)
        {
          switch(OrderType())
           {
            default: break;
            case 0:
               _ExpertOrdersB++;
               break;
            case 1:
               _ExpertOrdersS++;
               break;
           }
        }
     }


if (_ExpertOrdersB < 1) //если нет покупок, то пытаемся купить, при условии, что:
if (Ask == MA && PC-->MA )
OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-30*Point, Ask+30*Point); 
 
evillive:

Não que seja a fonte de todos os problemas, mas puramente por interesse acadêmico: por que simultaneamente OnInit(), OnDeinit() e depois de repente começar()?

E quanto à pergunta, não é recomendável que tal comparação Ask == MA, ela muito raramente se concretiza na história. Então, o que significa esta expressão PC-->MA?

Quanto à permissão para uma compra, fazemos um loop em todas as posições de mercado e as comparamos com os critérios especificados - símbolo, tipo, número mágico, e aumentamos o contador em um se for encontrado o procurado. Em seguida, olhamos para o balcão, quando necessário.

start() mudou o contador por "hábito" )

Por que Ask === MA é um evento raro? O preço atual do lance raramente toca a linha Moving Average?

O PC-->MA está no meu caso se o preço anterior de fechamento for maior que a linha de Média Móvel (não descobri outra maneira).

Então, quando eu habilito a função IF um a um com Ask == MA e depois PC-->MA funciona bem, mas quando eu os combino, não funciona!

 
evillive:

Não que seja a fonte de todos os problemas, mas puramente por interesse acadêmico: por que simultaneamente OnInit(), OnDeinit() e depois de repente começar()?

E quanto à pergunta, não é recomendável que tal comparação Ask === MA, muito raramente se realiza na história. Então, o que significa esta expressão PC-->MA?

Quanto à permissão para uma compra, fazemos um loop em todas as posições de mercado e as comparamos com os critérios especificados - símbolo, tipo, número mágico, e aumentamos o contador em um se for encontrado o procurado. Em seguida, quando necessário, este contador é verificado.

É assim que é:

Meu entendimento é que PC-- > MA é o mesmo que PC-1 > MA.