Come trovare il tempo della barra in cui le medie mobili si sono incrociate? (codice all'interno) - pagina 3

 

Sì, ne ho bisogno specificamente per il grafico PERIOD_H1. Poiché posso cambiare i time frame e voglio che sia codificato per quel TF.

(Sono preoccupato che lo sto facendo male - specialmente quello che mi hai scritto due volte WHRoeder riguardo alle MA e all'istruzione if... - Quindi mi sto preparando per qualche schiaffo, ma penso che questo mi direbbe la barra dove le MA si sono incrociate (sotto). Quindi questo funzionerebbe sicuramente applicandolo a iBarShift...?)

if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[1];
 
WHRoeder:

Le medie mobili multiple non si incrociano allo stesso tempo.

Perché stai postando due volte? La tua domanda ha già ricevuto una risposta.

Trova la prima barra in cui erano tutte nel giusto ordine.


int DIR = 0;
for(int iBar = 0; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if(     MA20 > MA5 && MA5 > ...) DIR = -1;
   else if(MA20 < MA5 && MA5 < ...) DIR = +1; // All fanning up.
   else if (DIR != 0){ iBar--; break; }       // Last one was cross.
}
Posso chiedere qual è lo scopo delle variabili delle barre? Inoltre, cosa significa "--"? I due segni "--" e "!" (se siete così gentili? Ho cercato nella sezione di aiuto, ma non ho trovato quale sia il loro scopo).
 
DomGilberto:

Posso chiedere qual è lo scopo delle variabili Bar? Inoltre, cosa significa "--"? I due segni "--" e "!" (se sei così gentile? Ho cercato nella sezione di aiuto, ma non ho trovato quale sia il loro scopo).


E posso chiederti perché basic from book è ancora sconosciuto?

https://book.mql4.com/basics/expressions

 
La tua domanda è come se tu dicessi "cos'è questa piccola cosa di metallo (una chiave) e perché una cosa pressey è un rettangolo (gas) e le altre sono squadrate?
Impara a codificare.
 

Ma so cos'è una chiave a gas... - che è più semplice della codifica...

Avete ragione anche se - ho bisogno di leggere attraverso.

È perché io imparo meglio da prove ed errori (im un ragazzo hands on quando si tratta di conservare la conoscenza). Mi aiuta a capire la logica quando la vedo. Inoltre il sito MQL4 non spiega necessariamente le cose in modo chiaro su come funzionano tutte insieme.

Quindi, per rispondere alla tua domanda deVries, questo è il motivo per cui conosco alcune nozioni di base e alcune cose più avanzate, ma è discontinuo perché mi piace giocare e imparare in questo modo.

Mi dispiace se sto diventando una spina nel fianco!

EDIT - Non ho ancora capito la parte "Bar" del codice che hai scritto WHRoeder - non sono sicuro che sia giusto?

 
DomGilberto: Ma so cos'è una chiave a gas... - che è più semplice della codifica...

Ma cerchereste di guidare senza sapere cos'è? Sarebbe da idioti.

Stai cercando di codificare senza sapere cosa sono "--" e "!". Qual è la differenza?

 

!=True, se x non è uguale a y -(DIR != 0) - Se DIR (che è 0) non è uguale a "0" allora l'operatore Break restituirà il controllo all'operatore for. E ricomincia il ciclo.

-- Sottrazione di 1 dal valore della variabile. Quindi "iBar--;" = iBar = 0, quindi sottraendo 1 = -1?

Ehi - ci sto davvero provando qui. Mi dispiace se non imparo così velocemente come fanno alcune persone (e non pensate che preferirei essere così! Preferirei di gran lunga imparare da solo e ottenere, senza dover chiedere l'aiuto di qualcuno!) ma sto facendo del mio meglio. Forse non sono la scintilla più brillante del mondo... Quindi perdonatemi almeno per questo...

 
DomGilberto:

!=True, se x non è uguale a y -(DIR != 0) - Se DIR (che è 0) non è uguale a "0" allora l'operatore Break restituirà il controllo all'operatore for. E ricomincia il ciclo.

-- Sottrazione di 1 dal valore della variabile. Quindi "iBar--;" = iBar = 0, quindi sottraendo 1 = -1?

Ehi - ci sto davvero provando qui. Mi dispiace se non imparo così velocemente come fanno alcune persone (e non pensate che preferirei essere così! Preferirei di gran lunga imparare da solo e ottenere, senza dover chiedere l'aiuto di qualcuno!) ma sto facendo del mio meglio. Forse non sono la scintilla più brillante del mondo... Quindi perdonatemi almeno per questo...


In questo ciclo

for(int iBar = 0; iBar < Bar; iBar++){//....do some stuff and come back}

iBar ha qui diversi valori, finché è più piccolo di Bar diventerà il valore 1 più alto

iBar--;

significa....

iBar = iBar - 1;
 
int DIR = 0;
for(int iBar = 0; iBar < Bars; iBar++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,1); 
   double i2  = iMA(NULL,60,5,0,1,0,1);
   double i3  = iMA(NULL,60,8,0,1,0,1);
   double i4  = iMA(NULL,60,10,0,1,0,1);  
   double i5  = iMA(NULL,60,12,0,1,0,1);
   double i6  = iMA(NULL,60,15,0,1,0,1);  
   double i7  = iMA(NULL,60,30,0,1,0,1);
   double i8  = iMA(NULL,60,35,0,1,0,1);
   double i9  = iMA(NULL,60,40,0,1,0,1);
   double i10 = iMA(NULL,60,45,0,1,0,1);
   double i11 = iMA(NULL,60,50,0,1,0,1);
   double i12 = iMA(NULL,60,60,0,1,0,1); 
   double ema21 = iMA(NULL,60,21,0,1,0,1);

   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
   
   if (DIR != 0)
   { 
   iBar--; break; 
   }       // Last one was cross.

Ah - Penso di averlo fatto funzionare ora - Ho fissato Bar per un po' e poi ho capito :) - Comincio a rendermi conto che quello che sto cercando di codificare è leggermente più complesso di quanto pensassi inizialmente. Ho bisogno che le MA girino e si aprano a ventaglio verso l'alto o verso il basso (a seconda che sia un acquisto o una vendita). Se è a ventaglio verso l'alto (per un lungo) non hanno sempre bisogno di essere nell'ordine giusto - è solo un caso di identificare prima quando sono tutti impilati e a ventaglio nel giusto ordine - da questo punto tutto quello che voglio è che il prezzo controlli la 21 ema e poi piazzi un ordine sopra i massimi. Naturalmente ci giocherò un po'! NON mi aspetto che qualcuno mi scriva il codice - sto solo scrivendo i miei pensieri ad alta voce.

Grazie!

 
Correggere il rientro o le parentesi mancanti
Codice pubblicato
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
Correttamente indentato
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
   triggerBarTime = Time[1];
   if(Low[1]<ema21) OrderEntry(0);
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
   triggerBarTime1 = Time[1];
   if(High[1]>ema21)  OrderEntry(1);
Correttamente rinforzato
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21) OrderEntry(0);
   }
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)  OrderEntry(1);
   }
Motivazione: