EA per ogni coppia di valute - quale codice per aprire solo una volta per coppia di valute? - pagina 4

 
onewithzachy:
Ti sbagli di grosso. Il tuo codice non viene mai eseguito! Usa quello di RaptorUK.

Ok :)

Mi sono semplicemente confuso con questo:

"finire quando j = 0"

Grazie!

 
grey.unit:

Quindi dovrebbe essere così:

perché hai scritto questo:

o mi sbaglio?

Ti sbagli . . . dai un'occhiata a questo: for

Nel mio codice l'espressione 2 è j >= 0 che significa . . . while ( j >= 0 ) quindi il ciclo viene eseguito mentre j è 0 o superiore, cioè da OrdersTotal() - 1 fino a 0 compreso

Se usate j = 0 (forse dovrebbe essere scritto j == 0) significa while (j == 0) e il ciclo viene eseguito solo quando j è 0

 
Ah ok, ora ho capito
 
RaptorUK:

No, fai così . . .

La prima posizione dell'ordine è 0 quindi se hai 5 ordini le posizioni sono 0, 1, 2, 3, 4 . . . quindi l'ultimo è OrdersTotal() - 1 . . . quindi per contare alla rovescia inizi da OrdersTotal()-1 e finisci a 0

Questo significa che OrdersTotal () -1 è No Orders, poi 0 è il 1° ordine, 1 è 2 ordini e così via fino a 4 che equivalgono a 5 ordini.

Qualcuno potrebbe farmi sapere se la mia comprensione che -1 è uguale a Nessun ordine, è corretta?

Grazie

 
barnacle7:

Questo significa che OrdersTotal () -1 è No Orders, poi 0 è il 1° ordine, 1 è 2 ordini e così via fino a 4 che equivalgono a 5 ordini.

OrdersTotal() è il numero di ordini aperti. Sì, se ne hai 5 in totale sono numerati da 0 a 4
 

Ho anche bisogno di aiuto per lo stesso problema. Sono un principiante e ho cercato di inserire il codice che ho visto qui, ma non funziona affatto, potete aiutarmi? L'Orderselect è stato usato

per sostituire OrdersTotal e controllare il numero di operazioni che ogni EA fa, ma ora gli altri non piazzano operazioni

void OnTick()

{
       double movingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,1);     
       double movingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,0);       
       double lastmovingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,1);          
       double movingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,1);   
       double movingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,1);    
       int b;int bM;int s;int sM;    
       bool res = (OrderSelect(b,SELECT_BY_POS));    
       bool resM = (OrderSelect(bM,SELECT_BY_POS));    
       bool ses = (OrderSelect(s,SELECT_BY_POS));    
       bool sesM = (OrderSelect(sM,SELECT_BY_POS));    
       
       if((lastmovingAverageFB<lastmovingAverageSB) && (movingAverageFB > movingAverageSB) && res == false  && resM == false )      
         {
         b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
         bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
         }       
         else if((lastmovingAverageFS>lastmovingAverageSS)&&(movingAverageFS<movingAverageSS) && ses == false && sesM == false)     
         {  
         s = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS1*_Point,NULL,3,0,Red);       
        sM = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS2*_Point,NULL,4,0,Red);   
}


 
&& res == false

Orderselect restituirà true se ha selezionato un ordine.

Forse puoi usare un numero magico in combinazione con il symbolname.

Ecco un esempio nell'articolo che puoi studiare:https://www.mql5.com/en/articles/1359

MagicNumber: "Magic" Identifier of the Order
MagicNumber: "Magic" Identifier of the Order
  • www.mql5.com
In МТ3, management of open positions was rather time-taking. Traders had at their disposal a rather limited tool set to work with the list of open and closed positions. The problem of distinguishing between "own" and "someone else's" positions was solved in rather complicated ways. In МТ4, the situation has cardinally changed. Now, trader can...
 
  1.        int b;int bM;int s;int sM;    
           bool res = (OrderSelect(b,SELECT_BY_POS));    
           bool resM = (OrderSelect(bM,SELECT_BY_POS));    
           bool ses = (OrderSelect(s,SELECT_BY_POS));    
           bool sesM = (OrderSelect(sM,SELECT_BY_POS));    

    b come nessun valore, OrderSelect fallisce. bM come nessun valore, OrderSelect fallisce. s come nessun valore, OrderSelect fallisce. sM come nessun valore, OrderSelect fallisce.

  2. Qual è lo scopo di selezionare più ordini? Il risultato è l'ultima selezione riuscita.

  3.          b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
             bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
    
    b e bM sono variabili locali. I numeri dei biglietti vengono persi al ritorno.

  4. Perché stai cercando di selezionare per posizione, ma cerchi di memorizzare i numeri dei biglietti? Se selezioni per un numero di ticket valido non significa che l'ordine sia aperto.

  5. Tu compri all'Ask e vendi al Bid.

    1. Il TP/SL del tuo ordine di acquisto (o l'entrata del Sell Stop/Sell Limit) si attiva quando il Bid / OrderClosePrice lo raggiunge. Usando l'Ask±n, rende il tuo SL più corto e il tuo TP più lungo, per lo spread. Non vuoi che l'importo specificato sia utilizzato in entrambe le direzioni?

    2. Il TP/SL del tuo ordine di vendita (o l'entrata del Buy Stop/Buy Limit) sarà attivato quando l'Ask / OrderClosePrice lo raggiunge. Per far scattare l'ordine a un prezzo Bid specifico, aggiungere lo spread medio.
      MODE_SPREAD (Paul) - Forum di programmazione MQL4 - Pagina 3 #25

    3. I grafici mostrano solo i prezzi Bid. Attivare la linea di Ask per vedere quanto è grande lo spread(Strumenti → Opzioni (control+O) → grafici → Mostra linea di Ask).
      La maggior parte dei broker con spread variabile si allarga considerevolmente a fine giornata (5 PM ET) ± 30 minuti. Il mio GBPJPY (OANDA) mostra uno spread medio = 26 punti, ma uno spread medio massimo = 134.

Motivazione: