Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1166

 

Você pode, por favor, me dizer como definir a seleção de pedidos por símbolo para OrderTotal()?

   int total=OrdersTotal();

   if(total==0&&Bid>=OrderBuy&&Bid<=OrderBuy+10*Point)
    {
     if(OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0,NULL,0,0,clrNONE)){::Alert(" Order Open ");}
    }

Neste momento, se houver uma ordem em aberto em um par, ela não se abrirá em outros.

 
MakarFX:

Você pode, por favor, me dizer como definir a seleção de pedidos por símbolo para OrderTotal()?

Agora, se há uma ordem em aberto em um par, ela não se abre em outros.

Veja o kodobase, há um exemplo em cada EA

 
Vladimir Pastushak:

Veja em kodobase, há um exemplo em cada assessor

Eu não sou um programador(

É um pouco complicado para mim.

 
MakarFX:

Eu não sou um programador(

É um pouco complicado para mim.

não é complicado.

para escrever um EA básico, aqui está toda a funcionalidadehttps://www.mql5.com/ru/forum/131859

Para seus propósitos OrdensTotal() é o número total de ordens abertas (numeradas a partir de 0) no terminal e então você tem que selecioná-las uma a uma (passar pelo loop) usando OrderSelect() e manipular as ordens necessárias

for (i=OrdersTotal()-1; i>=0; i--)
{
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
  {
   // проверим символ ордера, проверим магикномер ордера....
  }
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
MakarFX:

Você pode, por favor, me dizer como definir a seleção de pedidos por símbolo para OrderTotal()?

Neste momento, se há uma ordem em aberto em um par, ela não se abre em outros.

Preciso verificar periodicamente (contar comigo mesmo) minhas ordens, conforme a necessidade.
Tenho em cada EA um loop (um método enorme) que é chamado antes de ações importantes:

for(int pos=OrdersTotal()-1; pos>=0;pos--) {

        if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {

                selectFailed=true; /* не удалось "выбрать" ордер - статистика может быть неверной */
                continue;

        }

        if (OrderCloseTime()!=0) { /* ордер закрыт но ещё не удалён из списка*/ continue; }

        if (OrderMagicNumber()==0) { /* ордер выставлен юзером */ } continue;
        else if (OrderMagicNumber()!=_Magic) { /* ордер выставлен другим советником */ continue; }

        if (OrderSymbol()!=_Symbol) { /* ордер с правильным Magic но на другом символе */ continue; }

       /// обработка рабочих ордеров, с правильным Magic на символе советника (то есть наш ордер)

       /// проверяются несработки, считается кол-во, статистика, позиции и прочее 

}

a verificação de uma ordem no símbolo é destacada

 
Maxim Kuznetsov:

periodicamente, conforme necessário, para verificar (auto-verificar) seus pedidos.
Eu tenho um loop (um método enorme) em cada EA, que é chamado antes de ações importantes:

for(int pos=OrdersTotal()-1; pos>=0;pos--) {

        if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {

                selectFailed=true; /* не удалось "выбрать" ордер - статистика может быть неверной */
                continue;

        }

        if (OrderCloseTime()!=0) { /* ордер закрыт но ещё не удалён из списка*/ continue; }

        if (OrderMagicNumber()==0) { /* ордер выставлен юзером */ } continue;
        else if (OrderMagicNumber()!=_Magic) { /* ордер выставлен другим советником */ continue; }

        if (OrderSymbol()!=_Symbol) { /* ордер с правильным Magic но на другом символе */ continue; }

       /// обработка рабочих ордеров, с правильным Magic на символе советника (то есть наш ордер)

       /// проверяются несработки, считается кол-во, статистика, позиции и прочее 

}

verificar a ordem pelo símbolo é destacado

Em uma nota lateral, entendo que os carrapatos das ordens históricas podem se perder. A questão é se os tickers de ordem(SELECT_BY_TICKET) na MT4 e os tickers de acordos e posições na MT5 podem mudar.

E também, a ordem pode ser alterada após a OrderSelect no bilhete. Por exemplo, no dia seguinte. A EA não está desativada.

Se a ordem pendente se tornou uma ordem de mercado, você pode vê-la por seu tipo. Se a ordem de mercado foi fechada, então olhamos para o momento do fechamento da ordem, não igual a zero OrderCloseTime()!=0

Se a ordem pendente foi encerrada por sua vida útil, então como podemos rastreá-la pelo ticket da ordem.

E uma pergunta, a vida útil também está nas ordens de mercado (MT4), será que funciona?

 
MakarFX:

Você pode, por favor, me dizer como definir a seleção de pedidos por símbolo para OrderTotal()?

Agora, se há uma ordem em aberto em um par, ela não se abre em outros.

A questão já está resolvida. Obrigado a todos vocês.

 
Olá queridos senhores! Eu não entendo o que está errado, por que Alerta: hora3 hora1 = data errada?
datetime time1 = iTime(NULL,0,1);
datetime time3 = iTime(NULL,0,3);
datetime delta3 = (time3-time1);  Alert("time3-time1 = ",delta3); 


 
novichok2018:
Olá queridos senhores! Não entendo o que está errado, porque escreve Alerta: tempo3tempo1 = data errada?


porque o número é negativo :-)

por este tempo lógico1 é __ sempre __ mais que o tempo3

 
Maxim Kuznetsov:

porque o número é negativo :-)

pelo tempo lógico dado1 é __ sempre __ mais que o tempo3

Obrigado! Às vezes meu cérebro explode.