Erros, bugs, perguntas - página 347

 
Portanto, ou é um bug no terminal ou no histórico do servidor. Mas é mais provável que o terminal, uma vez que os relatórios do histórico do servidor são mais susceptíveis de ter sido recuperado.
 

Urain:
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.

Isso é engraçado. Eu não estava a prestar atenção. Claramente explicado.
 
Yedelkin:
Isso é engraçado. Eu não estava a prestar atenção. Claramente explicado.
É isso, quem se diverte e quem tem duas semanas para apanhar o insecto :o)
 
Encontrámo-lo, por defeito, a ordenação por tempo e precisa de ordenar por número de transacção. Está tudo bem, então.
 
Urain:
Encontrámo-lo, por defeito, a ordenação por tempo e precisa de ordenar por número de transacção. Então tudo está correcto.

Então não há erros? O objectivo é contar/classificar os negócios por número de bilhete, não por tempo.

Estava apenas a rever superficialmente os relatórios, não a calcular os estados de posição.

 
Renat:

Então não há bugs? O objectivo é contar/ordenar as transacções por bilhete e não por tempo.

Estava apenas a rever superficialmente os relatórios, não a calcular os estados de posição.

Exactamente, é apenas que quando se guarda um relatório não há automatização deste processo e este precisa de ser cuidadosamente monitorizado. Não creio que todos os utilizadores prestem atenção a isto e, como resultado, haverá bugs ao analisar o relatório.

ZS Acrescentei a classificação após a análise do relatório. Como resultado, funcionou para mim, mas prevejo que mais do que um programador terá dificuldades com esta funcionalidade.

 

Durante a optimização, o nome do parâmetro de optimização é apresentado no canto superior direito do gráfico de optimização.


Ao observar a optimização, esta inscrição é aborrecida porque o novo máximo está sempre escondido por detrás desta inscrição.

Renat, vamos movê-lo para o canto superior esquerdo! Ou para o canto inferior direito. Ou na parte inferior esquerda... Em qualquer lado, basta tirá-lo do canto superior direito, por amor de Deus! :)

// Ou pelo menos torná-lo pálido e colocá-lo em segundo plano para que não obscureça a informação.

 
MetaDriver:

Durante a optimização, o nome do parâmetro de optimização é apresentado no canto superior direito do gráfico de optimização.

Ao observar a optimização, esta inscrição é aborrecida porque o novo máximo está sempre escondido por detrás desta inscrição.

Renat, vamos movê-lo para o canto superior esquerdo! Ou para o canto inferior direito. Ou na parte inferior esquerda... Em qualquer lado, basta tirá-lo do canto superior direito, por amor de Deus! :)

// Ou pelo menos torná-lo pálido e colocá-lo em segundo plano para que não obscureça a informação.

Em baixo à esquerda, e como pano de fundo.
 

Por favor, digam-me onde errei. Estou a tentar escrever um guião simples que apaga posições e ordens pendentes sobre o instrumento actual. Aqui:

//+------------------------------------------------------------------+
//|                                                        clean.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick current_tick;
   MqlTradeRequest close_request;
   MqlTradeResult  close_result;
   SymbolInfoTick(_Symbol,current_tick);
   int counter01;
   while(check_position()==true);
     {
      PositionSelect(_Symbol);
      close_request.action=TRADE_ACTION_DEAL; close_request.symbol=_Symbol; close_request.volume=PositionGetDouble(POSITION_VOLUME); close_request.type_filling=ORDER_FILLING_AON;
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         close_request.price=current_tick.bid; close_request.type=ORDER_TYPE_SELL;
        }
      else
        {
         close_request.price=current_tick.ask; close_request.type=ORDER_TYPE_BUY;
        }
      OrderSend(close_request,close_result);
     }
   do
     {
      for(counter01=1; counter01<=OrdersTotal(); counter01++)
        {
         close_request.order=OrderGetTicket(counter01-1);
         if(OrderGetString(ORDER_SYMBOL)==_Symbol)
           {
            close_request.action=TRADE_ACTION_REMOVE;
            OrderSend(close_request,close_result);
           }
        }
     }
   while(check_order()==true);
   if(GetLastError()!=0)
      Print("ошибка код ",GetLastError()," функция ",__FUNCTION__," строка ",__LINE__);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_position() // функция проверяет наличие позиции
  {
   int counter01;
   bool position_exsist=false;
   for(counter01=0; counter01<PositionsTotal(); counter01++)
     {
      if(PositionGetSymbol(counter01)==_Symbol)
        {
         position_exsist=true;
         break;
        }
     }
   return(position_exsist);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_order() // функция проверяет наличие ордеров
  {
   int counter01;
   bool order_exsist=false;
   for(counter01=0; counter01<OrdersTotal(); counter01++)
     {
      OrderGetTicket(counter01);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
        {
         order_exsist=true;
         break;
        }
     }
   return(order_exsist);
  }
//+------------------------------------------------------------------+
O guião fica pendurado quando existe uma posição. Ao depurá-lo, descobri que congela ao verificar a posição. Quando a condição de loop while(check_position()==verdadeiro) começa a ser verificada, o controlo é passado para check_position() e a primeira vez que a função é executada normalmente, ela retorna verdadeiro. Mas então o corpo do laço não é executado; ele começa a verificar a condição novamente e o controlo começa a verificar_posição() e depois do operador return(order_exsist) não volta à condição do laço; ele vai para o início da função check_position(). Por favor, digam-me onde cometi um erro.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Основы языка / Операторы / Оператор возврата return - Документация по MQL5
 
molotkovsm:

Por favor, digam-me onde errei. Estou a tentar escrever um guião simples que apaga posições e ordens pendentes sobre o instrumento actual. Aqui está:

O guião fica pendurado quando existe uma posição. Ao depurá-lo, descobri que congela ao verificar a posição. Quando a condição de loop while(check_position()==true) começa a verificação, o controlo é passado para a função check_position() e à primeira vez a função é executada normalmente, retorna verdadeiro. Mas então o corpo do laço não é executado; ele começa a verificar a condição novamente e o controlo começa a verificar_posição() e depois do operador return(order_exsist) não volta à condição do laço; ele vai para o início da função check_position(). Por favor, digam-me onde devo estar enganado.

Se houver uma posição, terá um loop infinito porque

while(check_order()==true);

Igual a

while(check_order()==true)
{
 //  пустой оператор
}
Não há maneira de sair do laço no código porque não há nenhuma ruptura no corpo do operador;