Errori, bug, domande - pagina 148

 
EQU:

E ancora - il codice... il codice... Il codice è buono... ma è anche - tattica, cicli... ;)

Il grafico non riceve un messaggio sulla creazione di una nuova barra? Non ci credo...)))

È un problema farne un evento? È una variabile predefinita almeno?

In generale, è più facile elaborare gli eventi che riempire una montagna di codice. E inoltre - con errori (i programmi senza errori non lo fanno mai!!! )))))

Sono assolutamente d'accordo con te che il nuovo bar è un evento e può (e deve) essere programmato. C'è un ramo su https://www.mql5.com/ru/forum/1031 leggilo con comodo, ma io ho lottato per anni...

Z.I. Penso che dopo aver letto questo vedrai che la nuova barra potrebbe non apparire MAI... un buco...

Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
  • www.mql5.com
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5".
 
EQU:

Di nuovo, codice... codice... Il codice è buono... ma anche le tattiche, i loop... ;)

Il grafico non riceve un messaggio sulla creazione di una nuova barra? Non ci credo...)))

È un problema farne un evento e almeno una variabile predefinita?

In generale, è più facile elaborare gli eventi che riempire una montagna di codice. E inoltre - con errori (i programmi senza errori non lo fanno mai!!! )))))

In generale, come la vedi? 20 timeframes x numero di simboli nel 'Market Watch' e l'evento OnNewBar è generato per ognuno di essi? E devi processare ognuno di essi, per determinare a quale simbolo e timeframe si riferisce? Ora avete la scelta: scrivere la vostra funzione NewBar e in essa definire cosa volete ricevere le nuove barre: tutti i periodi per un simbolo, tutti i simboli per il periodo corrente o qualche caso speciale. Questo si traduce in una funzione specifica e non complicata. Questo è meglio della funzione universale OnNewBar con molti controlli.
 

Durante i test, viene generato un errore

CTrade::PositionClose::OrderCheck: Richiesta di stop non valida
Nel mio Expert Advisor, ci sono le seguenti linee

descrizione delle variabili (nella procedura)

CTrade m_trade;

..................

posizione di chiusura

m_trade.PositionClose(_Symbol, eSlippage);

perché mostra un errore? CTrade::PositionClose::OrderCheck: Richiesta di stop non valida

SL e/o TP sbagliato
TRADE_RETCODE_INVALID_STOPS

Cosa c'entrano gli stop con la chiusura delle posizioni o mi sfugge qualcosa?

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Prival:

Sono assolutamente d'accordo con te che un nuovo bar è un evento e può (e deve) essere programmato. C'è un threadsu https://www.mql5.com/ru/forum/1031 che puoi leggere a tuo piacimento, ma sono anni che combatto...

Z.U. Penso che dopo aver letto questo ti sarà chiaro che la nuova barra non potrà MAI apparire... un buco...

Mi sono preso il rischio di guardare il link... Credo che valga davvero la pena leggerlo... a vostro piacimento... ;)

Questa è la ragione per volere un tale evento... Niente bar, niente evento.

 
Valmars:
In realtà, come te lo immagini? 20 timeframes x numero di simboli in 'Market Watch' e per ognuno viene generato l'evento OnNewBar? E devi processare ognuno di essi, per determinare a quale simbolo e timeframe si riferisce? Ora avete la scelta: scrivere la vostra funzione NewBar e in essa definire cosa volete ricevere le nuove barre: tutti i periodi per un simbolo, tutti i simboli per il periodo corrente o qualche caso speciale. Questo fa una funzione semplice. È meglio della funzione universale OnNewBar con molti controlli.

20 timeframes... non è il limite per un parametro lungo... riempire un'intera variabile una volta al minuto è giusto, non difficile...

Perché, OnTick guarda "x numero di caratteri nel 'Market Watch' e genera un evento per ogni..." ?????

E il controllo del bit è, credetemi, una cosa piuttosto veloce...

E anche con un evento

- nessuno mi costringerà ad elaborarlo - non c'è bisogno...

- E anche se avete un evento, nulla vi impedisce di aggiungere o sostituire "scrivete la vostra funzione NewBar e definite se volete ottenere nuove barre" - se necessario...

 
Interesting:

Anche adesso è facile da fare, se sai come farlo. Gli sviluppatori hanno promesso di riscrivere OnTrade() e aggiungervi i parametri necessari.

Nessuno impedisce che tali situazioni siano gestite localmente, in OnTick() o OnTime() - nel luogo dell'operazione di trading; o in OnTrade(), se avete bisogno di catturare azioni dell'utente o operazioni di trading non controllate direttamente dal codice.

La leggerezza è un concetto relativo e per uno si misura in grammi, per un altro in tonnellate. Nel mio Expert Advisor ho dovuto farlo COME SEMPRE (se il mio codice può essere chiamato così), perché non ci sono varianti PROSTO nel mio linguaggio ora, mentre potrebbero benissimo esistere, imho. E non ero particolarmente felice che il codice diventasse un centinaio di righe più lungo e che lo facesse sembrare più complicato.

Ecco il problema in generale:

Arriva un tick, l'indicatore mostra la necessità di chiudere, io chiudo

Quando arriva il prossimo tick, l'indicatore mostra che deve chiudere, e non so cosa fare - la posizione è già posizionata ed è impossibile scoprire cosa sta succedendo al momento, ovviamente, ma non so.

Non capisco perché questa complessità è ancora presente qui? Non capisco perché dobbiamo scrivere una tonnellata di codice nell'evento onTrade() per capire cosa è successo?

Io sono per la semplicità, e quando non c'è, mi rende triste

 
Vladix:

La leggerezza è un concetto relativo, e per uno si misura in grammi, per un altro in tonnellate. In EA ho dovuto farlo SAGGIAMENTE (se il mio codice può essere chiamato così), perché non ci sono varianti PROSTO nel linguaggio ora, mentre potrebbero benissimo esistere, imho. E non ero particolarmente felice che il codice diventasse un centinaio di righe più lungo e che lo facesse sembrare più complicato.

Ecco il problema in generale:

Arriva un tick, l'indicatore mostra la necessità di chiudere, io chiudo

Quando arriva il prossimo tick, l'indicatore mostra che dovrebbe chiudere, e non so cosa fare - la posizione è già appesa, e naturalmente posso scoprire cosa sta succedendo al momento, ma non lo so.

Non capisco perché questa complessità è ancora presente qui? Non capisco perché nell'evento onTrade() ci viene suggerito di scrivere una tonnellata di codice per capire cosa è successo?

Io sono per la semplicità, e quando non c'è, mi rende triste

L'ho fatto, il codice è meno di un centinaio di righe ... :) La soluzione è affidabile e immediatamente per multicurrency

//+----------------------------------------------------------------------------+
// Функция контроля открытия ордера на текущем баре               MQL5         |
//-----------------------------------------------------------------------------+
bool ЕстьОрдернаТекущемБаре(ENUM_ORDER_TYPE тип)
  {
   ulong тикет;
   HistorySelect(SeriesInfoInteger(СИМВОЛ,Period(),SERIES_LASTBAR_DATE),TimeCurrent());
   for(int i=0;i<HistoryDealsTotal();i=i+1)
     {
      тикет=HistoryDealGetTicket(i);
      if(HistoryDealGetString(тикет,DEAL_SYMBOL)!=СИМВОЛ || HistoryDealGetInteger(тикет,DEAL_ENTRY)==DEAL_ENTRY_STATE)// || HistoryDealGetInteger(тикет,DEAL_MAGIC)!=MAGIC
         continue;
      if(HistoryDealGetInteger(тикет,DEAL_TYPE)==тип || HistoryDealGetInteger(тикет,DEAL_TYPE)==DEAL_ENTRY_INOUT)
         return(true);
     }
   return(false);
  }
È possibile specificare qualsiasi periodo desiderato al posto di quello in cui l'EA è in bilico. Vale a dire che gli ordini saranno effettuati non più di una volta per periodo

E dopo ogni richiesta di scambio, dovremmo fare un ritardo che proibisca la richiesta di scambio entro 30 sec (per esempio). Altrimenti, l'ordine potrebbe non apparire nella cronologia al prossimo tick.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Valmars:
In generale, come te lo immagini? In generale, l'idea è di avere 20 timeframe x il numero di simboli nel 'Market Watch' e per ognuno di essi viene generato l'evento OnNewBar? E bisogna elaborare ogni simbolo e timeframe per determinare a quale si riferisce? Ora avete la scelta: scrivere la vostra funzione NewBar e in essa definire cosa volete ricevere le nuove barre: tutti i periodi per un simbolo, tutti i simboli per il periodo corrente o qualche caso speciale. Si ottiene una funzione specifica e non complicata. È meglio di una funzione universale OnNewBar con molti controlli.

In termini di una soluzione standard, dovrebbe essere qualcosa del genere

1. L'evento dovrebbe essere legato al grafico aperto, al suo periodo e al simbolo. L'evento deve verificarsi quando appare una nuova barra (i buchi sono ignorati).

Gli eventi devono essere gestiti in un thread (o thread) terminale separato.

PS

E così via. Naturalmente, questa è un'approssimazione senza tener conto di molte specificità...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Vladix:

In realtà il problema stesso è questo:

arriva un tick, l'indicatore mostra che deve chiudere, io faccio la chiusura

Quando arriva il prossimo tick, l'indicatore mostra che deve chiudere, e già non so cosa fare - la posizione è già appesa e, naturalmente, si può scoprire cosa sta succedendo al momento, ma in fondo alla mente.

Non capisco perché questa complessità è ancora presente qui? Non capisco perché nell'evento onTrade() ci viene suggerito di scrivere una tonnellata di codice per capire cosa è successo?

Io sono per la semplicità, e quando non ce l'hai, diventa triste

Forse gli sviluppatori aggiungeranno dei parametri a OnTrade(), almeno ci stavano pensando. Per quanto ne so ci sono state anche delle dichiarazioni in merito.
 
Dmitriy2:

Fatto in questo modo, meno codice di un centinaio di righe... :) la soluzione è affidabile e subito per la multicurrency

Invece del periodo in cui l'EA è inattivo, possiamo specificare qualsiasi periodo desiderato. Questo significa che gli ordini non saranno effettuati più di una volta per periodo.

E dopo ogni richiesta di scambio, dovremmo fare un ritardo che disabiliti la richiesta di scambio entro 30 secondi (per esempio). Altrimenti, l'ordine potrebbe non apparire nella cronologia al prossimo tick.

Mettere un ritardo - sì, accetto, quante righe di codice ci vorranno? E se stiamo parlando di multi-valuta, è necessario tenere conto del ritardo su ciascuna di esse, no?

Ho scritto il codice che risolve questo. Solo che non mi piace, così come, scusate, non mi piace il vostro. E non si tratta di pregiudizi, il punto è che non ci sono altre opzioni, semplici ed eleganti.

Motivazione: