[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 753

 
Morzh09:

Si prega di consigliare qual è la fregatura:

1) Riempio un array bidimensionale con il tempo di formazione dell'estremo di ZigZag e il valore dell'estremo stesso.

2) Riempire la seconda matrice con uno o due a seconda che l'estremo corrispondente a un dato elemento sia un massimo o un minimo locale.

3) Emetto i risultati attraverso Alert.

ma in un posto dove dovrebbero essere stampati 1 o 2 vengono sempre stampati degli zeri.

Qual è la fregatura?!?

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+


string TimeSave1[100][2], TimeSave2[100][2];

double A[], B[];

double Number_of_extremum[];

extern string Currency = "EURUSD";


+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//----

int k;

k=0;

double date;

int status;

for(int shift = 0; shift <= Bars-1; shift++)

{

date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);

//----------------------------------------------------

if(date > 0)

{

TimeSave1[k][0]=TimeToStr(Time[shift]);

TimeSave1[k][1]=date;

k++;

}

}

//====================================================

for (int u=1;u<=k;u++)

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}

//====================================================

for (int j=1;j<10;j++)

{

Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);

}

//----

return(0);

}

//+------------------------------------------------------------------+

E un altro chiarimento:

come confrontare date e tempi in mql (per esempio, ho bisogno di determinare quale vertice di ZZ si è formato prima - per questo ho bisogno di confrontare il tempo della loro formazione...)

Datetime è essenzialmente int, contiene il numero di secondi, partendo dal 1970 e finendo con l'ora del bar. Controllo per più/meno - funziona...
Non ho guardato il resto - sono appena arrivato...
 

Amici, una domanda:


Affrontato questo problema:

l'indicatore emette alcune informazioni tramite Alert.

Ma, a poco a poco il campo di uscita di Alert accumula troppa "merda"...

Quando riavvierò l'indicatore, sarà possibile cancellare tutti i vecchi record in Alert?


Grazie in anticipo.

P.S.

Per favore, commentate il mio post di prima (perché i valori nulli sono visualizzati invece di 1 e 2)

 

Non l'ho trovato sul forum...

Domanda - è possibile cambiare il commento dell'ordine? Bene, quando l'operazione OrderSend() mette nel commento il valore "OrderNotModify", e facendo ulteriori azioni con questo ordine, per esempio la chiusura parziale, cambio OrderComment in "OrderIsModify"... o no?

 
Morzh09:

Puoi dirmi qual è la fregatura:

La matrice è riempita da 0, ma qui l'indice 0 è saltato, e noi riempiamo dal 1°, e

for (int u=1;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // выражение при старте всегда [1][1]<=[0][1]

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}
 
Abzasc:

L'array è riempito da 0, ma qui l'indice 0 è saltato e riempito dal 1°, e

Non capisco bene il suo commento.

1) k - all'inizio - non è zero! k = il numero di vertici ZigZag che abbiamo rilevato ad una certa profondità della storia!

2)"quindi, funziona sempre [1][1]>=[0][1]" - perché funziona sempre? se l'elemento precedente dell'array TimeSave1 > elemento successivo, non funziona.

Ripeta, per favore, quello che voleva dire.

 
Morzh09:

Non ho capito bene il suo commento.

1) k - all'inizio - non è uguale a zero! k = il numero di vertici ZigZag che abbiamo rilevato ad una certa profondità della storia!

2)"quindi, funziona sempre [1][1]>=[0][1]" - perché funziona sempre? se l'elemento precedente dell'array TimeSave1 > elemento successivo, non funziona.

Per favore, dimmi di nuovo cosa vuoi dire.

Capisco K. Questo è quello che non capisco.

for (int u=1;u<=k;u++) // на первом шаге счетчик присваивает u = 1

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете

{

nella parte destra

 
Michelangelo:

è possibile cambiare il commento dell'ordine?

Solo in OrderModify biglietto prezzo stoploss takeprofit scadenza colore_freccia

Sembra di no.

 

quindi... sembra che sia il caldo... E sta influenzando anche il mio compilatore :)

Vedi, ho bisogno di far scorrere un array che registra la data di formazione del max/min dello ZigZ e il valore di quel max/min.

Ho bisogno di capire, infatti, quale vertice di ZZ è un minimo e quale un massimo.

Per fare questo confronto il prossimo punto più alto di ZZ con quello precedente.

Se il top consecutivo è più grande, allora è un top.

se è più piccolo, è un trogolo.

A seconda che si tratti di un vertice o di un trogolo, aggiungiamo 1 o 2 a un elemento di un'altra matrice, rispettivamente.

Sono curioso di questo, DOVE l'errore potrebbe essere!!!!

File:
 
Andrò qui con gli archi - ho rotto la mia calcolatrice tutto lo stesso... :)
Voglio essere in grado di calcolare i livelli di fiba sulla base di due valori noti:
Il livello zero del Fib corrisponde a 1,2807, il livello 23,6 corrisponde a 1,2838.

Dobbiamo trovare gli altri livelli 38.2, 50.0, 61.5, 100.0 e a quali prezzi corrispondono.

Non sono nemmeno riuscito a trovare una connessione tra 1,2807 e 1,2838 per capire i principi di
di trovare tutti gli altri valori.

Per favore, ditemi, qualcuno... :)

 
IgorM:
Qualcuno ha incontrato l'indicatore per vedere il tempo di apertura della barra in un TF basso, non quanto tempo è interessante, e per disegnare i segni sul grafico dove la barra è iniziata e dove è finita
#property indicator_chart_window
#property link      "IgorM"

extern int num    = 10;
extern color line = White;
int init()
{return(0);
}
  
void clear(){
   for(int i=ObjectsTotal()-1; i>=0;i--) {
      string name = ObjectName(i);
      if (StringFind(name,"timeH1_") !=-1) ObjectDelete(name);
    }
}

int deinit(){
clear();
return(0);
}

int start()
{   
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)   return(-1);
   clear();
   for (int i=0;i<=num;i++){ 
      string name = "timeH1_"+TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
      ObjectCreate(name,OBJ_VLINE,0,iTime(NULL,PERIOD_H1,i),0);
      ObjectSet(name,OBJPROP_COLOR,line);
      ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
    }
return(0);
}

Il codice non è ottimizzato, ma disegna quello che vorrei vedere.