[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 11

 
Fox_RM:

Ho provato ad aprire ordini su una nuova barra utilizzando la funzione NewBar(). Se è usato per questo scopo?

Per esempio if (NewBar())i++; Qualcosa del genere.

Non ho notato NewBar, mi dispiace.

Poi cambiate quanto segue: Non c'è bisogno di calcolare l'intero indicatore ogni tick, se si aprono operazioni solo su una nuova barra.

Quindi, spostate l'intero calcolo dell'indicatore prima di verificare le condizioni di apertura di un'operazione e contate quante barre vi servono (20 se non mi sbaglio)


Quindi la strategia è la seguente:

1) nuovo bar? no - passeggiata

2) sì - calcola tutto ciò di cui abbiamo bisogno (MA, indicatore, tutto il resto per le condizioni)

3) Controllare le condizioni - no - camminare

4) Sì - aperto al prezzo corrente (Ask o Bid, rispettivamente)

 
ilunga:

NewBar non l'ha notato, mi scuso.

Poi cambiate quanto segue: Non c'è bisogno di contare l'intero indicatore ogni tick se si aprono compravendite solo su una nuova barra.

Quindi, sposta tutto il calcolo dell'indicatore prima di verificare le condizioni di apertura del trade e conta non tante barre, ma quante ne hai bisogno (20 se non mi sbaglio).

Sono proprio 20. Ho capito più o meno come fare. Vi prego di spiegarmi la differenza tra il mio calcolo e il calcolo di 20 barre per gli Expert Advisors.

Voglio solo capire l'essenza dell'errore.

 
Fox_RM:
Buona giornata a tutti!
Ho deciso di riscrivere il codice del mio indicatore per un Expert Advisor per tracciare
Ho deciso di cambiare il codice del mio indicatore per tracciare l'elaborazione dei suoi segnali.
Non ho errori durante la compilazione e funziona nello Strategy Tester senza errori.

Non so come usarlo.

Z.U. Sono sicuro che ci sono molti errori stupidi, per favore sparate a salve.

È più facile riscrivere il codice come lo vedete, piuttosto che risolvere il problema del "che cosa stai ballando intorno" qui, per esempio:

  ArrayResize(MA1,Bars);ArrayResize(MA2,Bars);

Non ho incontrato come funziona la funzione utilizzata negli indicatori nell'EA:

  int counted_bars=IndicatorCounted();  

Ma, se "qualunque", il ciclo si organizza:

   for(i=0; i<=limit; i++) 

Dove limite = Bars - counted_bars, al 2° tick prenderà un valore uguale a 0, poi per codice gli verrà assegnato un valore... OPA - e questo è un NUOVO MONDO nella programmazione:

  if(limit>0) limit=0;

...provate a scrivere questa condizione in questo modo, se non rompe l'intera strategia:

  if(limit<=0) limit=1;
 
Fox_RM:

Cioè usare questa condizione per il ricalcolo delle barre?

Ma nel mio indicatore, ad ogni tick vengono calcolati gli array TP_UP e TP_DN. Pertanto, devono essere calcolati prima.


Di nuovo, il prezzo di apertura di OP_BUY==Ask, OP_SELL==Bid.

E voi avete Close[i].

 
Fox_RM:

Sono proprio 20. Ho capito più o meno come fare. Si prega di spiegare la differenza tra il mio calcolo e il calcolo di 20 barre per Expert Advisor SOLO.

Voglio solo capire l'essenza dell'errore.

Non c'è nessun errore in quanto tale nel calcolo dell'intero indicatore. Pensate a cosa è più veloce:

1) per contare le barre (circa 10000) ogni tick

2) contare 20 battute 1 volta al minuto (o anche di più)

 
Fox_RM:
Buona giornata a tutti!
Ho deciso di riscrivere il codice del mio indicatore per un Expert Advisor per tracciare
Ho deciso di cambiare il codice del mio indicatore per seguire il funzionamento dei suoi segnali.
Non ho errori durante la compilazione e funziona nello Strategy Tester senza errori.

Non so come usarlo.

Z.I. Sono sicuro che ci sono molti errori e stupidi, per favore sparate a salve.

NON PRINCIPALE, ma per semplificare il codice, questo costrutto:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Avrebbe dovuto essere sostituito con una semplice dichiarazione di array con dimensionalità:

double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM:

Sono proprio 20. Ho capito più o meno come fare. Per favore, spiega la differenza tra il mio calcolo e il calcolo di 20 barre SOLO per Expert Advisor.

Voglio solo capire l'essenza dell'errore.

Questi sono principi di programmazione PRINCIPALI {FONDAMENTALI - non fare cose che non hanno senso! :)))
 
Fox_RM:
E un'altra domanda relativa al funzionamento della biblioteca.
Ho creato il file di libreria, l'ho compilato, tutto è andato senza errori.
Ho importato la funzione nel codice dell'indicatore, l'ho compilato e tutto è a posto.
Quando avvio l'indicatore, la funzione da importare non viene eseguita, quando uso

codice indicatore, tutto funziona. Ecco il codice della libreria.

Questa è una chiamata nel codice dell'indicatore:

//+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link      "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn(double & ArrSr[])
{
double a=1,c,step=1/20;
for (int i=0;i<=20;i++)
{if (ArrSr[i]==0){a*=1;}else{a*=MathAbs(ArrSr[i]);}}
c=MathPow(a, step);
  return(c);
}
//+------------------------------------------------------------------+
 
Zhunko:

Vadim, hai messo un (&) così piccolo che non si vede subito! :)))

Mi chiedo come l'autore (nella versione dell'autore) questa funzione sia stata eseguita in un posto e non in un altro! ;)

 
Fox_RM:

Sono proprio 20. Ho capito più o meno come fare. Si prega di spiegare la differenza tra il mio calcolo e il calcolo di 20 barre per Expert Advisor SOLO.

Voglio solo capire l'essenza dell'errore.

A proposito, ho notato che dichiarate array di lavoro di dimensione 20:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

E la vostra libreria calcola 21 elementi:

for (int i=0;i<=20;i++)

Posso supporre che il ciclo dovrebbe iniziare da 1:

for (int i=1;i<=20;i++)
Motivazione: