Caratteristiche utili da KimIV - pagina 20

 

Funzione GetTypeLastClosePos().

Questa funzione restituisce il tipo dell'ultima posizione chiusa o -1. Una selezione più accurata delle posizioni da prendere in considerazione è definita da parametri esterni:

  • sy - Nome dello strumento di mercato. Se si specifica questo parametro, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • mn - identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней закрытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. In allegato c'è uno script per testare la funzione GetTypeLastClosePos().
 

Funzione GetTypeLastOpenPos().

Questa funzione restituisce il tipo dell'ultima posizione aperta o -1. Una selezione più accurata delle posizioni da prendere in considerazione è specificata da parametri esterni:

  • sy - Nome dello strumento di mercato. Se impostate questo parametro, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • mn - identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. In allegato c'è uno script per testare la funzione GetTypeLastOpenPos().
 
KimIV:

Funzione OpenPosition() per l'online.

      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      

Cosa significano i codici di errore 142 e 143.

Grazie.

 
zennon:

Cosa significano i codici di errore 142 e 143?

142 - L'ordine è stato messo in coda.

143 - L'ordine è stato accettato dal rivenditore per l'esecuzione.

Per ulteriori informazioni , vedere qui.

 

Il dottore consiglia di trattarli come errore 128

se possibile, una parola o due su questo dal vostro punto di vista o posizione...

 
kombat:

Il dottore consiglia di trattarli come errore 128

Se possibile, una parola o due su questo dal tuo punto di vista o posizione...

Il mio punto di vista è espresso nel codice dato da Andrei due post sopra.

 

Scusa... l'ha visto, naturalmente...

Non mi è molto chiaro.

Sleep(1000*66.666);

A parte questo, non so... dormire...

Ma se e se oltre, non tanto.

cioè dormire, poi se c'è una posizione, se suoniamo una marcia.

-

OK, se è una domanda più debole, scusate ancora, e può essere senza risposta.

 
kombat писал (а):
Ok, se è una domanda da sfigato, mi dispiace di nuovo, e la lascio così.

nah... risolviamo la questione... ...una resa dei conti approfondisce la comprensione... Non capisco cosa non capisci. Metti la domanda in termini più semplici e convenzionali. Siete confusi dall'intervallo di ibernazione? Perché esattamente 66 secondi?

 
KimIV:
Perché esattamente 66 secondi?

No, non quello! Non c'è dubbio... assolutamente!

Ma l'ulteriore azione logico-sequenziale in questo frammento non è così buona.

Diciamo che otteniamo un codice di errore, dormiamo, poi otteniamo un boolt, Spoin's Waltz suona se questa funzione è attiva...

-

(dannazione, le code dei messaggi mancano, devo ripetere :((((

-

Molto più interessato a come continuare ciò che è stato iniziato!

Vale a dire ulteriori gesti di trading: o la funzione si chug

O la funzione si blocca finché non si apre, o cede il controllo ad un'altra...

Nel primo caso non è chiaro come "loopare", chiamare "se stesso" o cosa?

 

Hmm... Continuo a non capire. Sparerò a caso. Tutti i seguenti si applicano agli errori 128, 142 e 143.

Se l'errore 128 non viene gestito in alcun modo, si rischia di avere due posizioni aperte identiche invece di una. In due anni di trading su due conti reali ho avuto solo un caso simile. Le posizioni duplicate si verificano perché il server di trading, per qualche motivo, ha restituito un messaggio al terminale sulla scadenza del tempo di esecuzione dell'ordine. Il terminale non è stato respinto. L'operazione può ancora essere eseguita. La sua esecuzione è stata appena ritardata per un tempo "inaccettabilmente" lungo. Se si invia un'altra richiesta dopo questo messaggio, sia la richiesta ritardata che quella nuova possono essere eseguite. Per evitare questa situazione, gli sviluppatori consigliano di mettere in pausa per almeno un minuto e controllare se la richiesta su cui il server di trading ha inviato il messaggio è stata ritardata. Se SI, abbiamo raggiunto il nostro obiettivo - la posizione è aperta, se NO, possiamo ripetere la richiesta. Ecco come il mio codice gestisce gli errori 128, 142 e 143.

Motivazione: