AIUTARE CHI PUÒ!!!

 

Bloccato in un problema

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


Il selettore trova un ordine se c'è una posizione aperta, ma se non ci sono posizioni aperte, come posso trovarlo? il selettore mostra ancora l'ultima posizione chiusa...
 
sllawa3:

Bloccato in un problema


Il selettore trova un ordine se è aperto, ma se non ci sono posizioni aperte, come posso trovarlo? Il selettore mostra ancora l'ultima posizione chiusa...
con il flag
MODE_TRADES
il "Selector" non mostrerà affatto le posizioni chiuse, solo quelle aperte. Se ci sono zero posizioni aperte il ciclo non partirà nemmeno perché la condizione sarà falsa
 
Techno:
con la bandiera
Il "selettore" non mostrerà affatto le posizioni chiuse, solo quelle aperte. Se ci sono zero posizioni aperte il ciclo non partirà nemmeno perché la condizione sarà falsa

so che non partirà e salverà l'ultima posizione già chiusa... questo è quello che ho scritto... è possibile controllare le posizioni aperte usando un ordine Select ma come dovrei controllare l'assenza di posizioni?
 
sllawa3:

Esattamente, non parte e salva l'ultima posa già chiusa... è quello che dice...
Non capisco cosa dice. Anche ora, cosa intende per "salva una posizione chiusa"? Se si tratta di calcolare le posizioni, come posso solo immaginare, tutte le variabili (per memorizzare il numero di ordini) devono essere azzerate all'inizio della funzione di avvio. Cioè prima del ciclo. Se rimangono vuoti dopo il ciclo, significa che non ci sono posizioni.
 
un pezzo di codice all'inizio dell'argomento... se non c'è nessuna posizione allora DS rimane =1 fino a quando appare un nuovo ordine... anche se l'ordine è chiuso... solo selezione e non parte... cosa c'è da capire...
 
Techno:
qualcosa non è scritto chiaramente. Anche ora, cosa significa "tenere la posizione chiusa"? Se stiamo parlando del calcolo delle posizioni, come posso solo immaginare, allora tutte le variabili (per memorizzare il numero di ordini) devono essere azzerate all'inizio della funzione di avvio. Cioè prima del ciclo. Se rimangono vuoti dopo il ciclo, significa che non ci sono posizioni.

DS è inizialmente scritto come int = 0 prima del ciclo
 
Techno:


quindi non si resetta se il ciclo non parte, e non parte se non ci sono pose
 
sllawa3:

DS è inizialmente prescritto come int = 0 prima del ciclo
Ah, beh, se è prescritto e viene assegnato 0, allora non può essere un problema, altrimenti perché sarebbe uguale a uno? È assegnato zero nella funzione di avvio o sopra?
 
sopra
 
Potrebbe non esserci un problema, ma c'è... provate voi stessi e vedrete
 
Che ne dite di questo?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