[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 451

 
Vinin:

Por que o provérbio inglês "grandes mentes pensam da mesma forma" em russo
correspondem à frase "os tolos pensam da mesma forma"?

 
Vinin >>:

Наверно надо предварительно выбрать ордер.

Eu sei, já escrevi antes na página 445, mas ainda tenho um problema.


Meu problema está chegando a um ponto ridículo. Erro na função de fechamento de ordem.

OrserClose(int tip){
if( tip==1){
for( i=0; i<OrdersTotal(); i++){
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber() == Magic){
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
               }
           }
         }  
}

Recebi um erro (em terminais diferentes)

EURCHF,M5: Erro de fechamento do pedido 4107

EURCHF,M5: preço inválido 1,48566000 para a função OrderClose


se eu fizer

OrderClose(OrderTicket(), OrderLots(),OrderClosePrice(),3, Violet);
OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),3,Violet);

Mas quando eu escrevo OrderClose(...) não em uma função separada, mas em int start(), este erro não ocorre.

Qual é o problema e como resolvê-lo?



 
Urain писал(а) >>

Por que o provérbio inglês "grandes mentes pensam da mesma forma" em russo
correspondem a "os tolos pensam da mesma forma"?

Então estamos com sorte.

 
T-G писал(а) >>

Eu sei, já escrevi antes na página 445, mas ainda tenho um problema.

Meu problema está chegando a um ponto ridículo. Erro na função de fechamento de ordem.

Recebi um erro (em terminais diferentes)

EURCHF,M5: Erro de fechamento do pedido 4107

EURCHF,M5: preço inválido 1,48566000 para a função OrderClose

se eu fizer

Mas quando eu escrevo OrderClose(...) não em uma função separada, mas em int start(), este erro não ocorre.

Qual é o problema e como resolvê-lo?

Eu não sei, eu não sei. Eu sempre uso minha própria função para fechar o pedido.

Como exemplo, este aqui.

//+------------------------------------------------------------------+
//|                                         Функция закрытия ордеров |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| void Order_Close(int lMagic, int lOP=-1);                        |
//+------------------------------------------------------------------+
void Order_Close(int lMagic, int lOP=-1){
   bool res;
   GetLastError();
   for(int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != Symbol())                     continue;
      if (OrderMagicNumber() != lMagic)                   continue;
      if (OrderType()!= lOP && lOP!=-1)                     continue;
      
      RefreshRates();
      double _ask      =MarketInfo(Symbol(),MODE_ASK);
      double  _bid     =MarketInfo(Symbol(),MODE_BID);
      double  _point   =MarketInfo(Symbol(),MODE_POINT);
      double  _digits  =MarketInfo(Symbol(),MODE_DIGITS);

      double ClosePrice=NormalizeDouble( iif(OrderType()==OP_BUY,_bid, _ask),_digits);
      res=OrderClose(OrderTicket(), OrderLots(), ClosePrice, 3, iif(OrderType()==OP_BUY, clCloseBuy, clCloseSell));
      if (! res) {
         int err=GetLastError();
         Print("Error(", err,") delete order ", NameOP[ lOP],": ", ErrorDescription( err));
      }
   }
}

Para utilizá-lo você precisa de mais funções

//+------------------------------------------------------------------+
//|                                    Функция логического сравнения |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| double iif(bool A, double B, double C);                          |
//+------------------------------------------------------------------+
double iif(bool A, double B, double C) {if( A) return( B); return( C); }
 

Ajuda com o problema de controlar os buracos no histórico. Por favor, informe sobre um mecanismo realmente funcional para que o Expert Advisor pegue o erro 4066.

Se não houver um controle inequívoco sobre o procedimento de carregamento de dados do histórico, não faz sentido negociar usando o Expert Advisors.

O risco de tais negociações tende simplesmente ao infinito, qualquer que seja a estratégia comercial que você utilize.


Fiquei muito surpreso que a solução para este problema o usuário tenha que pensar por conta própria e através de um só lugar.

Acho que a falta de apoio claro do desenvolvedor nesta questão é uma pura armadilha.

Penso que a MetaQuotes poderia publicar um conjunto de soluções recomendadas e testadas para questões e problemas comuns.

 
MoneyJinn писал(а) >>

Penso que a MetaQuotes poderia publicar um conjunto de soluções recomendadas e testadas para questões e tarefas comuns.

O artigo "Gráficos sem buracos"... pode ajudar... https://www.mql5.com/ru/articles/1407

 

O tema é "qualquer pergunta" e não apenas sobre o código, certo?

Eu tenho uma pergunta, ou melhor, quero uma opinião, para onde você acha que o preço irá?



 
 
T-G >>:

Тема же называется "любой вопрос" а не только по коду?

У меня вопрос, а точнее хочется узнать мнение, куда по вашему мнению двинется цена?

esta não é uma questão de principiante :)

 
Ajude a resolver este problema.
Se existe uma função que divide um lote superdimensionado em vários pedidos, por favor, compartilhe.

Obrigado.