Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1208

 
Vladpedro:

Non fa differenza. Ho il sospetto di una differenza, perché quando ho impostato ordini e posizioni, ho dato loro "commenti" per le posizioni mie, per gli ordini miei. Di conseguenza, quando un ordine si sposta in una posizione, eredita il commento dell'ordine.

Poi, quando abbiamo controllato le posizioni attraverso i commenti, c'era un casino... i commenti erano diversi. L'ho sistemato.

Nel tuo codice, non ho trovato o capito affatto come vengono chiuse le posizioni per la condizione SELL_LIMIT è scattata. Equità.

Sembra che abbiamo controllato se tutte le posizioni possono essere chiuse, e il flag è impostato per questo

ma inCloseAllPositions();

c'è qualcosa che manca.

Non c'è un controllo per la chiusura di tutte le posizioni per il caso - SELL_LIMIT è scattato.

Forse questo stessom_account.Equity()>= m_account.Balance()+15è implementato in qualche altro modo?

O forse è perché ho spiegato male cosa significa fare la media nel mio contesto.

Ho già detto sopra - gli ordini pendenti non hanno nulla a che fare con questo. Un ordine pendente non può avere un profitto. Dalla parola "a tutti". Finché non lo si chiarisce, non si può andare avanti.


Aggiunto: ho mostrato una soluzione di esempio per due casi:

  1. Se abbiamo solo due posizioni, allora dovremmo cercare quella che ha più profitto e chiuderla.
  2. Se abbiamo più di due posizioni, se il loro profitto totale è superiore a quello specificato, allora chiudiamo tutte le posizioni.
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Vladimir Karputov:

L'ho già sottolineato sopra - gli ordini pendenti non c'entrano affatto. Un ordine pendente non può avere un profitto. Dalla parola "a tutti". Finché non si chiarisce questo, non si può andare avanti.

Vladimir. Beh, ovviamente, un ordine pendente non può avere un profitto. Stiamo parlando del profitto ovviamente di posizioni aperte.

L'unica differenza è nel modo in cui queste posizioni sono state aperte. Abbiamo bisogno di un metodo di chiusura diverso per loro.

Se la seconda posizione è aperta da un ordine SELL_STOP intelligente, allora uno di essi deve essere chiuso, quello che ha un profitto maggiore della posizione. Questo ha funzionato per te e funziona.

Se la seconda posizione è stata aperta da un ordine SELL_LIMIT, allora dovrebbero essere entrambe chiuse da Equity(m_account.Equity()>= m_account.Balance()+15) A meno che lo SL di una delle due non scatti per primo.

Aggiunto.

Ho mostrato una soluzione di esempio per due casi:

  1. Abbiamo solo due posizioni - quindi cerchiamo quella con più profitto e la chiudiamo.
  2. Avere più di due posizioni - se il loro profitto totale è superiore a quello specificato - chiudere tutte le posizioni

Tutto sembra essere a posto con la seconda condizione. Ma per qualche motivo ho la seconda condizione apre la seconda posizione e la chiude immediatamente vicino a 0 -1,2.

Forse ho specificato il profitto totale in un posto sbagliato?

InpProfitTarget = 15; Se qui, non funziona.


 
Vladpedro:

Vladimir. Ovviamente un ordine pendente non può avere un profitto. Stiamo parlando di profitti, naturalmente di posizioni aperte.

Solo che c'è una differenza nel modo in cui queste posizioni sono state aperte. Abbiamo bisogno di un metodo di chiusura diverso per loro.

Se la seconda posizione è aperta da un ordine SELL_STOP intelligente, allora uno di essi deve essere chiuso, quello che ha un profitto maggiore della posizione. Questo ha funzionato per te e funziona.

Se la seconda posizione è stata aperta da un ordine SELL_LIMIT, allora dovrebbero essere entrambe chiuse da Equity(m_account.Equity()>= m_account.Balance()+15) A meno che lo SL di una delle due non scatti per primo.

Mi dispiace:

