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

 
LOA:


Tre massimi per il periodo, non il più recente. O meglio, non necessariamente l'ultimo.

Guardate: avete un array con dei valori. Devi trovare tre massimi in questa matrice. Non devono essere l'ultimo o il primo nella matrice della serie temporale. Devi solo trovare i tre massimi.

1. Copiamo il vostro array in uno temporaneo (li cercheremo nell'array temporaneo):

int ArrayCopy( oggetto &dest [], oggetto source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

Copia una matrice in un'altra. Gli array devono essere dello stesso tipo. Gli array di tipo double[], int[], datetime[], color[], e bool[], possono essere copiati come array dello stesso tipo.
Restituisce il numero di elementi copiati.
Parametri:
dest[] - Array-ricevitore.
fonte[] - Matrice della fonte.
inizio_dest - Indice iniziale per l'array di destinazione. Per impostazione predefinita, l'indice iniziale è 0.
inizio_fonte - Indice iniziale per l'array di origine. L'indice iniziale predefinito è 0.
contare - Numero di elementi da copiare. Per impostazione predefinita, l'intero array(WHOLE_ARRAY).


2. cerca il valore massimo nell'array temporaneo:

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Cerca l'elemento con il valore massimo. La funzione restituisce la posizione dell'elemento massimo nella matrice.
Parametri:
array[] - Matrice numerica in cui cercare.
contare - Numero di elementi da cercare.
avviare - Start - Avvia l'indice per la ricerca.


3. Salva l'indice trovato nell'array (ad esempio MassIndexMaxValue[])

4. azzerare il valore del massimo trovato nell'array del tempo - basta scrivere zero lì

5. Cerca di nuovo il prossimo valore massimo nell'array temporaneo (l'indice del primo che abbiamo trovato è già memorizzato in MassIndexMaxValue[] e il valore di questo massimo è azzerato)

Questo ciclo va avanti fino a quando non troviamo il numero richiesto di valori massimi nell'array temporaneo.

MassIndexMaxValue[] conterrà ora gli indici del numero richiesto di valori massimi nel vostro array.
Azzeriamo la dimensione dell'array temporaneo - non c'è motivo di intasare la memoria

È così che va...

ZS... Ho solo fatto un rapido schizzo sul posto... Potrei aver commesso un errore - ero sveglio mentre scrivevo e non ho controllato nulla, ma la funzione ha qualcosa come questo contenuto:

void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize(ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize(tmp,ArraySize(ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy(tmp, ms);                 // копируем ваш массив во временный
   for (i=0; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax=ArrayMaximum(tmp);        // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]=0;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize(tmp,0);                 // обнуляем размер временного массива
   return;   
}

Quando si chiama:

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);

... L'array int MassIndexMaxValue[] definito in precedenza deve contenere gli indici dei tre valori massimi trovati in your_Array_Value[];

 

Non riesco a capire come si calcola la percentuale di profitto per scambio e la percentuale di perdita per scambio. Puoi dirmelo?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70:

Guardate: avete un array con dei valori. Devi trovare tre massimi in questa matrice. Non devono essere l'ultimo o il primo nella matrice della serie temporale. Devi solo trovare i tre massimi.


Artem, grazie mille!

Sono contento che la mia idea di azzerare il valore massimo dell'array fosse corretta, e hai descritto tutto in dettaglio, con la copia in un altro array, ora mi occuperò delle minuzie

E seguendo il consiglio di Vladimir inizierò con l'algoritmo del programma, elaborerò le vostre informazioni e sono sicuro che tutto funzionerà - buoni insegnanti.

UNRINGRAZIAMENTO SPECIALE PER L'ARTICOLO https://www.mql5.com/ru/articles/1357

 

Buon pomeriggio!

Potete dirmi come ottenere segnali da un indicatore personalizzato in un Expert Advisor?

Ho usato iCustom, ma i gufi continuano a non ricevere il segnale

double Signal_I=iCustom(NULL,0,"FL",0,0);
 
skyjet:

Buon pomeriggio!

Potete dirmi come ottenere segnali da un indicatore personalizzato in un Expert Advisor?

Ho usato iCustom, ma i gufi continuano a non ricevere il segnale


Forse il codice dell'indicatore iCustom non si presta a questo... Troppe poche informazioni nella tua domanda per una risposta.
 
skyjet:

Buon pomeriggio!

Potete dirmi come ottenere segnali da un indicatore personalizzato in un Expert Advisor?

Ho usato iCustom, ma i gufi continuano a non ricevere il segnale


È lo stesso con altri indicatori? Se sì, usate erroneamente la funzione iCustom(). Se no, provate a controllare il codice dell'indicatore - può essere che il vostro indicatore non utilizzi alcun buffer dell'indicatore - funziona con la costruzione di oggetti grafici.
 

Ciao, c'è una funzione:

bool Trade()
{
  if(!IsConnected())
  {
     Print("Связь отсутствует.");
     return(false);
  }

  if(!IsExpertEnabled())
  {
     Print("Торговля экспертами выключена.");
     return(false);
  }
  
  if(DayOfWeek()==0 || DayOfWeek()==6)
  {
     Print("В выходные не торгуем.");
     return(false);
  }
  
  if(!IsTradeAllowed())
  {
     Print("Торговля запрещена? WTF???.");
     return(false);
  }
  return(true);
}

Ma non funziona per qualche motivo. Viene chiamato nell'EA proprio all'inizio dopo int start() come segue:

  if(!Trade())
  {
    Sleep(5000);
    return;
  }

L'Expert Advisor viene caricato con successo nelle schede Log ed Experts, e non appare nient'altro. Anche se dovrebbe dire: "Non commerciamo nei fine settimana", perché il 26.11.2011 è sabato.

Dov'è l'errore e cosa sto facendo di sbagliato?

 
Roman.:

Forse il codice dell'indicatore iCustom non si presta a... Ci sono troppe poche informazioni nella sua domanda per rispondere.
L'indicatore disegna linee di supporto e resistenza, cosa che fa durante la visualizzazione. L'indicatore stesso dà un segnale LT_1 == 1 o -1 quando viene attraversato.
if((Close[i] > BuyLevel) 
         {
    
          LT_1=1;
               
         }                                 
       if((Close[i] < CloseLevel)
         {
           
           LT_1=-1;
               
         }
 
ivan2k2:

Ciao, c'è una funzione:

Ma non funziona per qualche motivo. Viene chiamato nell'EA proprio all'inizio dopo int start() come segue:

L'Expert Advisor viene caricato con successo nelle schede Log ed Experts, e non appare nient'altro. Anche se dovrebbe dire: "Non commerciamo nei fine settimana", perché il 26.11.2011 è sabato.

Dov'è l'errore e cosa sto sbagliando?


Oggi è sabato - un giorno di riposo. Si avvia Expert Advisor, avviene l'inizializzazione, ma dato che è giorno di riposo e non ci sono tick, la funzione di avvio non viene avviata (cioè Trade() non viene chiamata). Per controllare se funziona correttamente, dovete inserire la chiamata di questa funzione nel blocco di inizializzazione, o testarla nel tester.
 
skyjet:
L'indicatore disegna linee di supporto e resistenza, cosa che fa durante la visualizzazione. L'indicatore stesso dà un segnale LT_1 == 1 o -1 quando viene attraversato.

Allora non preoccupatevi - spostate semplicemente il codice dell'indicatore nell'Expert Advisor come è per soddisfare i criteri di trading e questo è tutto - poi nel tabellone, secondo queste condizioni di trading trasferite dall'indicatore, aprite posizioni attraverso l'Expert Advisor e questo è tutto ...
Motivazione: