[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 155

 
todem:
nella definizione di una tendenza?

In un cambiamento di tendenza su un periodo di tempo... Vedere https://www.mql5.com/ru/forum/131277/page148 e https://www.mql5.com/ru/forum/131277/page149
 

Potete dirmi perché OrderSelect restituisce TRUE anche se l'ordine con questo biglietto non esiste (è stato cancellato)?


   if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)
 
100yan:

in un cambiamento di tendenza su un tratto di tempo...


Per favore, ditemi se la funzione Tp e Slossa funziona qui

se (totale > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = AveragePrice + TakeProfit * Point;
BuyTarget = PriceTarget;
Stopper = AveragePrice - Stoploss * Point;
flag = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
PriceTarget = AveragePrice - TakeProfit * Point;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Point;
flag = TRUE;

 
todem:
ha compilato bene per me

Scusa, l'indicatore funziona - è come era in origine, e l'errore è nel file tcht - non compila.

 

Posso usare init per fare i calcoli per il buffer dell'indicatore?

Volevo ricalcolare in init tutte le barre tranne la barra zero e in start zero bar - non conta...

 
Pyro:

Potete dirmi perché OrderSelect restituisce TRUE anche se non c'è nessun ordine con tale biglietto (è stato cancellato)?

Avete letto bene il riferimento alla funzione?

Leggiamolo di nuovo:

---------------------------------------------------------------------------------------------------------------------------------------------------------------

bool OrderSelect( int index, int select, int pool=MODE_TRADES)
La funzione seleziona un ordine per ulteriori manipolazioni. Restituisce TRUE se la funzione si completa con successo. Restituisce FALSE se la funzione fallisce. Per ottenere informazioni sull'errore, chiamate la funzione GetLastError().
Il parametro pool è ignorato se l'ordine è selezionato dal numero del biglietto. Il numero del biglietto è un identificatore unico per l'ordine. Per determinare da quale lista viene selezionato un ordine, dobbiamo analizzare il suo tempo di chiusura. Se il tempo di chiusura dell'ordine è 0, allora l'ordine è aperto o in sospeso e viene preso dalla lista delle posizioni aperte del terminale. Una posizione aperta può essere distinta da un ordine pendente per il suo tipo. Se il tempo di chiusura non è uguale a 0, allora l'ordine è chiuso o in sospeso ed è stato selezionato dalla storia del terminale. La distinzione tra un ordine chiuso e un ordine pendente cancellato può essere fatta anche per tipo di ordine.
Parametri:
indice - Posizione dell'ordine o numero d'ordine a seconda del secondo parametro.
selezionare - La bandiera del metodo di selezione. Può essere uno dei seguenti valori:
SELECT_BY_POS - il parametro index contiene il numero di indice della posizione nella lista,
SELECT_BY_TICKET - il parametro indice contiene il numero del biglietto.
piscina - Fonte di dati per la selezione. Si usa quando il parametroselect è uguale a SELECT_BY_POS. Può essere uno dei seguenti valori:
MODE_TRADES (predefinito) - l'ordine viene selezionato tra quelli aperti e in sospeso,
MODE_HISTORY - l'ordine è selezionato tra gli ordini chiusi e cancellati.


---------------------------------------------------------------------------------------------------------------------------------------------------------------

Questo:

Il parametro pool è ignorato se l'ordine è selezionato dal numero del biglietto. Il numero del biglietto è l'identificatore unico dell'ordine. Per determinare da quale lista viene selezionato un ordine, bisogna analizzare il suo orario di chiusura. Se il tempo di chiusura dell'ordine è 0, allora l'ordine è aperto o in sospeso e viene preso dallalista delle posizioni aperte del terminale.

Tu fai cosa?

if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)

Ho mostrato in rosso il parametro pool, che viene ignorato quando si sceglie per ticket e un ordine viene preso da qualsiasi lista (aperta o chiusa) di posizioni del terminale. Ecco perché restituisce la verità. Dopo tutto, un tale biglietto esiste e un ordine è selezionato, ma dalla lista degli ordini chiusi...

Dovremmo fare così:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()==0) {
      // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
   }

... oppure:

if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()>0) {
      // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
   }

... ...o:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET)) {
      if (OrderOpenTime()>0) {
         // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
      }
      if (OrderOpenTime()==0) {
         // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
      }
   }

Credo di essermi spiegato molto bene... :)

 

artmedia70


Grazie per una risposta così dettagliata e completa. Davvero il più chiaro possibile :) GRAZIE!!!

 
Pyro:

artmedia70


Grazie per una risposta così dettagliata. Davvero chiaro come possibile :) GRAZIE!!!

:) Grazie. Non c'è di che.

Vorrei mettere in guardia su alcune "insidie" della selezione delle posizioni aperte in base al loro biglietto. Il fatto è che alla fine di un giorno di trading, quando una posizione viene spostata al giorno successivo, la società di brokeraggio riapre l'ordine. Cioè, la posizione corrente viene chiusa e un'altra posizione viene aperta con lo stesso volume, ma con un nuovo biglietto che include lo swap. Pertanto, il tuo Expert Advisor deve tenere traccia degli ordini riaperti e prendere in considerazione i loro nuovi ticker, altrimenti tutto "scorrerà" - l'ordine con il vecchio ticker apparirà nella lista degli ordini chiusi, e non sarai in grado di aprire una posizione esistente spostata al nuovo giorno di trading utilizzando il vecchio ticker. Le posizioni parzialmente chiuse incontreranno lo stesso destino - un nuovo ticket sarà assegnato anche a loro.

Quindi, tenete un registro rigoroso di tutti gli ordini EA e tenete traccia di tutti questi cambiamenti "insidiosi" nel tempo.

 
artmedia70:


Vorrei mettere in guardia su una certa "insidia" della selezione delle posizioni aperte in base al loro biglietto. Il punto è che alla fine del giorno di negoziazione, quando una posizione viene trasferita al giorno successivo, il DC riapre l'ordine.

In alcune società di intermediazione questo viene fatto, ma la grande maggioranza non soffre di una cosa del genere.
 
sergeev:
Non so se questo è vero per alcune società di intermediazione, ma la maggior parte di loro non fa queste stronzate.

Non è una regola di "buona educazione" considerare anche questo comportamento del DC? Dopo tutto... Sì, non importa... Cerco solo di considerare tutto, beh... o quello di cui sono consapevole.

La cautela è prevenuta, eh? ;)