Ho mostrato una soluzione di esempio per due casi:

  1. Abbiamo solo due posizioni - quindi cerchiamo quella con il profitto maggiore e la chiudiamo.
  2. Se abbiamo più di due posizioni, se il loro profitto totale è maggiore di quello specificato, chiudiamo tutte le posizioni.


Poi, per favore, fate qualcosa voi stessi.

 
Vladimir Karputov:

Mi dispiace:

Ho mostrato una soluzione di esempio per due casi:

  1. Abbiamo solo due posizioni, quindi cerchiamo quella con il profitto più alto e la chiudiamo.
  2. Abbiamo più di due posizioni - se il loro profitto totale è superiore a quello dato, chiudiamo tutte le posizioni.


Da qui, per favore, fate qualcosa voi stessi.

Grazie per il tuo aiuto Vladimir, ci sto provando.

2. abbiamo più di due posizioni - se il loro profitto totale è maggiore di quello specificato, chiudiamo tutte le posizioni.

Ma non ne avevo bisogno, avevo bisogno di due o più posizioni in cui la seconda fosse aperta con l'attivazione diSELL_LIMIT.

Grazie comunque per la vostra pazienza e i vostri sforzi. Certo, lo risolverò a modo mio, soffrirò e lo risolverò)))

 
Buona sera ragazzi, non per moltiplicare gli argomenti - la mia domanda è questa - lo script ha impostato un ordine di stop pendente con un take e stop ben definito, non viene eseguito, e nei commenti è prescritto [illiquidità] - come combattere - per mettere in loop lo script prima dell'esecuzione, impostare uno slippage più alto, o prescrivere il numero di tentativi o cosa ? O dammi un suggerimento su dove scavare.
 
neitrino22:
Buona sera ragazzi, per non moltiplicare i thread, ecco una domanda - lo script ha messo un ordine di stop pendente con un take e stop abbastanza specifico, non viene eseguito, e nei commenti è scritto [illiquidità] - come gestirlo - mandare in loop lo script prima dell'esecuzione, impostare uno slippage più alto, o specificare il numero di retake o cosa ? O dammi un suggerimento su dove scavare.

Si dovrebbe sempre guardare nella documentazione

ORDINE_TIME_GTC

L'ordine rimarrà in coda fino a quando non sarà ritirato

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Viktorov:

Si dovrebbe sempre guardare nella documentazione

ORDINE_TIME_GTC

L'ordine rimarrà in coda fino a quando non sarà ritirato

Grazie, deve essere così

 

Buona sera!

C'è 1 posizione aperta.

L'Expert Advisor chiude una posizione usando il metodo PositionClose();

Il risultato viene stampato ResultRetcode= 10009. Descrizione del codice: fatto a 0,00

Sotto il codice, c'è un controllo if(PositionSelect(_Symbol)), che ha successo.

Cioè, passa del tempo tra l'esecuzione di PositionClose() e la scomparsa della posizione aperta, durante il quale il programma riesce a fare un'uscita sbagliata.

Come risolvere correttamente questa situazione?


 

Perché devo riavviare il terminale ogni volta dopo un test per eseguire un nuovo test?

2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Core 01 connecting to 127.0.0.1:3000
2020.04.27 15:19:08.415 Core 01 connected
2020.04.27 15:19:08.425 Core 01 authorized (agent build 2361)
2020.04.27 15:19:08.427 Tester  XAUUSD,M15 (Alpari-MT5-Demo): testing of Experts\ExpertTest.ex5 from 2017.07.26 00:00 to 2020.02.06 00:00
2020.04.27 15:19:08.466 Core 01 disconnected
2020.04.27 15:19:08.466 Core 01 connection closed

Cancello tutti gli oggetti. Chiudo i file. Ecco il log quando smetto di testare:

2020.04.27 15:15:43.188 Core 01 disconnected
2020.04.27 15:15:43.188 Core 01 connection closed
2020.04.27 15:15:43.189 Tester  stopped by user

Ma la prossima volta non parte - devo chiudere il terminale e riaprirlo. Costruire 2361.

 
Come posso ottenere un commento di posizione chiusa in OnTradeTransaction?