consulente esperto - domande varie - pagina 23

 

Ve lo consiglio.

Quando avrai risolto tutti quei problemi potrai considerarti tra i professionisti.

Rendete le cose più difficili possibile e imparerete di più.

Altrimenti continuerete a lottare con le cose semplici per tutto il tempo.

 

Prima di tutto grazie davvero per i vostri commenti.

Dopo i vostri commenti, ho deciso che dovrei ancora una volta creare dei blocchi di codice di modifica dell'ordine per certo e per prova.

 

Signor @Marco vd Heijden

Dopo i tuoi grandi commenti / esempi - scrivo già un codice per il trascinamento dei prezzi di Take Profit.
Ma in realtà sono contrario agli aggiornamenti continui. Perché? Da quando scrivo i blocchi di codice per i trascinamenti di Take Profit vedo che il mio grafico diventa lento. Forse ho fatto degli errori in quella parte di codice. Lo controllerò dopo aver risolto questo problema.

(mentre cercavo di risolvere il mio problema da solo, dopo aver provato diverse volte ho pensato che non c'è la possibilità di fermare il calcolo se uso l'operatore "for")

Vorrei dire che ho già il calcolo per le dimensioni di Take Profit e Stop Loss, per questo ho rimosso l'operatore "Switch" dal codice sottostante.
Sto solo provando quando il prezzo di Take Profit sarà uguale al prezzo della "Linea" - poi stop calcola / aggiorna fino alla prossima volta che il prezzo di Take Profit "!=" prezzo della Linea.
D:
Sto lottando per correggere il codice sottostante per la mia preoccupazione. Cosa posso fare per questo, per favore?
Q: Sto facendo male a non usare l'operatore "Switch" per il mio problema?

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   for(int order=OrdersTotal(); order>=0; order--)
     {
      bool selected=OrderSelect(order,SELECT_BY_POS);
        {
         if(selected==1)
           {
            if(Symbol()==OrderSymbol()) // only for current chart symbol
              {
               /* I just try for - if price not equal != "Line OBJPROP_PRICE "
                  stop updates */


               // if objects not found - create them
               // ...
               // if objects exist
               // ...
               while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
                 {
                  PlaySound("ok.wav");
                  price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
                  Comment(price);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

Mentre ho letto la documentazione e il libro per OrderModify() con l'esempio non ho visto l'esempio esattamente per il mio problema.

Tutto il meglio per voi!

 

Non sono stato aggiornato con il thread, quindi potrei essermi perso quello che state facendo.

Prima di tutto, semplificate:

for(int order=OrdersTotal(); order>=0; order--)
     {
      bool selected=OrderSelect(order,SELECT_BY_POS);
        {
         if(selected==1)
Dovrebbe diventare:
for(int order=OrdersTotal()-1; order>=0; order--)
     {
      if(OrderSelect(order,SELECT_BY_POS)

Inoltre, pensa a quanto spesso muovi la linea. È una volta al secondo? Probabilmente no.

Metti il tuo codice in OnChartEvent():

void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
  {
   if(id==CHARTEVENT_OBJECT_DRAG && sparam=="line") // the chart event of dragging the line

Stai chiamando la stessa funzione più volte su ogni ordine aperto che hai:

while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
  {
   PlaySound("ok.wav");
   price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
   Comment(price);
  }

Chiamala una volta prima di entrare nel ciclo dell'ordine:

double lineprice=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
for(int order=OrdersTotal()-1; order>=0; order--)
  {  
 

Assicurati di capire il principio dei loop while.

È pericoloso perché se per qualsiasi motivo un altro EA cerca di modificare il valore del prezzo della linea, allora come risultato questo pezzo di codice sarà bloccato in un ciclo infinito e il vostro terminale molto probabilmente si bloccherà.

Questo di solito finisce con una terminazione anomala.

Dal momento che stai usando l'oggetto "linea" il pericolo comunque non è così grande come quando si parla di livelli tp e sl che vengono inviati al server da OrderModify() quindi a meno che tu non abbia intenzione di scrivere un altro EA che interferisca con "linea" non dovrebbe essere un problema.

 
honest_knave:

Non sono stato aggiornato con il thread, quindi potrei essermi perso quello che state facendo.


Chiamalo una volta prima di entrare nel ciclo dell'ordine:

double lineprice=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
for(int order=OrdersTotal(); order>=0; order--)
  {  

Vi prego di capire cosa sta cercando di fare.

Deve chiamare due volte e confrontare i valori per vedere se la linea è stata spostata.

Questo è impossibile da fare senza leggere il valore due volte.

while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))// if price differs from "line" value do:
  {
   PlaySound("ok.wav");
   price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);// now overwrite old line value with new line value.
   Comment(price);
  }
 
Marco vd Heijden:

Vi prego di capire cosa sta cercando di fare.

Deve chiamare due volte e confrontare i valori per vedere se la linea è stata spostata.

È impossibile farlo senza leggere il valore due volte.

Deve spiegarmelo di nuovo.

Se hai un CHARTEVENT_OBJECT_DRAG e lo sparam è "line" allora la linea si è spostata.

Per le rare occasioni in cui si sposta temporalmente lungo lo stesso prezzo, la penalità non è molta.

 

Ci sono molti modi per fare la stessa cosa.

Se decidete di usare il CHARTEVENT ricordate che non funziona nel tester.

 
OK, lascio a voi ragazzi. Buona fortuna.
 

Ho già letto i vostri benefici commenti, signor Marco, signor Knave, signor William, grazie mille a tutti i commenti!

Ora ho già controllato alcune cose e ho anche deciso che potrei scrivere ( / e controllare) OrderModify() passo dopo passo. Perché questo OrderModify() è davvero molto pericoloso per me.
Diverse volte ho già affrontato modifiche sbagliate. Ma quando provo ad affrontare gli stessi problemi, che so per certo da dove viene quel problema, anche io provo le stesse cose nel grafico che i problemi non è successo di nuovo. Dopo poche ore ho affrontato di nuovo lo stesso problema.
Non so ancora esattamente quale sia la causa di questo problema. Cos'è il problema che intendo. Ne ho già condiviso uno con voi nei miei commenti precedenti. Inoltre ho aperto una posizione con il mio pannello di trading EA, che è OK! poi ho provato ad aprire Sell Limit con il metodo di commercio manuale. (che è il mio pannello di trading non ha ancora ordini Sell Limit o Sell Stop Pending)

Quindi, penso che dovrei condividere i codici del blocco con voi, ma non posso condividerli per ora perché ci sto ancora lavorando. Voglio spostare quel codice di blocco in OnChartEvent() - perché ci aggiungerò anche dei pulsanti.

Problema: Non riesco a scrivere un codice se l'ordine chiuso rimuove i suoi oggetti, come questo, Stop Loss, Take Profit, Open, Close frecce qualcosa del genere, per favore aiutatemi.
Domanda: Anche Stop Loss, Take Profit Lines davanti agli oggetti del Trade Panel. So che è stato causato dall'ultima volta che ha creato l'oggetto. Ma se mi capite, per favore fatemi sapere come posso fare l'oggetto Trade Panel dovrebbe essere davanti a tutti gli altri oggetti senza linee "Stop Loss e Take Profit".

Grazie in anticipo.