Errore #1 quando si modificano gli ordini - pagina 5

 
borilunad:

Victor, perché hai modificato lo SL e il TP nelle posizioni in sospeso? In generale, ha senso impostare lo SL solo dopo aver aperto una posizione, e il TP dopo il trasferimento dello SL al B/S! Allora perché disturbare così tanto il server per niente e perché devi fare tutto questo casino?

Dobbiamo ridurre al minimo e semplificare il codice, per farlo funzionare in modo veloce e chiaro, e poi sarà più facile modificarlo a causa dei capricci del mercato! Considerate attentamente tutte le sfumature delle realtà del mercato!

Metto anche uno stop loss sugli ordini pendenti, nel caso in cui la connessione venga interrotta o qualcos'altro mi impedisca di impostare uno stop più accurato (dal punto di vista del sistema) dopo l'attivazione dell'ordine.

Se tutto è a posto, allora dopo che l'ordine scatta, metto uno stop al livello giusto.

 
Stells:

Metto anche uno stop loss sugli ordini pendenti immediatamente, nel caso in cui la connessione si interrompa o qualcos'altro mi impedisca di impostare uno stop più corretto, dal punto di vista del sistema, dopo che l'ordine è stato attivato.

Se tutto è a posto, allora dopo che l'ordine scatta, metto uno stop al livello giusto.

In questo hai ragione, se secondo il TS imposti il tuo SL vicino al prezzo di apertura! Ma modificare più volte il prezzo di apertura, SL e TP non è ragionevole, spende così tanto sforzo e complica il codice, non ne vale la pena!
 

Victor, se ne hai così tanto bisogno, puoi renderlo più facile! Controlla solo il prezzo di apertura e segna SL e TP come fai quando imposti un ordine pendente con SL e TP!

Ciò significa che per lo SL scrivere Ask-SL o Bid+SL, e per il TP, rispettivamenteAsk+TP o Bid-TP! Provatelo, dovrebbe funzionare bene! Quindi nulla è impossibile! :)

 
borilunad:

Volete la funzione Modify()?

Non direi di no. E sto anche aspettando da qualche parte... Da ieri sera.

keekkenen:
il codice sembra a posto... ma su quello reale (non demo) funziona?
Sì. In molti EA dove non ho dovuto modificare 3 parametri di input in una volta sola, funziona. Notate che ho scaricato una variante per il tester e c'è anche una variante per il mondo reale.

borilunadi:

Victor, perché hai iniziato a modificare SL e TP negli ordini pendenti? In generale, ha senso impostare lo SL solo dopo aver aperto una posizione e il TP dopo che lo SL è stato spostato in B/B! Allora perché disturbare così tanto il server per niente e perché devi fare tutto questo casino?

È necessario ridurre al minimo e semplificare il codice, per farlo funzionare in modo veloce e chiaro, e poi sarà più facile modificarlo a causa dei capricci del mercato! Pensate attentamente a tutte le sfumature legate alle realtà del mercato!

Boris, se secondo la documentazione 3 parametri possono essere modificati simultaneamente, perché non usarlo? Dopo tutto, è conveniente! Sto pensando di cambiare le opzioni di stop e take, ma voglio che questa opzione funzioni correttamente, se questa caratteristica è specificata nella documentazione. Se non lo è, dobbiamo scrivere che non è possibile. Allora la domanda sparirà da sola.
 
borilunad:
In questo hai ragione, se secondo il TS metti il tuo SL vicino al prezzo di apertura! Ma modificare più volte il prezzo di apertura, SL e TP è irragionevole sprecare così tanto sforzo e complicare il codice, non ne vale la pena!

Boris, chi dice che sto martellando il server troppo spesso? Non stavo parlando del sistema di trading. Ci sono diverse varianti. A volte viene spostato solo STOP, a volte vengono spostati anche STOP e TAKE. Queste sono diverse varianti. Ma in questo caso, nel mio caso, le fermate vengono spostate in media ogni diverse ore. O una volta ogni ora. È un sacco di complica codice?

Al contrario, il codice diventa... più semplice. Si chiama una funzione di modifica... mettere 3 parametri e modificare... Idealmente, senza contare i difetti del terminale.

Ma se non lo fa. Poi dovremo modificare il PREZZO APERTO, poi le condizioni sono soddisfatte... il prezzo STOP, e dopo che alcune condizioni sono soddisfatte o è passato del tempo, dovremo modificare il prezzo PRENDENTE. Questo è come Semplificare codice?

 
hoz:

Non dirò di no. E sto anche aspettando da qualche parte... Così da ieri sera.

Sì. In molti EA dove non ho dovuto modificare 3 parametri di input in una volta sola, funziona. Notate che ho scontato la versione per il tester, e ci sono anche per il reale.

Boris, se secondo la documentazione 3 parametri possono essere modificati simultaneamente, perché non usarlo? Dopo tutto, è conveniente! Sto pensando di cambiare le opzioni di stop e take, ma voglio che questa opzione funzioni correttamente, se questa caratteristica è specificata nella documentazione. Se non lo è, dobbiamo scrivere che non è possibile. Allora la domanda sparirà da sola.

Victor, dai un'occhiata al mio prossimo post dove ti ho dato l'idea di controllare solo il prezzo di apertura, e reimpostare lo SL e il TP a partire dal prezzo, senza fare storie!

E ora posterò la funzione! Ho anche "aspettato" da qualche parte che tu rispondessi ieri! Saremo più semplici.

#include <stderror.mqh>//штатные инклюдники, чтобы 
#include <stdlib.mqh>  //вызывался ErrorDescription()



//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3) {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0) { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }

Qualsiasi domanda, chiedete, non aspettate fino a domani! ;)

La funzione è universale, serve per qualsiasi modifica con posizioni pendenti e aperte! Buona fortuna!

Proprio ora, come ieri, andando a pranzo! Tutto il meglio!

 
borilunad:

Ora metto fuori la funzione! Anch'io stavo aspettando da qualche parte che tu rispondessi ieri! Manteniamo le cose semplici.

Se avete domande, non aspettate fino a domani! ;)

La funzione è universale, serve per qualsiasi modifica con posizioni pendenti e aperte! Buona fortuna!

E i controlli di stop e frizzi? O non è necessario al giorno d'oggi? :) Per quanto riguarda il tuo codice di funzione, sono d'accordo. È semplice e diretto. Ma gli assegni... non ci sono. Perché no?

Vado a cena:

Proprio ora, come ieri, andando a pranzo! Tutto!

Chi sta pranzando e chi sta già cenando a quest'ora...
 
hoz:

Come faccio a sbarazzarmi di questo cazzo di errore? Non ne posso più. Sto controllando ogni parametro di ingresso della funzione. Per me, al momento, è così:

Cioè, se il parametro non è stato cambiato, non c'è bisogno di cambiarlo. Non l'ho mai fatto prima, ma ho deciso di...

Poi i parametri vengono passati al metodo di modifica dell'ordine come segue:

Nw output nel log:

Quindi, il giornale ci notifica, come modifica: OK, ma poi un errore. Nessuno dei parametri è cambiato.

L'ordine è in sospeso. Quindi possiamo cambiare open, stop e take price. E questo, a quanto ho capito, non contraddiceva la documentazione.

Chi ha incontrato qualcosa del genere? Come risolverlo?

Rimuovi altro.
 
hoz:

Boris, che dire dei controlli stopplevel e frizzlevel. O è superfluo di questi tempi? :) Per quanto riguarda il tuo codice di funzione... sono d'accordo. È semplice e diretto. Ma gli assegni... non ci sono. Perché no?

Chi sta pranzando e chi sta già cenando a quest'ora...

Tutti i controlli sono fatti prima del ciclo, che ha condizioni relative ad ogni tipo e una chiamata a questa funzione, che controlla solo gli errori in Modify():

            ModifyOrder(OrderTicket(),OOP,SL,0,0,clrBlue); return(0);

Per qualsiasi altra cosa, chiedete pure, ma ora vado a cena. ;)

 
Come hai votato?
Motivazione: