Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 19

 
Artyom Trishkin:

Come posso determinare il tempo di apertura dell 'ultima posizione e il tempo di chiusura dell'ultima posizione?

In generale, vorrei conoscere i principi generali e gli algoritmi per ottenere informazioni sulle posizioni aperte/chiuse in mql5.

Cosa bisogna considerare, quali peculiarità ci sono al momento?

La questione è che sto usando la sintassi MQL4, che è 1000 volte più facile e comprensibile della sintassi MQL5 per lavorare con la parte commerciale.

Sapete bene quanto sia facile e chiaro il vostro compito che può essere risolto in tre righe in MQL4. Ecco perché è esattamente il modo in cui lo faccio io.

Per le risposte a tutte le domande riguardanti MQL5 sto esaminando il codice sorgente della libreria. Tutte le sfumature che conosco sono state considerate lì.

Al momento possiamo affermare che le posizioni Hedge e Netting sono molto diverse. Per esempio, nel Netting si può sempre avere una sola posizione per mesi, mentre si fa costantemente trading. Pertanto, la posizione Netting nella normale comprensione di MT5 è qualcosa di mal concepito e, di conseguenza, scomodo. Quindi per questa rete possiamo creare la nostra essenza di posizione. In MT4 si possono anche avere posizioni Netting, ma con un'interazione molto più chiara.

Aprire una posizione per 1 lotto. Poi chiudilo a 0,99, e deposita lo stesso importo. E così via diverse volte.

Hedge è conveniente non perché puoi avere posizioni multidirezionali, ma perché puoi avere diverse posizioni su un simbolo di UNA direzione. Questo è esattamente il modo in cui vedo comodo lavorare con le posizioni nei sistemi di reti. Non come in MT5.

Idealmente, quando si lavora con i conti Netting, si dovrebbe sempre avere una tabella che corrisponde completamente ai conti MT4. Perché solo queste tabelle ti danno una comprensione immediata di ciò che è successo e come è successo nel conto di trading. Non la statistica MT5.

Per quanto riguarda l'MT5-Hedge, tutto è semplice. CloseBy, però, non ci ho scavato dentro. Perciò non lo so.

 
fxsaber:
Non è sempre possibile conoscere i livelli SL/TP di una posizione chiusa.

Dalla citazione segue anche che le posizioni TP in MT5 sono sempre un ordine a mercato. Non mettere nei preferiti la controparte del limite - vedi sopra.

Ora questo è interessante... Ho bisogno di sapere con certezza che l'ultima posizione chiusa è stata chiusa al take profit.

C'è un modo per scoprirlo con certezza?

 
Artyom Trishkin:

Ora questo è interessante... Ho bisogno di sapere con certezza che l'ultima posizione chiusa è stata chiusa al take profit.

C'è un modo per saperlo con certezza?

Sto facendo come consigliato:

//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Take Profit               |
//+------------------------------------------------------------------+
bool IsClosedByTP (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "tp"
  if(StringFind (last_comment, "tp", 0) > -1)
    return (true);
  //--- Если нет строки "tp"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss                 |
//+------------------------------------------------------------------+
bool IsClosedBySL (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "sl"
  if(StringFind (last_comment, "sl", 0) > -1)
    return (true);
  //--- Если нет строки "sl"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе     |
//+------------------------------------------------------------------+
string LastDealComment (const string symbol)
{
  int    total_deals  = 0;  // Всего сделок в списке выбранной истории
  string deal_symbol  = ""; // Символ сделки
  string deal_comment = ""; // Комментарий сделки
                            //--- Если история сделок получена
  if(HistorySelect (0, TimeCurrent ()))
  {
    //--- Получим количество сделок в полученном списке
    total_deals = HistoryDealsTotal ();
    //--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
    for(int i = total_deals - 1; i >= 0; i--)
    {
      //--- Получим комментарий сделки
      deal_comment = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_COMMENT);
      //--- Получим символ сделки
      deal_symbol = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_SYMBOL);
      //--- Если символ сделки и текущий символ равны, остановим цикл
      if(deal_symbol == symbol)
        break;
    }
  }
  //---
  return (deal_comment);
}
 
Andrey Dik:

Sto facendo come consigliato.

OK, come faccio a sapere se l'ultimo trade ha causato la chiusura o l'inversione di una posizione?

Se la posizione è chiusa o invertita, allora ha senso controllare i suoi dati, che saranno necessari per la logica dell'advisor: volume, fatto di chiusura su take o stop, ecc.

Altrimenti, se il fatto di chiudere su take è stato rilevato nell'ultimo trade, ma la posizione è rimasta, allora non ha senso controllare i dati sull'ultima posizione chiusa (esiste ancora).

In generale, naturalmente, è difficile passare rapidamente alla logica del sistema di ordini MT5 dopo il quattro - così molte domande sorgono quando si pensa alla logica del comportamento dell'EA, che dipende dai dati dell'ultima posizione chiusa - nel quattro è tutto trasparente - la posizione ha il proprio tipo, ed è l'ultima - è adatto - prendere i dati e usarli. Ma qui ... copertura, rete ... e abbiamo bisogno dello stesso risultato... e poi cominciamo a pensare in modo diverso...

 
Artyom Trishkin:

OK, quindi come fai a sapere se l'ultimo trade ha portato a una chiusura o a un'inversione di posizione?

1. Se la posizione è chiusa o invertita, allora ha senso controllare i suoi dati, che saranno necessari per la logica dell'Expert Advisor: il volume, il fatto di chiudere su take o stop, ecc.

Altrimenti, se il fatto di chiudere sul take profit è stato rilevato nell'ultima posizione, ma la posizione è rimasta, allora non ha senso controllare i dati sull'ultima posizione chiusa (esiste ancora).

In generale, naturalmente, è difficile passare rapidamente alla logica del sistema di ordini MT5 dopo la quattro - così tante domande sorgono quando si pensa alla logica del comportamento dell'advisor, che è legato ai dati sull'ultima posizione chiusa - nella quattro è tutto trasparente - la posizione ha il suo tipo, ed è l'ultima - ci sta, prendiamo i dati e li usiamo. Ma qui ... copertura, rete ... e abbiamo bisogno dello stesso risultato... e poi cominciamo a pensare dappertutto...

1. Controlla il tipo di transazione, IN, OUT o IN/OUT

2. Se una posizione è chiusa da SL o TP, è già chiusa, non abbiamo bisogno di controllare il tipo di accordo.

 
Andrey Dik:

1. Controlla il tipo di transazione, IN, OUT o IN/OUT

2. Se la posizione è chiusa da SL o TP, non c'è più, è chiusa, non è necessario controllare il tipo di trade.

È valido per le reti? O per una siepe? Non è possibile avere diverse posizioni in una direzione in un conto di copertura? O è una posizione, e ....? Cos'è "e"? ... Merda... Non so cosa sia la "e"... Ci sono molte domande, le risposte non sono ancora nella mia testa.
 
Artyom Trishkin:
È vero per le reti? O è vero anche per la copertura? Non ci possono essere diverse posizioni in una direzione in un conto di copertura? O è una posizione, e ....? Cos'è "e"? ... Merda... Non so cosa sia la "e"... Molte domande, nessuna risposta ancora.

Anche per la siepe.

Nel corso degli anni il mio cervello si è affinato per fare il netting: Ordine->Transazione->Posizione. Ci possono essere molti accordi in una posizione (in un hedge c'è un solo accordo, correggetemi se sbaglio), si può dire cosa è successo alla posizione dal tipo di accordo.

In una copertura è ovviamente più facile da capire, ma più difficile da seguire. Naturalmente, questa è la mia opinione personale.

 
Andrey Dik:

Anche per una siepe.

Nel corso degli anni il mio cervello si è affinato per fare il netting: Ordine->Transazione->Posizione. Ci possono essere molti accordi in una posizione (in un hedge c'è un solo accordo, correggetemi se sbaglio), si può dire cosa è successo alla posizione dal tipo di accordo.

In una copertura è ovviamente più facile da capire, ma più difficile da seguire. IMHO naturalmente.

Capisco, grazie. Troverò il modo.
 
Artyom Trishkin:

Ora questo è interessante... Ho bisogno di sapere con certezza che l'ultima posizione chiusa è stata chiusa al take profit.

C'è un modo per saperlo con certezza?

Quando si trova l'ultima operazione DEAL_ENTRY_OUT e si seleziona l'intera storia della posizione HistorySelectByPosition in questa lista, ci sono 2 operazioni e 2 ordini, aprendo una posizione e chiudendola. L'ordine in base al quale è avvenuta la chiusura contiene ORDER_PRICE_OPEN. Poi si controlla il tipo di posizione e il tipo di ordine che è stato usato per chiuderla. Se il tipo di ordine è opposto, significa che era una chiusura. Di conseguenza, il prezzo dell'ordine è il prezzo che dovremmo cercare, con una piccola correzione: se il profitto dell'ordine è > 0, allora questo è il prezzo di TP, se è < 0, allora la posizione ha chiuso su SL.

Se prendiamo in considerazione il commento all'ordine, non dovremmo fare affidamento su di esso.

 
Alexey Viktorov:

Quando si trova l'ultimo trade DEAL_ENTRY_OUT e si seleziona l'intera storia della posizione HistorySelectByPosition in questa lista ci sono, per i conti hadge 2 trade e 2 ordini, aprendo una posizione e chiudendola. L'ordine in base al quale è avvenuta la chiusura contiene ORDER_PRICE_OPEN. Poi si controlla il tipo di posizione e il tipo di ordine che è stato usato per chiuderla. Se il tipo di ordine è opposto, significa che era una chiusura. Di conseguenza, il prezzo dell'ordine è il prezzo che dovremmo cercare, con una piccola correzione: se il profitto dell'ordine è > 0, allora questo è il prezzo di TP, se è < 0, allora la posizione ha chiuso su SL.

Se ci basiamo sul commento all'ordine non lo farei.

E la SL? Come si fa a determinare quale era la rete a strascico SL chiusa in profitto?
Motivazione: