Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 204

 
STARIJ:

L'incrocio delle MA si verifica tra le barre - preso un chiaro esempio

La MA sulle barre a sinistra e a destra dell'incrocio è diversa dal prezzo al punto di incrocio. Capisco che l'interrogante vuole il valore nel punto esatto di incrocio invece del valore su una delle barre adiacenti. Questo valore esatto può essere ottenuto usando l'interpolazione lineare - perché la MA tra le barre è costruita come segmenti di linea retta. Oppure prendere le coordinate di ogni MA su barre adiacenti. Costruisci analiticamente 2 rette e calcola il loro punto di intersezione. È possibile calcolare considerando 2 triangoli simili. Sorge una contro-domanda: perché ne abbiamo bisogno? I costi sono commisurati al valore del risultato? Dopotutto, i punti di intersezione si muoveranno se i parametri della MA vengono modificati minimamente. Molto probabilmente, è richiesto dal capo del progetto del corso

Grazie per il chiarimento, capisco che non è facile da fare
 
missha32:

Non riesco a trovare l'errore nei miei calcoli.
Ho bisogno di trovare il massimo e il minimo del giorno precedente, ma per qualche motivo il minimo era il giorno prima

Meglio usare invece CopyHigh e CopyLow con periodo PERIOD_D1 e barra o tempo corrispondente.

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
 
missha32: Ho bisogno di trovare il massimo e il minimo del giorno precedente, ma per qualche motivo il minimo è nel giorno prima
  // iHigh и iLow дают макс и мин цены указанного бара. Если PERIOD_D1, то целых суток  если 1 то вчерашних последних завершенных суток

   Alert("Максимум вчерашнего дня = ", iHigh(_Symbol, PERIOD_D1, 1));
   Alert("Минимум  вчерашнего дня = ", iLow(_Symbol,  PERIOD_D1, 1));
Ogni barra di qualsiasi Timeframe contiene informazioni generalizzate del corrispondente intervallo di barre di Timeframe inferiori: Massimo; Minimo; Tempo di apertura pari al tempo della prima barra dell'intervallo; Tempo di chiusura pari al tempo dell'ultima barra dell'intervallo; Volume pari alla somma dei volumi delle barre dell'intervallo. Più precisamente, queste informazioni sono contenute nei rispettivi array
 
STARIJ:
Ogni barra di qualsiasi Timeframe contiene informazioni generalizzate del corrispondente intervallo di barre di Timeframe inferiori: massimo, minimo, orario di apertura e chiusura e volume pari alla somma dei volumi delle barre inferiori. Più precisamente, queste informazioni sono contenute negli array corrispondenti

Lo farei, ma potrei non essere in grado di calcolare i dati utilizzando un ulteriore algoritmo, in quanto potrei dover cercare altri valori di ieri e sarebbe un lavoraccio riscrivere di nuovo le funzioni.

Se poteste dirmi dov'è l'errore nel mio codice, non lo capisco. Quando cerco di visualizzare il numero di barre tutte insieme, ma quando cerco di ottenere il massimo o il minimo, non mostra quello che dovrebbe.

 
missha32:

Lo farei, ma potrei non essere in grado di calcolare i dati perché potrei dover cercare altri valori di ieri e sarebbe una rottura di palle riscrivere di nuovo le funzioni.

Se potessi dirmi dov'è l'errore nel mio codice, non lo capisco. Quando mostro il numero di barre sullo schermo, tutto converge, ma quando cerco di ottenere il massimo o il minimo, non mostra quello che dovrebbe.

Hai fatto così tanto casino che non riesco nemmeno a darci un senso. Una montagna di conversioni da uno all'altro...

E tutto per trovare il massimo e il minimo del giorno?

Allora, cosa non funziona per te?

//+------------------------------------------------------------------+
double GetPriceMaximum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены High: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
double GetPriceMinimum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены Low: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

Hai bisogno di scoprire gli alti della giornata? Per favore:

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,0);

Hai bisogno di scoprire il massimo di ieri? Facile:

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,1);

Hai bisogno di sapere il minimo dell'altro ieri? Nessun problema:

double min_price=GetPriceMinimum(Symbol(),PERIOD_D1,2);

Beh, si potrebbe prendere la via più facile e usare funzioni quadruple pure:

double price_max=iHigh(Symbol(),PERIOD_D1,1);

Ma non consiglierei - usando nuovi costrutti di linguaggio, preparerai te stesso e il tuo codice a che un giorno il quadruplo non sarà supportato, e l'autodisciplina e tutto il resto ;)

 
Artyom Trishkin:

Hai fatto un tale casino che è difficile anche solo sistemarlo. Una montagna di conversioni da una cosa all'altra...

Tutto per trovare gli alti e bassi della giornata?

Allora, cosa non funziona per te?

Hai bisogno di scoprire gli alti della giornata? Per favore:

Hai bisogno di scoprire il massimo di ieri? Facile:

Hai bisogno di sapere il minimo dell'altro ieri? Nessun problema:

Beh, si potrebbe prendere la via più facile e usare funzioni quadruple pure:

Ma non consiglierei - usando nuovi costrutti di linguaggio, preparerai te stesso e i tuoi codici che un giorno il quaternione non sarà supportato, e l'autodisciplina e tutto il resto ;)

Ho trovato un errore io stesso (tutta la disattenzione ha letto male i parametri iHighest, iLowest).

Quindi non è adatto in quanto avrà bisogno di altri calcoli da ieri

 
missha32:

Ho trovato l'errore da solo (per disattenzione ho letto male i parametri iHighest,iLowest).

Questo non è adatto perché saranno necessari altri calcoli da ieri

Non capisco perché si impedisce di ottenere i dati in modo semplice e naturale per altri calcoli.
 
missha32 ogni segnale rosso per comprare e ogni segnale blu per vendere per permettere di riempire ad ogni segnale

if(Red ) OrderSend( ... Buy ...) ; if( Blue ) OrderSend( ... Sell ...) ;

Solo il contrario, vendere in alto, comprare in basso...

Lafunzione OnInit (quella vecchia che chiedeva l'init) viene eseguita all'inizio dell'indicatore (quando si cambia timeframe, si ricompila, ...). Tutte le variabili utilizzate devono avere un valore assegnato. La linea SetIndexDrawBegin(0,i-1) è presente nella funzione OnInit; alla variabile i deve essere assegnato un valore o deve essere usata una costante

 
STARIJ:

if(Red ) OrderSend( ... Buy ...) ; if( Blue ) OrderSend( ... Sell ...) ;

Solo il contrario, vendere in alto, comprare in basso...

Lafunzione OnInit (quella vecchia che chiedeva l'init) viene eseguita all'inizio dell'indicatore (quando si cambia timeframe, si ricompila, ...). Tutte le variabili utilizzate devono avere un valore assegnato. Nella funzione OnInit, c'è la linea SetIndexDrawBegin(0,i-1); alla variabile i deve essere assegnato un valore o usare una costante

Ad essere onesti, non capisco niente, sono nuovo della programmazione Mql4, quindi per favore aiutatemi con il codice.
 
missha32:
Per essere onesti, non capisco niente, sono nuovo della programmazione Mql4, se non vi dispiace aiutarmi con il codice.

Il codice di solito aiuta nel freelance.

Qui - o l'algoritmo o per correggere i vostri errori. Ma non per riscrivere di nuovo per voi.