Errori, bug, domande - pagina 1886

 
Vladimir Karputov:


Allora qual è la domanda?

Dove si può vedere che sotto il numero "i" c'è una posizione con tale e tale biglietto, per tale e tale simbolo? In generale, oltre al semplice output del numero di sequenza, si emette anche il biglietto e il simbolo.


È normale che per diverse situazioni, una funzione dia lo stesso valore?

ZS: a proposito, c'era una domanda nel post.

Il punto è che se seleziono comprare, la funzione (PositionGetInteger(POSITION_TYPE)) restituisce 0

E se si seleziona una posizione inesistente, la funzione restituirà anche 0

 
Alexandr Bryzgalov:
È normale che per diverse situazioni una funzione dia lo stesso valore?


Cosa significa "situazioni diverse"? E fare come ho raccomandato sopra:

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

Bug, bug, domande

Vladimir Karputov, 2017.05.12 11:15

...

In generale, oltre al semplice output del numero di sequenza, si emette anche il biglietto e il simbolo.


 
Alexandr Bryzgalov:

So che devo controllare, ma le cose possono succedere...

PositionGetInteger

La funzione restituisce la proprietà richiesta di una posizione aperta, precedentemente selezionata con la funzionePositionGetSymbol oPositionSelect. La proprietà position dovrebbe essere di tipo datetime, int. Ci sono 2 varianti della funzione.

1. Restituisce direttamente il valore della proprietà.

longGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id// identificatore di proprietà
);

2. Restituisce vero o falso a seconda del successo della funzione. Se ha successo, il valore della proprietà viene messo nella variabile di destinazione, che viene passata per riferimento all'ultimo parametro.

boolPositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id,// identificatore di proprietà
long&long_var//prende il valore della proprietà
);

Parametri

ID proprietà

L'identificatore [in] della proprietà della posizione. Il valore può essere uno dei valori di enumENUM_POSITION_PROPERTY_INTEGER.

long_var

[out] Variabile di tipo long che prende il valore della proprietà richiesta.

Valore restituito

Valore di typelong. In caso di esecuzione non riuscita restituisce 0.

La situazione con la majic è più sottile. Quindi è logico fare un controllo (PositionGetInteger(POSITION_TICKET) > 0).
Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
La situazione è più sottile con la magia. Quindi è logico fare un controllo (PositionGetInteger(POSITION_TICKET) > 0).

Sì, è bene fare un controllo.

Ma quando si scrive una funzione, si cerca sempre di fare in modo che restituisca un valore diverso in situazioni diverse.

Penso che non sia corretto che lo stesso valore esca dalla funzione in situazioni diverse.
 
Alexandr Bryzgalov:

ma quando si scrive una funzione, si cerca sempre di ottenere un valore diverso per situazioni diverse.

Questo è il motivo per cui si parla di magia. Cosa restituire in caso di errore PositionGetInteger(POSITION_MAGIC) ?
 
fxsaber:
Questo è il motivo per cui Magic ne ha parlato. Cosa restituire in caso di errore PositionGetInteger(POSITION_MAGIC) ?
0 - posizione aperta manualmente. corretto?
 
Alexandr Bryzgalov:

Va bene se una funzione dà lo stesso valore per diverse situazioni?

ZS: a proposito, c'era una domanda nel post.

il punto è che se seleziono comprare, la funzione (PositionGetInteger(POSITION_TYPE)) restituisce 0

e se si seleziona una posizione inesistente, la funzione restituirà anche 0


Quindi la prima chiamata viene utilizzata quando si garantisce una posizione (come nel ciclo). Ed ecco la seconda forma di chiamata

bool  PositionGetInteger( 
   ENUM_POSITION_PROPERTY_INTEGER  property_id,     // идентификатор свойства 
   long&                           long_var         // сюда примем значение свойства 
   );

per i casi in cui la posizione viene selezionata di punto in bianco.


Fallo e credi a quello che ottieni nella variabile "risultato" - tutto va a posto:

//+------------------------------------------------------------------+
//|                                                         posi.mq5 |
//|                                                      sanyooooook |
//|                                                 http://sn-bot.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link      "http://sn-bot.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int tot=PositionsTotal();
   for(int i=0;i<tot;i++)
     {
      ulong OrderTicket_=PositionGetTicket(i);
      long cmd=PositionGetInteger(POSITION_TYPE);
      if(OrderTicket_>0 && cmd<=POSITION_TYPE_SELL)
         Print("N",i,"cmd=",cmd);

     }
   ulong OrderTicket_=PositionGetTicket(100);
   long cmd=-3;
   bool result=PositionGetInteger(POSITION_TYPE,cmd);
   if(result)
      Print("N100 cmd=",cmd);
  }
//+------------------------------------------------------------------+
 
Alexandr Bryzgalov:
0 - la posizione viene aperta manualmente. corretto?
Sì, ma anche qualsiasi altro valore sarà fuorviante.
 
Vladimir Karputov:


Quindi la prima chiamata viene utilizzata quando si è GARANTITA una posizione (come nel caso del ciclo). Ed ecco la seconda forma di chiamata

per i casi in cui la posizione viene selezionata di punto in bianco.


Fate questo e credete a ciò che ottenete nella variabile "risultato" - tutto va a posto:

Non è questa la domanda, è che la funzione restituisce lo stesso valore per diverse situazioni.

So come controllarlo.

la domanda originale era se è normale?

SZY: un errore può essere fatto involontariamente e poi in 100000 codici ci si stanca di cercarlo.

Cosa? Non devi fare errori? )

 
Alexandr Bryzgalov:

non è questa la domanda, ma la funzione restituisce lo stesso valore per diverse situazioni.

So come controllarlo

La domanda originaria era se questo è normale?


Tu, a quanto vedo, non hai controllato il codice che ti ho mostrato. Che ne dici di questo: prima controlli, poi fai di nuovo la domanda.