consulente esperto - domande varie - pagina 30

 
honest_knave:

Un esame sommario suggerisce che dovrebbe funzionare. Ma si potrebbe migliorare l'efficienza.

Pensate a quanti oggetti diversi avete disegnato sul vostro grafico. Se clicchi *qualsiasi* di questi oggetti, dovrai fare un loop su ogni singolo ordine e cercare di trovare una corrispondenza. Molti oggetti probabilmente non hanno nulla a che fare con gli ordini. Questo è inefficiente.

Ecco perché ho suggerito di controllare il primo carattere di sparam per "#". Questo identifica automaticamente l'oggetto come collegato ad un ordine.

Inoltre, non c'è bisogno di fare un ciclo attraverso gli ordini. Il nome dell'oggetto e/o il testo dell'oggetto contengono già il numero del biglietto. Quindi estrai il numero del biglietto da lì e chiudi l'ordine

Esempio:

Si apre un ordine. Gli viene dato il numero di ticket 12345

Crea un OBJ_BUTTON con nome"#12345".

Il codice in OnChartEvent() sarebbe qualcosa come questo (non compilato, non testato, a notte fonda...):

if(id==CHARTEVENT_OBJECT_CLICK && StringSubstr(sparam,0,1)=="#") // this is an order button
  {
   int ticket=(int)StringSubstr(sparam,1); // extract the ticket number
   if(OrderSelect(ticket,SELECT_BY_TICKET)) // select the order
     {
      if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,CLR_NONE)) // close the order
        {
         Print("# Error ",GetLastError());
        }
     }
  }
(probabilmente vorrai gestire anche l'OrderSelect, in caso di fallimento)

Wow! Non sapevo di questo.

Quindi, hai menzionato due volte, e io esattamente non l'ho capito.
Ora lo testerò da solo e lo porterò nel mio file EA principale.

Grazie ancora.

 

Uso OrderTicket() per altri oggetti, ora vedo quando clicco su quell'oggetto - l'ordine si chiude.
Mi è piaciuto il tuo metodo, ma sembra che sia influenzare altri oggetti.

Altri oggetti di nome come questo qui è uno di loro.

"#"+IntegerToString(OrderTicket())+" -"+"Object HLine"

Grazie in anticipo.

 
Max Enrik:

Uso OrderTicket() per altri oggetti, ora vedo che quando clicco su quell'oggetto - l'ordine si chiude.
Mi è piaciuto il tuo metodo, ma sembra che influenzi altri oggetti.

Altri oggetti di nome come questo qui è uno di loro.

"#"+IntegerToString(OrderTicket())+" -"+"Object HLine"

Grazie in anticipo.

La soluzione più elegante è cambiare il tuo sistema di denominazione

Tuttavia, puoi ancora eliminare il numero d'ordine. Dipende solo dal formato di denominazione esatto.

Ma prima di tutto questo, qual è l'OBJPROP_TEXT del pulsante? Ci sono altri oggetti che hanno lo stesso OBJPROP_TEXT?

 
honest_knave:

La soluzione più elegante è cambiare il tuo sistema di denominazione
Tuttavia, puoi ancora eliminare il numero d'ordine. Dipende solo dal formato esatto di denominazione.
Ma prima di tutto questo, qual è l'OBJPROP_TEXT del pulsante? Ci sono altri oggetti che hanno lo stesso OBJPROP_TEXT?

Sì! So che posso cambiare i nomi degli oggetti Button (anche io uso Prefix) se cambio i nomi dei pulsanti allora potrei cambiare molte cose, per esempio cancellare il sistema e altre cose che sono tutte collegate tra loro.

Qui sotto ci sono i nomi di Button e HLine.

"#"+IntegerToString(OrderTicket())+" -"+"Object HLine"
"#"+IntegerToString(OrderTicket())+" -"+"Object Button"

(naturalmente, i nomi degli oggetti sono un po' più diversi, ma lo stesso metodo)

Grazie in anticipo.

 

Mercato chiuso

Forse ho trovato, ma non sono sicuro.
Se questo non è buono, per favore fatemelo sapere.

if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"close order button",0)>=0)

Grazie in anticipo.

//--- 2a volta modificato

Ehi, amico!

Grazie mille. Finora nessun problema. Funziona correttamente!

 

#Oggetti di crossover - Aperto

Ho affrontato diverse volte questo problema, a volte l'ho superato a volte ho rinunciato, ora non vorrei rinunciare ancora una volta.
Ho 2 oggetti " HLine e Button " che si incrociano, voglio dire che quando clicco su uno di loro, entrambi selezionati questo non è una buona cosa per me. ( BUTTON Width = 20, HLINE Width = come sai )

D: Come posso fare quando clicco sull'oggetto BUTTON, l'oggetto HLINE non viene selezionato mentre si incrociano, per favore?
(Posso facilmente selezionare HLINE dove non si incrociano)

Grazie in anticipo.

(Ci sto lavorando, ogni buon commento sarebbe meglio, per favore).

 

#Profit in Pips - Aperto |#Profit in Pips - Chiuso per ora - Ho risolto

Signor William- uso i vostri codici di calcolo "Pip, Point ... " codici di calcolo.
Ora cerco di ottenere il profitto in valore di pip con i codici seguenti. Ho 2 ordini, uno dei quali viene visualizzato correttamente (OP_BUY), il secondo non viene visualizzato correttamente - 399 - effettivo 400 (OP_SELL).

D: Sto sbagliando il calcolo del profitto in pip, per favore?

change_to_pips( OrderTakeProfit() - OrderOpenPrice() )

Grazie in anticipo.

( l'ultimo giorno ho controllato i forum in diversi siti web - che non è stato vantaggioso per me )

 

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

Rilasciato MetaTrader 4 Build 574 con linguaggio MQL4 aggiornato e mercato delle applicazioni

whroeder1, 2014.01.27 14:11

  1. Non scrivere codice illeggibile e incomprensibile come quello.
    if (MyOrdersTotal() == 0 && (Hour()​>=​StartHour ​&& Hour()​<​EndHour && StartHour​<​EndHour) || (Hour()​>=​StartHour || Hour()​<​EndHour && StartHour​>​EndHour))
    Rendere leggibile e semplificare e sempre parentesi quando si mescolano ands/ors.
    bool    isHourOKnorm = StartHour < EndHour
                         && StartHour <= Hour() && Hour() < EndHour,
            isHourOKwrap = StartHour > EndHour
                         && (StartHour <= Hour() || Hour() < EndHour),
         isHourOK       = isHourOKnorm || isHourOKwrap;
    if(MyOrdersTotal() == 0 && isHourOK)
  2. Che dire del caso in cui StartHour == EndHour (cioè tutte le 24?) Vedi il mio codice ed evita il wrap delle 24 ore.

Uno dei sorprendenti esempi di operatore " if " di una condizione complessa dal signor William.
Solo
grazie!


Ho lottato negli ultimi 2 giorni per risolvere la mia condizione complessa con l'operatore "if", ma non posso risolvere il mio problema finché non ho trovato questo grande esempio.

 

Per favore qualcuno mi aiuti, faccio davvero fatica a risolvere questo problema.

#296

Grazie in anticipo.

 

Il codice sottostante a volte funziona perfettamente, a volte no. Non riesco a risolvere questo problema. Quando uso l'ordine singolo, funziona perfettamente, ma quando apro ordini multipli, questa funzione non funziona correttamente.
Per favore aiutatemi, e spiegatemi un po' di più (cosa c'è di sbagliato nel codice sottostante) che sarebbe meglio per me.

(Ora ci sto lavorando).

if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(Symbol()!=OrderSymbol()) continue;

         update_1();
         update_2();
         update_3();
        }
     }
  }

Grazie in anticipo.