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

 
È possibile calcolare il capitale minimo usando i dati storici degli ordini?
 
forexnew:
È possibile calcolare il capitale minimo utilizzando i dati storici degli ordini?
.


Capire una cosa - cosa è specificato in "dati storici degli ordini"? Ti interessa il prezzo di chiusura, se è profitto o perdita per l'ordine selezionato...? e allora? La cronologia degli ordini non mostra l'ammontare della perdita del conto nel capitale (la perdita corrente) quando l'ordine è stato sul mercato, cioè la perdita alla chiusura può ammontare, diciamo, a 500 unità della valuta ma verrebbe mostrata nella cronologia degli ordini mentre il capitale potrebbe essere sceso a -1000 unità della valuta quando l'ordine era sul mercato. Nota: lo Strategy Tester calcola le perdite sul capitale.

La risposta alla sua domanda: non si può.

 
LOA:

Buona giornata!

I professionisti aiutano - non vado da nessuna parte senza di voi!

Ho già affrontato questo problema, ma non ho trovato l'errore, volevo davvero capirlo da solo, mi sono scervellato per qualche giorno, ma finora non ho molta esperienza.

La discussione precedente si è conclusa con l'idea che forse la ragione è nel codice degli indicatori che sto cercando di usare.

Ho scritto un indicatore (sono i miei primi passi) che visualizza la ripartizione di ME_Proboy_F5

Il problema è ..... L'indicatore non viene ridisegnato quando si formano nuove barre e viene azzerato sull'ultima barra dopo la ricezione di un tick. Viene ridisegnato se si cambia il tf o si visualizzano le proprietà.

L'indicatore richiede i dati di altri indicatori, tutti tranne uno ME_Proboy_F_5 (metto anche il suo codice) funziona bene. Non riesco a trovare alcun errore anche nel secondo indicatore. L'indicatore viene ridisegnato, ma è lento, cioè viene visualizzato correttamente al secondo riavvio (cambiare il FF o le proprietà di visualizzazione).

Sarei molto grato per l'aiuto.

Proboy_Order_F5 - questo è l'indicatore principale, sul quale chiedo

ME_Proboy_F5 - il secondo, che è dubbio


Mi dispiace continuare a tormentarvi con la mia domanda, ma voglio davvero arrivare in fondo alla questione.

Applicare la funzione limit=MathMin(Bars-1, Bars-counterd_bars-1) non ha risolto il problema, ma ho seguito le raccomandazioni, ho lavorato sullo stile di programmazione, spero abbia funzionato, mi sono liberato delle variabili inutili.

Vedi sopra per l'essenza del problema

 
Roman.:


Una cosa che dovreste capire - cosa è specificato in "dati storici degli ordini"? Ti interessa il prezzo di chiusura, il profitto o la perdita su un ordine selezionato...? E allora? La cronologia degli ordini non mostra l'ammontare della perdita del conto nel capitale (perdita corrente) quando l'ordine è stato sul mercato, cioè la perdita alla sua chiusura può ammontare, diciamo, a 500 unità della valuta ma verrebbe mostrata nella cronologia degli ordini mentre il capitale potrebbe essere sceso a -1000 unità della valuta quando l'ordine era sul mercato. Nota: il tester della strategia calcola la perdita sul capitale.

La risposta alla sua domanda: non si può.

Tuttavia, c'è un indicatore https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip dove l'equità è in qualche modo calcolata sulla base di dati storici. Non ho ancora capito come farlo. Forse, l'equità può essere calcolata in base ai punti chiave (chiusura degli ordini), ma come appare sotto forma di una formula unica?

 

Ecco il codice con la condizione che gli ordini devono essere cancellati dopo la scadenza del tempo, questa è la condizione

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Allora, perché se inseriamo questa condizione nel primo operatore if, allora l'altro operatore situato al suo interno non considera questa condizione?

Cioè, questo codice non funziona e cancella tutti gli ordini pendenti in una volta sola.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

E questo codice funziona e non cancella gli ordini in una volta sola.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 
sss2019:

Ecco il codice con la condizione che gli ordini devono essere cancellati dopo la scadenza del tempo, questa è la condizione

Allora, perché se inseriamo questa condizione nel primo operatore if, allora l'altro operatore situato al suo interno non considera questa condizione?

Cioè, questo codice non funziona e cancella tutti gli ordini pendenti in una volta sola.

E questo codice funziona e non cancella gli ordini in una volta sola.

Entrambi i codici non sono corretti, quindi analizzo il tuo codice e non so cosa sia corretto/sbagliato.

Prendiamo l'esempio più semplice. Hai 2 ordini che devono essere rimossi.

1) for(int counter=0;counter<OrdersTotal();counter++)

l'inizio di un buon 0 è inferiore a due e il primo ordine è tranquillamente rimosso, ma poi

2)

 for(int counter=0;counter<OrdersTotal();counter++)

contatore = 1, ma c'è solo un ordine rimasto! Significa che la condizione (1<1) non è soddisfatta, e il ciclo termina...

 
ilunga:

Notate che entrambi i codici non sono corretti, quindi non so cosa funziona bene/sbagliato per voi.

Prendiamo l'esempio più semplice. Hai 2 ordini, entrambi devono essere cancellati.

1) for(int counter=0;counter<OrdersTotal();counter++)

Il buon 0 è meno di due e il primo ordine è stato cancellato con successo, ma poi

2)

contatore = 1, ma c'è solo un ordine rimasto! Significa che la condizione (1<1) non è soddisfatta e il ciclo termina...


No, ma è questo il punto, a questo punto cancella TUTTI gli ordini, in modo pulito. Il problema è che li cancella immediatamente.
 
LOA:

Buon pomeriggio!

Ho scritto un indicatore (questi sono i miei primi passi) che mostra chiaramente la ripartizione di ME_Proboy_F5


Buoni i primi passi, Olga Alexandrovna. 330 linee di codice

 
forexnew:

Tuttavia, c'è un indicatore https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip dove l'equità è in qualche modo calcolata sulla base di dati storici. Non ho ancora capito il metodo. Forse, l'equità può essere calcolata in base ai momenti chiave (chiusura degli ordini), ma come si presenta sotto forma di formula?




Familiarizzate con i concetti di EQUITÀ e BILANCIO e quali sono le loro differenze.

Questo indicatore mostra l'equity line in tempo reale, poiché l'equity line è l'attuale profitto/perdita sulle posizioni non chiuse, "È possibile determinare realmente l'equity per punti chiave (chiusure di ordini)" - non è possibile, quindi si considererà il cambiamento dell'equity line sulle posizioni chiuse.

"L'equità è in qualche modo calcolata sulla base di dati storici" - no. Questo indicatore calcola la linea del capitale per il momento attuale - per le posizioni aperte nel mercato.

 

Buonasera, ho trovato questo nel tutorial di S. Kovalev, ma nel terminale MT4 non c'è altro che "bau! Per favore, consigliatemi, chi sa dove prendere in prestito una serie di segnali sonori per diverse operazioni, in modo da non dover continuare a guardare il computer tutto il tempo? Grazie per un possibile suggerimento!

   switch(Mess_Number)                 // Elegir texto del mensaje segun el numero 
     {
      case 1:
         Graf_Text="Closed order Buy "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 2:
         Graf_Text="Closed order Sell "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 3:
         Graf_Text="Deleted pending order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 4:
         Graf_Text="Opened order Buy "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 5:
         Graf_Text="Opened order Sell "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 6:
         Graf_Text="Placed pending order "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 7:
         Graf_Text="Order "+Number+" modified into the market one";
         PlaySound("Transform.wav");                                break;
      case 8:
         Graf_Text="Reopened order "+ Number;
         PlaySound("Bulk.wav");                                     break;
      case 9:
         Graf_Text="Partly closed order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 10:
         Graf_Text="New minimum distance: "+ Number;
         PlaySound("Inform.wav");                                   break;
      case 11:
         Graf_Text=" Not enough money for "+
         DoubleToStr(Value,2) + " lots";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 12:
         Graf_Text="Trying to close order "+ Number;
         PlaySound("expert.wav");                                   break;
      case 13:
         if (Number>0)
            Graf_Text="Trying to open order Sell..";
         else
            Graf_Text="Trying to open order Buy..";
         PlaySound("expert.wav");                                   break;
      case 14:
         Graf_Text="Invalid password. EA doesn't function.";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 15:
         switch(Number)                 // Elegir texto del mensaje segun el numero del error 
           {
            case 2:   Graf_Text="Common error.";                    break;
            case 129: Graf_Text="Wrong price. ";                    break;
            case 135: Graf_Text="Price changed. ";                  break;
            case 136: Graf_Text="No prices. Awaiting a new tick.."; break;
            case 146: Graf_Text="Trading subsystem is busy";        break;
            case 5 :  Graf_Text="Old version of the terminal.";     break;
            case 64:  Graf_Text="Account is blocked.";              break;
            case 133: Graf_Text="Trading is prohibited";            break;
            default:  Graf_Text="Occurred error " + Number;//otros errores 
           }
         Color_GT=Red;
         PlaySound("Error.wav");                                    break;
      case 16:
         Graf_Text="Expert Advisor works only for EURUSD";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      default:
         Graf_Text="default "+ Mess_Number;
         Color_GT=Red;
         PlaySound("Bzrrr.wav");                    
     }