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

 
Stepan241 >> :

Sto cercando di scrivere un indicatore. L'idea è semplice: faremo una media (forza dei tori - forza degli orsi). Naturalmente, per un certo periodo di tempo.



int start()
{
int i=Bars-IndicatorCounted()-1;
mentre(i>=0)
{
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i);
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i);
Buf_0[i]=MA_Bulls[i];
i--;
}
ritorno;
}

Mostro solo i tori lisciati Buf_0[i]=MA_Bears[i]; è fatto per controllare in una certa fase della tracciatura degli indici. Nemmeno ESATTAMENTE. Se li liscio con un periodo di 1, devono infatti ripetere tori incorporati. Quindi, ho concluso che qualcosa è sbagliato nella linea MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i); Non capisco cosa esattamente...HELP me!!!! Sono stati 3 giorni a cercare nei manuali e nella documentazione. GRAZIE!


Dovresti prima formare gli array di dati di tori e orsi e poi lisciarli con il prossimo ciclo, perché non l'hai ancora formato e stai già usando lo smoothing, e non ci sono dati da lisciare?

 
Urain писал(а) >>

Prima formate gli array di dati di tori e orsi e poi usate il prossimo ciclo per stirarli, perché non l'avete ancora formato e state già usando lo smoothing, e non ci sono dati da smoothing?

Traduzione da

int start()
{
  int i, limit=Bars-IndicatorCounted()-1;
  for ( i= limit; i>=0; i--){
    Bears_array[ i]=iBearsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
    Bulls_array[ i]=iBullsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
  }
  for ( i= limit; i>=0; i--){
    MA_Bears[ i]=iMAOnArray( Bears_array,0, MA_Period,0,MODE_EMA, i); 
    MA_Bulls[ i]=iMAOnArray( Bulls_array,100, MA_Period,0,MODE_SMA, i); 
  }
  return;
}
 

costy_ писал(а) >>

extern string xxxxxxxxxxxxx="x=0 сегодня х=1 вчера итд";
extern int х=0;
int середина=(iHigh(0,PERIOD_D1, х)-iLow(0,PERIOD_D1, х))/2;
if(Bid> середина)...;
if(Ask< середина)...;


extern datetime some_time=D'14:56';
int середина_some_time=(iHigh(0,0,iBarShift(0,0, some_time))-iLow(0,0,iBarShift(0,0, some_time)))/2;
if(Bid> середина_some_time)...;
if(Ask< середина_some_time)...;

Grazie mille, mi sto avvicinando. Un punto non è del tutto chiaro.

'14:56' - la stringa letterale della data è incompleta questo è l'avvertimento che ho ricevuto dal computer.

Per quanto ho capito, vuole ancora la data, ma non ho bisogno di una data specifica, quello che voglio è confrontare il prezzo attuale ogni giorno con il prezzo di una certa ora dello stesso giorno. Per favore, chiarite il punto.

 
alsu >> :

Perché avete bisogno di chiamarli attraverso iCast? È per l'unificazione? Scrivere un indicatore-wrapper separato per ciascuno di essi e chiamarli attraverso iCustom...

Il problema è che ho cambiato questi due indicatori (AO e AC) e ora voglio che le barre siano colorate secondo gli indicatori modificati. O c'è un altro modo per farlo? Ho iniziato il MQL di recente...

 
Necron >> :

Il problema è che ho rifatto i due indicatori (AO e AC), e ora voglio che le barre siano colorate secondo gli indicatori modificati. O c'è un altro modo per farlo? Ho iniziato a imparare MQL solo di recente...

Quindi, quello che avete rifatto e chiamato, qual è il problema? Per esempio, se avete modificato degli indicatori chiamati AO, AC, la chiamata sarà

iCustom(0,0,"AO",0,shift);
iCustom(0,0,"AС",0,shift);

o puoi aggiungere i tuoi parametri

 
future >> :

Grazie mille, mi sto avvicinando. Un punto non è del tutto chiaro.

'14:56' - la stringa letterale della data è incompleta tale avviso mi è stato dato dal computer.

Per quanto ho capito, vuole ancora la data, ma non ho bisogno di una data specifica, quello che voglio è confrontare il prezzo attuale ogni giorno con il prezzo di una certa ora dello stesso giorno. Per favore, chiarite il punto.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара
 

costy_ писал(а) >>

futuro >>:

Grazie mille, mi sto avvicinando

.

Un punto non è del tutto chiaro.

'14:56' - la stringa letterale della data è incompleta questo avvertimento mi è stato dato dal computer.

capisco che vuole ancora la data, ma non ho bisogno di una data specifica, ho bisogno del prezzo attuale ogni giorno rispetto al prezzo di una certa ora dello stesso giorno

.

Si prega di chiarire il punto.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара

Tuttavia, voglio sapere se è possibile mantenere il vincolo ad un certo tempo. In MQL4, come si dice il prezzo Bid alle 14.00 di ogni giorno di trading?

 

skifodessa 05.12.2009 14:07


Buon pomeriggio a tutti.

Per favore, ditemi come calcolare il numero di incroci di prezzo di un certo livello. Voglio che il mio ordine si apra dopo 3 (4,5...), ma non dopo il primo incrocio.

Grazie.
------------------------------------------------------------

Potresti provare l'algoritmo


Se (Prezzo della barra attuale>leveland prezzo della barra precedente< livello)allora {contatore aumenta di uno}

Se (contatore>3) allora {aprire l'ordine; azzerare il contatore}

Ora scriviamo lo stesso nel solito linguaggio (sto scrivendo solo blocchi. Potete inserirli nei posti necessari)

Extern int Chet=10; // dopo quanti incroci dovrebbe essere aperto un ordine

Extern double Uroven=1.6566; // dopo che il prezzo ha attraversato quale livello iniziare a contare.

Nella funzione di avvio, le condizioni saranno approssimativamente le seguenti

int k;

if(Open[0]>Uroven && Open[1]<Uroven)k=k+1;// qui consideriamo un incrocio UP

se(k>Chet){OrderSend(.......);k=0};

In generale, la domanda non è molto difficile. Il libro su MCL spiega le basi dell'ALGORITMICA

 

Per Vinin ha scritto >>.

Grazie per il suggerimento, ma non aiuta. Perché hai appena sostituito il ciclo While con un ciclo FOR.

Per Urain ha scritto(a) >>.

Le prossime due righe stanno solo formando l'array giusto.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Devi aver pensato che la funzione iMAOnArray deve passare un array già formato. Formarlo con il ciclo FOR non ha aiutato. Questo perché non è l'array passato a questa funzione (iMAOnArray) ma il suo NOME. E la matrice viene elaborata PERSONALMENTE.

cambiando i nella stringa MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

Ho risolto il problema. È molto più profondo di quanto sembri. Se applichi questa elaborazione solo nell'Expert Advisor, non ci sono problemi, ma se la usi per costruire un grafico, avrai comunque un intoppo. Il punto è che gli array sono indicizzati in modo inverso. La funzione iMAOnArray ha un'indicizzazione diretta (da sinistra a destra), mentre il grafico è indicizzato da destra a sinistra. Grazie a Garfich per questa spiegazione.



 
Stepan241 >> :

Per Vinin ha scritto >>.

Grazie per il suggerimento, ma non aiuta. Perché hai appena sostituito il ciclo While con un ciclo FOR.

Per Urain ha scritto(a) >>.

Le prossime due righe stanno solo formando l'array giusto.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Devi aver pensato che la funzione iMAOnArray deve passare un array già formato. Formarlo con il ciclo FOR non ha aiutato. Perché non è l'array che passate a questa funzione (iMAOnArray), ma il suo NOME. E la matrice viene elaborata PERSONALMENTE.

cambiando i nella stringa MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

Ho risolto il problema. È molto più profondo di quanto sembri. Se si applica questa elaborazione solo nell'Expert Advisor, non ci sono problemi, ma se si costruisce un grafico usandolo, si avrà comunque un intoppo. Il punto è che gli array sono indicizzati in modo inverso. La funzione iMAOnArray ha un'indicizzazione diretta (da sinistra a destra), mentre il grafico è indicizzato da destra a sinistra. Grazie a Garfich per questa spiegazione.

Non so quale fosse il problema, ma Vinin l'ha scritto correttamente (non importa for o while), la cosa principale è che prima il ciclo forma l'array di dati e poi il ciclo successivo forma l'iMA da esso,

e la stringa Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i); riempie solo un i-esimo valore dell'array

senza un ciclo, l'array non sarà generato.

Motivazione: