Qual é o projeto correto? - página 7

 
Vladon:
Eu costumava publicar meu próprio conjunto sobre o fechamento de diferentes tipos em base de código de uma só vez.
Neste caso, você está dando arquivos compilados, que não tem nenhuma utilidade neste ramo.
Vladon:
https://www.mql5.com/ru/code/mt4

E aqui, desculpe, fórum errado.

Sem ofensa.

 

Oh, não é isso :-), agora.


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
Então tal projeto deveria, em teoria, fechar todas as ordens, mas fecha apenas um par da janela atual, qual é o erro?
 
Vladon:

Oh, não é isso :-), agora.


https://www.mql5.com/ru/code/9052


Sim, seu kit é bom, mas não consigo descobrir onde o bug está em meu código.
 
valenok2003:

Sim, seu kit é bom, mas não consigo descobrir onde o bug está em meu código.

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
Às vezes a teimosia é espantosa. Na página 3 deste tópico e mais abaixo foi mostrado a você um exemplo adequado de ordens superiores. RTFM no final do dia. Quantas vezes tenho que lhe dizer: Saia fora de uma matriz. Pedidos com o número
OrdersTotal()

não existe ! Então funcionará :

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
Às vezes a teimosia é simplesmente espantosa. Na página 3 deste tópico e mais abaixo, foi-lhe mostrado o exemplo correto de pedidos excedidos. RTFM no final do dia. Quantas vezes tenho que lhe dizer: Saia fora da matriz. Pedidos com número

não existe ! Então funcionará :


Vladislav, peço desculpas, não é teimosia, mas sim desatenção. Eu estava experimentando e não corrigi o código.

É claro que é:

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

Entretanto, essa não parece ser a razão, pois o projeto corrigido

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

ainda fecha as ordens somente no par da janela em que se joga o roteiro, mas não em todos os pares.

 

Do perfil inicial "Eu escrevo em MQL4, inclusive sob medida" - um exemplo típico de excesso de zelo.

Eu entendo que os programadores podem ser medianos. Você se acostuma a isso. E eu mesmo às vezes escrevo código ruim, embora eu tente. Mas o que seria...

Confirmo a velha suposição de alguém, o iniciador tem lã em sua cabeça.

 
valenok2003:


Vladislav, peço desculpas, não é teimosia, mas sim desatenção. Eu estava experimentando e não corrigi o código.

É claro que sim:

No entanto, esta não parece ser a razão, porque o projeto corrigido

ainda fecha os pedidos apenas para um par da janela na qual o roteiro é lançado, mas não para todos os pares.

Se todos os pares, então você não está usando o Ask corretamente, Bid - você está tirando da tabela atual. Se você processar erros ao fechar pedidos - você verá as mensagens.

em vez de Ask - MarketInfo(OrderSymbol(),MODE_ASK); em vez de Bid - MarketInfo(OrderSymbol(),MODE_BID);

Boa sorte.

ZS e mudar o nome do roteiro, pois de acordo com o nome ele funciona corretamente ;).

 
gip:

Do perfil inicial "Eu escrevo em MQL4, inclusive sob medida" - um exemplo típico de excesso de zelo.

Eu entendo que os programadores podem ser medianos. Você se acostuma a isso. E eu mesmo às vezes escrevo código ruim, apesar de tentar. Mas o que seria...

Eu confirmo a velha suposição de alguém, o iniciante do tópico tem lã em sua cabeça.


É uma vergonha ouvir isso, é claro. Entretanto, eu nunca recebo ordens que não possa cumprir. E você, espero eu, entende que os níveis de pedidos também podem variar. E, como alguém disse - não há vergonha em não saber. É uma pena não perguntar.... E, segundo entendi, este fórum existe precisamente para proporcionar uma oportunidade de aprendizagem. Por isso, sua esnobismo não é claro para mim, e suas críticas, eu não aceito. Embora eu admita que você seja o mais inteligente neste fórum.

P.S. A arte da programação não está na capacidade de escrever código, mas na capacidade de fazer um algoritmo correto. É como se você tivesse conduzido um Lada a vida inteira e depois se mudasse para a Mercedes e não soubesse onde estão todos os botões e botões, você não se tornou um mau motorista por causa disso.

 
VladislavVG:

Se todos os pares, você não está usando o Ask corretamente, Bid - você está tirando da tabela atual. Se você processasse erros ao fechar pedidos, você veria a mensagem.

em vez de Ask - MarketInfo(OrderSymbol(),MODE_ASK); em vez de Bid - MarketInfo(OrderSymbol(),MODE_BID);

Boa sorte.


Muito obrigado, estou processando os erros, a mensagem retorna - preço errado, mas não consigo descobrir o que está errado.
Razão: