Errori, bug, domande - pagina 2410

 
Vladimir Karputov:

Nuh-uh :)

OK. Illuminaci. Quale errore nel codice, o quale codice, può chiudere una posizione nel tester al prezzo di un altro strumento. Sono davvero, davvero interessato.

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

Il codice è di diverse migliaia di righe. Non ha senso aggiungerlo, non ci sono variabili statiche. Ci sono delle classi. In ogni caso è un errore del tester.

Ecco il vostro errore.

In modalità debug, esegui un controllo prima di inviare un ordine di compravendita. Guarda il simbolo e i prezzi. E prova almeno in modalità "Tutte le zecche".

 
Andrey Barinov:

OK. Illuminaci. Quale errore nel codice, o quale codice, potrebbe chiudere una posizione nel tester al prezzo di un altro strumento. Sono davvero, davvero curioso.

Facilmente. Dipende direttamente dalla slavità del codice. L'ho fatto io stesso :). Sistema di controllo dell'inizializzazione delle classi di caratteri mal concepito. E in più ci sono le variabili statiche.

Comunque, non ha senso parlare oltre senza il codice scritto dalla persona di cui si chiede.

 
Vladimir Karputov:

Facilmente. È una correlazione diretta con la curvatura del codice. L'ho fatto io stesso :). Sistema di controllo insufficientemente elaborato dell'inizializzazione delle classi di caratteri. E in più ci sono le variabili statiche.

Quindi non ha senso parlare oltre senza chiedervi il codice.

Puoi mostrarci un esempio di codice? Come posso chiudere una posizione in EURUSD al prezzo GPBUSD?

Se è così, non sarà un problema per voi. Te ne sarei molto grato.

 
Andrey Barinov:

Puoi mostrarmi un codice di esempio? Come si chiude una posizione EURUSD al prezzo GPBUSD?

Se è così, non sarebbe un problema per voi. Vi sarò molto grato.

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

Vladimir Karputov, 2019.03.24 05:58

È facile. La dipendenza della curvatura del codice. Anch'io ho fatto questi errori :). Sistema di controllo dell'inizializzazione delle classi di caratteri non sufficientemente ben concepito. E in più le variabili statiche.

In ogni caso, non ha senso parlare oltre senza il codice scritto dalla persona di cui si chiede.


 
Ecco quanto possono essere fighi i tester graals, niente più pips trailing, cool)
 

Non c'è nessun errore nel debug, modalità di visualizzazione. La posizione non viene chiusa da un ordine di trading, ma da uno stop loss:



Molto probabilmente un errore logico nel codice, molto probabilmente qui, lo esaminerò, naturalmente, non so ancora come - nessun errore in modalità debug:



riesce a impostare uno stop per un ordine a 1,60704, 3000 pip sopra il prezzo corrente della posizione.

Il tester avrebbe dovuto proibire l'impostazione dell'arresto in questo caso.

 

Qui sto guardando il registro:

l'ordine di cambiare lo stop viene inviato per gpbusd, la linea evidenziata, ma viene effettivamente eseguito per eurusd- dopo.


Ecco il codice per impostare lo stop


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);
}


dove


OrderSend( req, res  )

funzione nativa mql, non sovraccaricata.

cioè qui

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


dice che imposta uno stop per gbpusd e dovrebbe essere così, ma in realtà


OrderSend( req, res  )


imposta per eurusd

 
Aleksey Sergan:

Qui sto guardando il registro:

l'ordine di cambiare lo stop viene inviato per gpbusd, la linea evidenziata, ma viene effettivamente eseguito per eurusd- quella successiva.

ci sono 2 errori.

№1. Il tuo errore. Da qualche parte nel codice. Hai impostato uno SL per una posizione EURUSD usando il prezzo GBPUSD. Il terminale non dovrebbe avere nulla in contrario.

№2. Bug nel terminale. Se questo SL viene attivato ad un prezzo che non esiste in quel momento nel flusso EURUSD, utilizzando il prezzo GBPUSD.

 
Aleksey Sergan:

Qui sto guardando il registro:

l'ordine di cambiare lo stop viene inviato per gpbusd, la linea evidenziata, ma viene effettivamente eseguito per eurusd- dopo.


Ecco il codice per impostare lo stop



dove


funzione nativa mql, non sovraccaricata.

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

A quanto pare, quando si invia una richiesta di modifica, il campo posizione ha la precedenza sul simbolo. Stampareq.position

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