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.
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.
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.
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.
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 |//+------------------------------------------------------------------+voidOnStart()
{
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.
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;
Urain:
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.
Isso é engraçado. Eu não estava a prestar atenção. Claramente explicado.
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.
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.
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.
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:
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.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
Igual a
Não há maneira de sair do laço no código porque não há nenhuma ruptura no corpo do operador;