EA mescola ordini BUY e SELL - pagina 2

 

Senza conoscere l'intero ea e come lo stai usando, dobbiamo solo indovinare cosa c'è di sbagliato. Supponendo che stia selezionando un ordine corretto per passare questa dichiarazione.

while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}

non c'è modo di farlo passare:

if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

se è Op_Sell. A meno che tu non abbia questa cosa su più grafici dello stesso simbolo.

Visto che stai usando un ciclo while controverso. Questo è probabilmente una qualche forma di Rapid Order Maker.

La mia ipotesi finale. L'ordine selezionato cambia dopo il controllo Ordertype :)

Per tutto il resto, ti suggerisco come Raptor di utilizzare un sacco di istruzioni di stampa.

 
  1. L'ordine selezionato NON può cambiare dopo l'orderSelect.
  2.  for(cnt = total-1; cnt >= 0; cnt--)  {
          while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}
    Se la orderSelect fallisce, fallirà continuamente e si avrà un ciclo infinito. Se diversi ordini si chiudono su un altro grafico mentre stai aggiornando il tuo, la selezione della prossima iterazione fallirà. Molto pericoloso.
 

Ho stampato il numero del biglietto e non corrisponde all'OrderType().


Se l'ordine selezionato è di tipo OP_BUY, viene elaborato l'if corretto, ma poi nella mia chiamata OrderModify(...), passo OrderTicket() come primo parametro, ma è il ticket di un altro ordine.


Qualche idea?

 
dvarrin:

Qualche idea?

Forse stai cercando di modificare un ordine che è già chiuso? Non stai specificando un pool da cui stai selezionando i tuoi trade.

OrderSelect( int index, int select, int pool=MODE_TRADES) 
MODE_TRADES (default) - ordine selezionato dal pool di trading (ordini aperti e in sospeso),

MODE_HISTORY - ordine selezionato dal pool storico (ordine chiuso e cancellato).


	          
 
RaptorUK:

Forse stai cercando di modificare un ordine che è già chiuso? Non stai specificando un pool da cui stai selezionando i tuoi trade.

MODE_TRADES (default) - ordine selezionato dal pool di trading (ordini aperti e in sospeso),

MODE_HISTORY - ordine selezionato dal pool storico (ordine chiuso e cancellato).


Ho provato anche questo, ma non cambia nulla. Sembra che io debba memorizzare tutti i dati dell'ordine selezionato che voglio usare:


int ticket=0;

doppio SL = 0.0;

OrderSelect(cnt, ...);

ticket = OrderTicket();

SL = OrderStoploss();

if (OrderType() == OP_BUY) {


}


...


Perché è così? Non capisco cosa c'è di sbagliato nel mio codice per cui OrderTicket() non corrisponde allo stesso ordine a cui si riferisce OrderType().

 
dvarrin:

Ho stampato il numero del biglietto e non corrisponde all'OrderType().


Se l'ordine selezionato è di tipo OP_BUY, viene elaborato l'if corretto, ma poi nella mia chiamata OrderModify(...), passo OrderTicket() come primo parametro, ma è il ticket di un altro ordine.

È il prossimo ordine in sequenza, è l'ordine precedente in sequenza ?
 

orderType = OrderType()

cambiate in

int orderType = OrderType(); e cancellare la dichiarazione originale.

 
forexCoder:

orderType = OrderType()

cambiate in

int orderType = OrderType(); e cancellare la dichiarazione originale.


OrderType è ok. È il OrderTicket() che non è il ticket dell'ordine giusto.
 

Ti incoraggerei a scoprire cosa sta causando il tuo problema piuttosto che codificare intorno ad esso.

L'ingegneria del software è tutta una questione di problem solving, è così che impariamo e miglioriamo. Sono al mio 3° tentativo da sabato di codificare un particolare problema che ha a che fare con Fibs, ci sono quasi. . un uso attento della funzione Print() aiuta molto . .

 
dvarrin:

OrderType è ok. È il OrderTicket() che non è il biglietto dell'ordine giusto.

int OrderType = OrderType() non va bene, uno potrebbe nascondere l'altro (le dichiarazioni locali nascondono le globali senza errori).

int orderType = OrderType()