Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
So che il problema è davanti ai miei occhi, ma non riesco a vederlo...
Il problema che ho però; sto cercando di chiudere parzialmente lo stesso "OP_BUY" o "OP_SELL" fino a 4 volte a prezzi diversi... Penso che la domanda che dovrei fare è: posso ottenere un modo in cui ho una regola che TUTTE le chiusure parziali (di qualsiasi lotto e prezzo su una data operazione) si chiuderanno solo parzialmente una volta ai loro parametri predefiniti "OrderClose()" impostati...
Il modo in cui sto cercando di farlo ora con il confronto di OrderOpenTime() funzionerà essenzialmente solo una volta, e limiterà qualsiasi altro tipo di funzione OrderClose() dall'accadere... Voglio trovare un modo in cui posso avere una regola applicata a 4 funzioni OrderClose()... (se questo ha senso?)
So che la gente suggerisce di aprire 4 ordini, ma senza andare troppo in profondità, è meno efficiente per me farlo in quel modo.
Perché non avere semplicemente un array bidimensionale che memorizza il numero del biglietto e il numero di chiusure parziali disponibili rimaste da eseguire.
Schema/Pseudocodice:
1. definire un array statico bidimensionale: cOrders[][2].
2. per ogni nuovo ordine inserito: ridimensiona la prima dimensione di cOrders a size+1, metti il numero di ticket del nuovo ordine in [x][0] e il numero di chiusure parziali rimaste da eseguire (in questo caso, 4) in [x][1].
3. in qualsiasi intervallo di tempo (ad esempio, ogni start()), eseguire il loop attraverso l'array, selezionare ogni ordine utilizzando il numero di ticket memorizzato, e determinare se è necessario eseguire una chiusura parziale.
4. se deve essere eseguita una chiusura parziale (vedi passo 3), chiudere parzialmente l'ordine usando OrderClose() e aggiornare cOrders[x][0] per riflettere il nuovo numero di biglietto e ridurre cOrders[x][1] di 1.
5. rimuovere da cOrders tutti gli ordini che sono stati chiusi o che il loro numero di chiusure parziali rimaste da eseguire è 0.
L'unico problema è cosa fare al riavvio della piattaforma/computer. Potresti memorizzare queste informazioni in un file e leggere il file in init() al riavvio della piattaforma.
Perché non avere semplicemente un array bidimensionale che memorizza il numero del biglietto e il numero di chiusure parziali disponibili rimaste da eseguire.
Schema/Pseudocodice:
1. definire un array statico bidimensionale: cOrders[][2].
2. per ogni nuovo ordine inserito: ridimensiona la prima dimensione di cOrders a size+1, metti il numero di ticket del nuovo ordine in [x][0] e il numero di chiusure parziali rimaste da eseguire (in questo caso, 4) in [x][1].
3. in qualsiasi intervallo di tempo (ad esempio, ogni start()), eseguire il loop attraverso l'array, selezionare ogni ordine utilizzando il numero di ticket memorizzato, e determinare se è necessario eseguire una chiusura parziale.
4. se deve essere eseguita una chiusura parziale (vedi passo 3), chiudere parzialmente l'ordine usando OrderClose() e aggiornare cOrders[x][0] per riflettere il nuovo numero di biglietto e ridurre cOrders[x][1] di 1.
5. rimuovere da cOrders tutti gli ordini che sono stati chiusi o che il loro numero di chiusure parziali rimaste da eseguire è 0.
L'unico problema è cosa fare al riavvio della piattaforma/computer. Potresti memorizzare queste informazioni in un file e leggere il file in init() al riavvio della piattaforma.
Non ho idea di come utilizzare parti del numero magico per definire diversi parametri? Penso che usare OrderOpenTime() non sia un percorso logico... Non posso credere quanto sia lungo questo thread. Lol.
Giuro su Dio che farò un thread su questo una volta che io (con un sacco di aiuto da tutti gli altri!) l'avrò risolto.
Penso che il modo più semplice per farlo sia con i Magic Number . . . usare parti del numero per definire diversi parametri, per esempio: numero di parti, numero d'ordine, giorno, mese, numero EA . . . tutte le parti avrebbero lo stesso Magic Number e potrebbero essere tracciate facilmente nella Storia. Presumo che la parte chiusa e la parte aperta a sinistra abbiano entrambe lo stesso Magic Number . . .
L'uso del Magic Number per codificare pezzi di informazione è abbastanza possibile, ma vedo un paio di possibili limitazioni. Primo, il Magic Number è un int e quindi è lungo 10 cifre dove la cifra più a sinistra può essere solo un 1 o un 2 (e se la cifra più a sinistra è un 2, la seconda cifra più a sinistra deve essere 7 o meno). In secondo luogo, potrebbe essere necessario più tempo per start() per rivedere tutta la storia per trovare tutte le parti di ogni ordine solo per determinare se l'ordine corrente deve (o può essere) parzialmente chiuso. Non sono sicuro se questo tempo in più sarebbe banale o no.
Aspetta, non posso avere diversi MagicNumber? Usarne uno per l'iniziale OrderSend(), uno per l'OrderModify(), dopo che metà della posizione è chiusa al primo target di 1:1, modificare l'ordine per cambiare il MagicNumber? Quindi, quando sto cercando di chiudere la metà a 1:1, chiuderà solo 1:1 finché l'attuale apertura "OP_BUY" corrisponde al numero magico che gli ho dato per primo? Dopo che si è chiuso parzialmente, modificare e cambiare quel numero magico?!
Lol? Non è molto semplice?!
AGGIORNAMENTO: Ovviamente devo smettere di guardare questo oggi - non puoi modificare un MagicNumber - vorrei che tu potessi, cazzo... (facepalm) - Potresti immaginare quanto sarebbe più facile tutto questo...
Aspetta, non posso avere diversi magicnumbers? Usarne uno per l'iniziale OrderSend(), uno per OrderModify(), dopo che metà della posizione è chiusa al primo target di 1:1, modificare l'ordine per cambiare il MagicNumber? Quindi, quando sto cercando di chiudere la metà a 1:1, chiuderà solo 1:1 finché l'attuale apertura "OP_BUY" corrisponde al numero magico che gli ho dato per primo? Dopo che si è chiuso parzialmente, modificare e cambiare quel numero magico?!
Lol? Non è molto semplice?!
No. Innanzitutto, dopo l'iniziale OrderSend(), non puoi aggiungere/modificare il Magic Number usando OrderModify(). Secondo, quando fai una chiusura parziale dell'ordine usando OrderClose(), il nuovo ordine (presumo) ottiene lo stesso Magic Number del vecchio ordine.
No. Innanzitutto, dopo l'iniziale OrderSend(), non puoi aggiungere/modificare il Magic Number usando OrderModify(). Secondo, quando fai una chiusura parziale dell'ordine usando OrderClose(), il nuovo ordine (presumo) ottiene lo stesso Magic Number del vecchio ordine.
Sì, ho capito quanto sono ritardato. Giornata lunga!
Sì, dopo la prima chiusura parziale, alla posizione rimanente viene ancora assegnato lo stesso numero magico con cui è iniziata.
Ora mi sta davvero frustrando... Se solo potessi modificare il magicnumber, sarebbe troppo facile! Ci deve essere un modo logico per chiudere parzialmente una posizione UNA VOLTA - e farlo più volte a qualsiasi prezzo predefinito specificato all'interno di OrderClose() - Ci deve essere un aggiornamento per permetterci di modificare il MagicNumber()!
Non stai pensando affatto in modo logico.
1. In che modo modificare il numero magico ti aiuterebbe più che conoscere l'OrderOpenTime()? Si tratta esattamente della stessa cosa di un identificatore di quell'ordine.
2. perché lo stai convertendo nel formato giorno/ora/minuti con timetostr? OrderOpenTime() è già nel formato timestamp che si presenta così: 1375356521 che rappresenta l'ora esatta al secondo in cui l'ordine è stato aperto.
Se si potesse cambiare il numero magico si dovrebbe confrontare il numero magico dell'ordine per assicurarsi che non abbia il numero magico che significa che è già stato chiuso in parte, giusto?
Se puoi farlo, perché non puoi confrontare l'OrderOpenTime dell'ordine con il timestamp che sai che significa che è uno che è già stato parzialmente chiuso?
static datetime alreadypartclosed;
se la chiusura parziale dell'ordine ha successo
alreadypartclosed = OrderOpenTime();
quando l'ordine soddisfa i criteri per la chiusura parziale
if(OrderOpenTime() != alreadypartclosed )
Se stai gestendo più ordini aperti allo stesso tempo, usa un array[] per contenere ogni timestamp degli ordini chiusi.