Problema con la quantità totale di ordini aperti - pagina 3

 
Devi mostrare tutto il tuo codice modificato.
 
Stampate le vostre variabili prima e dentro le dichiarazioni if e scoprite perché.
 
WHRoeder:
Stampa le tue variabili prima e dentro le dichiarazioni if e scopri perché.

Ok grazie, lo farò e cercherò di più. Ho anche trovato questo pezzo di codice che mi incuriosisce perché lo SL e il TP sono separati da OrderSend.

ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

Ciao a tutti

Ho risolto la maggior parte dei miei problemi e l'EA funziona bene nel tester, ma sto ancora avendo problemi con OrdersTotal. In modalità Demo a volte apre entrambi gli ordini pendenti Stop, ma la maggior parte delle volte solo l'acquisto o la vendita. Voglio che entrambi gli ordini pendenti si aprano allo stesso tempo (entro pochi secondi), ma solo se non ci sono altri ordini o ordini pendenti aperti. Penso che ciò che accade è che a volte apre entrambi gli ordini pendenti prima che abbia la possibilità di calcolare il numero di ordini, e altre volte si rende conto che un ordine pendente è stato inviato, e non apre l'altro. Ho pensato che se metto gli ordini in sospeso tra parentesi graffe li eseguirà entrambi quando la condizione if è soddisfatta? Ora so anche che continuerà ad aprire gli ordini in sospeso quando li cancello finché si forma l'ultima candela, cioè finché la variabile Time corrisponde alla candela Time[0], i tick sono irrilevanti.

Ecco questo pezzo di codice:

extern datetime StartTime1 = D'2016.03.15 15:05';
int start(){
int buy_ticket=0, sell_ticket=0, buystop_ticket=0, sellstop_ticket=0, total=0;
   for(int i= OrdersTotal()-1; i>= 0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()==Symbol())
        {
         total++;
         if(OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if(OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if(OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if(OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if(total==0 && Time[0]==StartTime1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
     }

Quindi c'è un modo migliore o più facile per me di fare questo? Grazie

 
Trader3000:

Ciao a tutti

Ho risolto la maggior parte dei miei problemi e l'EA funziona bene nel tester, ma sto ancora avendo problemi con OrdersTotal. In modalità Demo a volte apre entrambi gli ordini pendenti Stop, ma la maggior parte delle volte solo l'acquisto o la vendita. Voglio che entrambi gli ordini pendenti si aprano allo stesso tempo (entro pochi secondi), ma solo se non ci sono altri ordini o ordini pendenti aperti. Penso che ciò che accade è che a volte apre entrambi gli ordini pendenti prima che abbia la possibilità di calcolare il numero di ordini, e altre volte si rende conto che un ordine pendente è stato inviato, e non apre l'altro. Ho pensato che se metto gli ordini in sospeso tra parentesi graffe li eseguirà entrambi quando la condizione if è soddisfatta? Ora so anche che continuerà ad aprire gli ordini in sospeso quando li cancello finché si forma l'ultima candela, cioè finché la variabile Time corrisponde alla candela Time[0], i tick sono irrilevanti.

Ecco questo pezzo di codice:

Quindi c'è un modo migliore o più facile per me di fare questo? Grazie

Stai controllando il valore di buystop_ticket e sellstop_ticket? Se ce n'è solo 1 aperto, il secondo non sarà mai aperto (a meno che tu non rimuova il primo manualmente).
 
Trader3000 Ho anche trovato questo pezzo di codice che mi incuriosisce perché lo SL e il TP sono separati da OrderSend. Guarderò anche questo
ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
Quando i broker ECN hanno iniziato, l'OrderSend falliva con SL/TP impostato. La maggior parte ha risolto questo problema dalla build 600.
 
zirkoner:
Stai controllando il valore di buystop_ticket e sellstop_ticket ? Se ce n'è solo 1 aperto, il secondo non sarà mai aperto (a meno che tu non rimuova il primo manualmente).

Grazie per la risposta. In realtà entrambi gli ordini buytop e sellstop si aprono circa il 50% delle volte. Il restante 50% delle volte o il buy o il sell vengono inviati. Ma ho scoperto qualcosa. Ho chiesto l'ultimo errore e in quelle occasioni in cui entrambi vengono inviati, non ci sono errori, ma quando solo uno si apre, ottengo l'errore 130 su quello che non si è aperto. Quindi sembra che i miei stop non siano validi, ma non so perché. Ecco il codice per SL:

extern int StopLossOriginal=11;

int start(){
int stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;
   if(StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point=Point*10,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if(total==0 && (Time[0]==time1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      Print("Buystop ticket =",buystop_ticket);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
      Print("Sellstop ticket =",sellstop_ticket);
     }

Ho anche aggiunto la funzione Print, è questo che intendevi con "Stai controllando il valore di buystop_ticket e sellstop_ticket? "Restituisce due valori e cioè

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop ticket =49644335



 
WHRoeder:
Quando i broker ECN hanno iniziato, l'OrderSend falliva con SL/TP impostato. La maggior parte ha risolto questo problema dalla build 600.
Grazie per la tua risposta. Ho provato anche questo ma non ha fatto differenza. Sono sulla build 950
 
Trader3000:

Grazie per la risposta, in realtà sia l'ordine buystop che quello sellstop si aprono circa il 50% delle volte, il restante 50% delle volte o il buy o il sell vengono inviati, ma ho scoperto qualcosa. Ho chiesto l'ultimo errore e in quelle occasioni in cui entrambi vengono inviati, non ci sono errori, ma quando solo uno si apre, ottengo l'errore 130 su quello che non si è aperto. Quindi sembra che i miei stop non siano validi, ma non so perché. Ecco il codice per SL:

Ho anche aggiunto la funzione Print, è questo che intendevi con "Stai controllando il valore di buystop_ticket e sellstop_ticket? "Restituisce due valori e cioè

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop ticket =49644335



Devi aggiungere RefreshRates() tra i tuoi 2 OrderSend().
 
zirkoner:
Devi aggiungere RefreshRates() tra i tuoi 2 OrderSend().
Whoot Whoot Whoot! Ha funzionato, grazie mille
Motivazione: