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

 
skyjet:

Grazie! Non importa da quale lato iniziare a contare, cioè la terza barra?

Per il tuo esempio in realtà non fa differenza, ma devi comunque specificare l'inizio e la fine dell'array.

for (int x=3; x>1; x--)
{
 if(Open[x]==Open[x-1]) continue;
 if(Open[x]<Open[x-1])
   {
   //--- action
   }
}
L'inizio è importante se l'array è grande. Per esempio, se la condizione viene attivata alla fine dell'array come regola, è meglio iniziare dalla fine. Questo esempio è tipico della ricerca di ordine/posizione. Naturalmente, se fate prima la ricerca in questo caso, il programma arriverà comunque a questo punto, ma richiederà più risorse.
 
Danila_mactep:
Ciao a tutti, per favore consigliatemi su questo argomento... Voglio spostare il livello MA nella scheda livelli. Se voglio spostarlo a 798, è troppo complicato da calcolare per molte coppie. Come scrivere un indicatore che o disegna il prezzo della media mobile spostata o lo visualizza nella finestra dei dati e non devo calcolarlo manualmente?
È possibile creare un indicatore con uno spostamento MA nei suoi dati di input. E l'indicatore calcolerà il livello di prezzo e lo mostrerà immediatamente sul grafico.
 
chief2000:
Un tale problema - c'è un array unidimensionale la cui dimensione può variare.
Come fare un ciclo di tutte le possibili combinazioni di elementi di un array tra loro?
L'ordine degli elementi non ha importanza, cioè 123==213==321...

Ecco un esempio per un array con 4 elementi:


È un buon compito per il tuo cervello. Puoi provare questo:
int start(){
 double array[4];
 int k,N[];
 k=ArraySize(array);
 ArrayResize(N,k);
 for (int i=0;i<k;i++)N[i]=-i-1;// Заполнили массив элементов массива отрицательными
//
 int j=0;
 while(N[k-1]<k){
  if(N[j]<k-1){
   N[j]++;
   bool NewComb=false;
   for(i=0;i<k-1;i++){
    if(N[i]>N[i+1]){NewComb=true;}else{NewComb=false;break;}
   }
//
   if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    string temp="";
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i] то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]<0)temp=StringConcatenate(temp,"X");else temp=StringConcatenate(temp,N[i]);
    }
   Print("NEWCOMB ",temp);// это для проверки какие комбинации выбираются
   }
//
  }
  else{
   N[j]=0;i=1;
   while(i<k){
    if(N[i]<k-1) {if(N[i]>=0)N[i]++;else N[i]=0;j=0;break;}
    else {N[i]=0;i++;}
   }
  }
  if(N[k-1]>=k-1) break;
 }
 return;
}

Risultato deltest per la dimensione 4. Se l'elemento X dell'array non è selezionato, altrimenti usa array[digit] e frammento per la dimensione 6:

 
artmedia70:
Creare un indicatore i cui dati di input specificheranno lo spostamento della MA. E l'indicatore calcolerà il livello di prezzo e mostrerà immediatamente i suoi oggetti sul grafico.


Non so come fare e, francamente, non ho idea di come fare - quando apro il codice di МА МА, c'è così tanta roba che non vedo dove sia il parametro del livello, quindi non posso copiare e incollare i livelli.
 
Danila_mactep:

Non so come farlo e, ad essere onesti, non ho idea di come farlo - apro il codice MA, c'è così tanta roba lì che non vedo dove sia il parametro del livello, così posso copiare e incollare i livelli in esso. Quale parte del codice MA devo copiare e dove devo incollare i livelli?
Dovete iniziare a scrivere il vostro indicatore e loro vi diranno cosa fare.
 
artmedia70:
No, dovete iniziare a scrivere il vostro indicatore, e poi vi diranno cosa dovete fare.

Ho creato un nuovo indicatore, finora si presenta così:

#property copyright "Copyright 2013, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"

#proprietà indicator_chart_window
#proprietà indicator_buffers 1
#property indicator_color1 Red
//--- buffer
doppio ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int deinit()
{
//----
#include "Moving Averages.mq4"
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+

 
 
L'indicatore MA ha dei livelli. La domanda è questa - come possiamo ottenere dati da questi livelli, diciamo che il prezzo ha raggiunto il livello 100 o -100 (aprire un trade di acquisto/vendita).
 
alexey1979621:
Ci sono livelli nell'indicatore MA. La domanda è questa - come possiamo ottenere dati da questi livelli, diciamo che il prezzo ha raggiunto il livello 100 o -100 (aprire una compravendita).

La MA stessa sulla barra zero (attuale) è:

double priceMA0=iMA(Symbol(), Period(), MA_Period, MA_Shift, MA_ Method, PRICE_OPEN, 0);

Per calcolare la MA, prendiamo il prezzo di apertura per eliminare le "chiacchiere" sulla barra corrente.

Allora il prezzo del livello +100 sarà:

double priceP100=priceMA0+100*Point;

Il prezzo di livello di -100 sarà:

double priceM100=priceMA0-100*Point;
 
artmedia70:

La MA stessa sulla barra zero (attuale) è:

Per calcolare la MA, prendiamo il prezzo di apertura per eliminare le "chiacchiere" sulla barra corrente.

Allora il prezzo del livello +100 sarà:

Il prezzo di livello di -100 sarebbe:


Grazie, mi hai aiutato più di una volta. Sono sicuro che riuscirò presto a prendere confidenza con la programmazione.....
Motivazione: