Erros, bugs, perguntas - página 2410

 
Vladimir Karputov:

Nuh-uh :)

OK. Ilumina-nos. Que erro no código, ou que código, pode fechar uma posição no testador ao preço de outro instrumento. Estou muito, muito interessado.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Sergan:

O código é de vários milhares de linhas. Não vale a pena anexá-lo. não há variáveis estáticas. Há aulas. Em qualquer caso, é um erro do testador.

Aí está o seu erro.

No modo de depuração, executar uma verificação antes de enviar uma ordem de comércio. Veja-se o símbolo e os preços. E testar pelo menos no modo "Todas as carraças".

 
Andrey Barinov:

OK. Ilumina-nos. Que erro no código, ou que código, poderia fechar uma posição no testador ao preço de outro instrumento. Estou realmente, realmente curioso.

Facilmente. Depende directamente da escravidão do código. Eu próprio o fiz :). Sistema mal pensado de controlo de inicialização de classes de caracteres. E ainda há variáveis estáticas.

De qualquer modo, não faz sentido falar mais sem o código escrito pela pessoa de quem se está a falar.

 
Vladimir Karputov:

Facilmente. É uma correlação directa com a curvatura do código. Fui eu próprio que o fiz :). Sistema insuficientemente elaborado de controlo de inicialização de classe de carácter. E, além disso, existem variáveis estáticas.

Portanto, não faz sentido falar mais sem lhe perguntar sobre o código.

Pode mostrar-nos um exemplo de código? Como fechar uma posição em EURUSD ao preço GPBUSD?

Se assim for, não será um problema para si. Ficar-lhe-ia muito grato.

 
Andrey Barinov:

Pode mostrar-me um código de exemplo? Como fechar uma posição EURUSD ao preço GPBUSD?

Se assim for, não seria um problema para si. Ficar-lhe-ei muito grato.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Insectos, insectos, perguntas

Vladimir Karputov, 2019.03.24 05:58

É fácil. A dependência da curvatura do código. Eu próprio cometi tais erros :). Sistema insuficientemente bem pensado de controlo de inicialização da classe de carácter. E mais variáveis estáticas.

De qualquer modo, não faz sentido falar mais sem o código escrito pela pessoa de quem se está a falar.


 
É assim que os graal tester graals podem ser frios, não há mais graal de fuga, frios)
 

Não há erro no modo de depuração, visualização. A posição é encerrada não por ordem comercial, mas por ordem de stop loss:



Muito possivelmente um erro lógico no código, muito provavelmente aqui, vou investigar, claro, ainda não sei como - nenhum erro no modo de depuração:



consegue estabelecer uma paragem para uma encomenda em 1,60704, 3000 pips acima do preço actual da posição.

O provador deveria ter proibido a paragem neste caso.

 

Aqui estou a olhar para o registo:

a ordem para alterar a paragem é enviada para gpbusd, a linha destacada, mas é efectivamente executada para eurus - a seguir.


aqui está o código para definir a paragem


bool MyOrderSend( MqlTradeRequest &req, MqlTradeResult &res ){

  
  //Print("Попытка выполнения OrderSend ... ");
  Print("Try to execute OrderSend ... for ", req.symbol );
  ResetLastError();
  if (OrderSend( req, res  )){
    if( res.retcode != TRADE_RETCODE_DONE ){
      //Print("Ошибка обработки торгового запроса,код ответа сервера: ", res.retcode, "Описание:", TradeServerReturnCodeDescription(res.retcode) );
      Print("Error of trade requaest: ", res.retcode, "Description:", TradeServerReturnCodeDescription(res.retcode) );
      Print(STradeRequest(req) );
      return(false);
    }else{
      //Print("Успех, код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print("Success, return code is : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print(STradeRequest(req) );
    }
    return(true);
  }else{
    //Print("Ошибка выполнения OrderSend в ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    Print("Error of execution OrderSend in ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    //Print("Код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print("Server return code : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print(STradeRequest(req) ); 
    return(false);
  }
  return(true);
}


onde


OrderSend( req, res  )

função mql nativa, não sobrecarregada.

i.e. aqui

 Print("Try to execute OrderSend ... for ", req.symbol );


diz que estabelece uma paragem para gbpusd e deve ser assim, mas na realidade


OrderSend( req, res  )


define-o para eurusd

 
Aleksey Sergan:

Aqui estou a olhar para o registo:

a ordem para alterar a paragem é enviada para gpbusd, a linha destacada, mas é efectivamente executada para eurus - a próxima.

há 2 erros.

№1. O seu erro. Algures no código. Define-se um SL para uma posição EURUSD usando o preço GBPUSD. O terminal não deve ter nada contra ele.

№2. Bug no terminal. Se este SL for accionado a um preço que não existe na altura no fluxo EURUSD, utilizando o preço GBPUSD.

 
Aleksey Sergan:

Aqui estou a olhar para o registo:

a ordem para alterar a paragem é enviada para gpbusd, a linha destacada, mas é efectivamente executada para eurus - a seguir.


aqui está o código para definir a paragem



onde


função mql nativa, não sobrecarregada.

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Aparentemente, ao enviar um pedido de modificação, o campo de posição tem precedência sobre o símbolo. Imprimirreq.position

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Взаимодействие клиентского терминала и торгового сервера для проведения операций постановки ордеров производится посредством торговых запросов. Запрос представлен специальной предопределенной структурой MqlTradeRequest, которая содержит все поля, необходимые для заключения торговых сделок. Результат обработки запроса представлен структурой...