[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 166

 
Xaoss1990:

Signori professionisti, ho bisogno di nuovo del vostro aiuto!

Qui sotto c'è un frammento di codice responsabile della chiusura dei trade, ma il fatto è che quando gli ordini pendenti non vengono eseguiti non li cancella, non riesco a capire perché. Ma quando ho bisogno di chiudere un ordine pendente che è già stato eseguito, tutto va correttamente e se l'ordine non è stato eseguito allora si blocca lì finché non viene eseguito...

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
Magic = OrderMagicNumber();
orderticket = OrderTicket();

if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0) {
if (H1_BUY_5 == 0 || H1_BUY_1 == 0) {
OrderClose(orderticket, lots, Bid, 5, Yellow);
if (OrdersTotal() == 1) OrderDelete(orderticket, Brown);
}

}



Questa è la condizione che seleziona solo l'ordine di acquisto,

if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)

quindi non c'è modo di rimuovere l'ordine pendente

 
Roger:


Probabilmente perché si calcola prima il lotto e poi

Grazie, ho cambiato il calcolo del lotto, ma ancora non funziona.
 
Sancho77:
Grazie, ho cambiato il calcolo del lotto, ma ancora non funziona.


Come non funziona, cosa dice nei log?

Controlla quali valori assume np, qui

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
 
Non ci sono messaggi di errore nel registro. Puoi guardare l'intero codice EA? Dovrebbe chiudere 1/3 del lotto se lo stoploss è già stato spostato a breakeven dal trawl.
 
Sancho77:
Non ci sono messaggi di errore nel registro. Puoi guardare l'intero codice EA? Dovrebbe chiudere 1/3 del lotto se lo stoploss è già stato spostato a breakeven dal trawl.

Oooooooo com'è incasinato tutto. In generale, tutto è sbagliato, più facile da buttare e scriverne uno nuovo. I parametri sono definiti in modo errato, le funzioni sono chiamate in modo errato, un sacco di calcoli inutili. Buono per un tutorial su come non scrivere codice.
 
Roger:

Ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo disordinato. Tutto sommato, è tutto sbagliato, è più facile buttarlo via e scriverne uno nuovo. I parametri sono definiti in modo errato, le funzioni sono chiamate in modo errato, un sacco di calcoli inutili. Sarà buono per un tutorial su come non scrivere codice.
Ok, cominciamo dall'inizio)
 
Sancho77:
...Dovrebbe chiudere 1/3 del lotto se scatta uno stop loss già spostato a pareggio dal trawl.
Guardo tutto questo e penso tra me e me - perché intraprendere questi compiti se non si è sicuri delle basi? Questo tipo di studio autonomo fa più bene che male. La scintilla del pensiero annega in un mucchio di errori.
 
granit77:
Guardo tutto questo e penso tra me e me - perché assumersi questi compiti se non si è sicuri delle basi? Questo tipo di studio autonomo fa più bene che male. La scintilla del pensiero annega in un mucchio di errori.

Probabilmente ha fatto più male che bene.
 
Sì, un errore di battitura.
 

Per favore, consigliateci, signori!

Immaginate la situazione: viene attivato uno stop, a causa dell'innesco della N-esima condizione. Ma dopo un paio di candele, la condizione N-esima è caduta. Con l'aiuto di quale funzione si può riaprire l'affare dopo che la N-esima condizione cade. Cioè, devi determinare che ha innescato uno stop un certo numero di barre fa, e poiché la condizione N-esima è caduta, ripeti il trade!