[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 280
E questo ordine di cose è normale (questi sono i principi del terminale).
Se volete che l'indicatore B cambi le sue indicazioni quando i parametri dell'indicatore A cambiano, fate uno scambio di informazioni tra gli indicatori (può essere un file, variabili globali del terminale, RAM del computer): l'indicatore A passa i suoi parametri inizializzabili durante l'inizializzazione e l'indicatore B controlla periodicamente possibili cambiamenti di parametri dell'indicatore A. Quando rileva dei cambiamenti, l'indicatore B dovrebbe anche perinizializzarsi con nuovi parametri (init() forzata).
Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono molto bravo a programmare, potresti per favore apportare le modifiche necessarie ai miei codici indicatori.
Buona giornata a tutti. Ho un problema con l'indicatore "CurrencyPowerMeter" e non posso spostarlo in un'altra posizione nella finestra del terminale. Se puoi aiutarmi, sarei molto felice di farlo.
Ho deciso di farvi una domanda, forse potete darmi qualche consiglio. Sto scrivendo un indicatore, nell'indicatore elaboro i tick sul timeframe tick (che si apre indipendentemente,questo). Il mio buffer array NON elabora OGNI tick, ma selettivamente (ad esempio, un tick ogni 60 secondi, ma non è necessario). Invece di
int counted_bars=IndicatorCounted();
Comprendo la seguente costruzione:
externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
Ora la domanda. Nella versione pura M1, la prossima cosa è standard.
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
Con cosa sostituire limite e counted_bars? La mia comprensione è,
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
(perché il numero di tick in 60 secondi non è costante, cioè, basta scrivere int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ non funziona).
O mi sbaglio su tutto?
p.s. anticipando una possibile domanda, risponderò: so che sul forex sec!=60 non è applicabile, e sec=60 non ha senso, ma non faccio nemmeno trading sul forex.
MK07: Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono bravo a programmare, potresti per favore fare le modifiche necessarie ai miei codici indicatori.
Mi scusi, ha una macchina? Se ne avete uno, non lo considerate un lusso, solo una necessità, vero? Se no, non lo lascerai così per il resto della tua vita, vero? Questa è l'età, bisogna saper guidare una macchina. Sono solo un contadino, ma faccio quello che faccio, per me la programmazione non è diversa dal lavoro in giardino, come il lavoro di fabbro, lo stesso lavoro con le mani (vivo in campagna). Una carriola, una carriola o MQL4 sono solo strumenti per me. Forse è percepito diversamente dagli abitanti delle città, non lo so. Variabili globali in manuale qui, funzioni di file standard qui, più veloci queste, ma attraverso WinAPI. Volevo rispondere ieri, ma non l'ho fatto.
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
Ci sono solo 2 voci nel registro.
2013.04.12 16:14:44 XXX test iniziato
2013.04.12 16:14:36 XXX EURUSD,H1: caricato con successo
DOMANDA:PERCHÉ IL PROGRAMMA NON LEGGE UN ARRAY INIZIALIZZATO IN UNA COLONNA?
Non riesco a trovare il comando che ridisegna l'indicatore personalizzato. Se qualcuno lo sa, per favore me lo dica. Grazie in anticipo =)
L'ho già trovato. Grazie a tutti =)
Buon pomeriggio.
Puoi aiutarmi a trovare una formula?
Ho un passo di ricarica SD=100;
se il prezzo è 25, allora per esso il livello di topping out sarà DE=100
se il prezzo è 102, il suo tasso di unità sarà UD=200
se il prezzo è 215, allora il tasso di rabbocco è BP=300
il prezzo è sceso di nuovo a 135, il livello di topping out sarà UD=200
E questo ordine di cose è normale (questi sono i principi del terminale).
Se volete che l'indicatore B cambi le sue indicazioni quando i parametri dell'indicatore A cambiano, fate uno scambio di informazioni tra gli indicatori (può essere un file, variabili globali del terminale, RAM del computer): l'indicatore A passa i suoi parametri inizializzabili durante l'inizializzazione e l'indicatore B controlla periodicamente possibili cambiamenti di parametri dell'indicatore A. Quando rileva dei cambiamenti, l'indicatore B dovrebbe anche perinizializzarsi con nuovi parametri (init() forzata).
Il primo codice è l'indicatore A.
Secondo codice-indicatore B.
L'ultima domanda è stata risolta, la nuova è
Ho il livello di riempimento ricalcolato su ogni barra.
Come faccio a ricordare il livello dell'ultima barra
e usarlo per aprire uno scambio
Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono molto bravo a programmare.
Mi stai offrendo di fare per te quello che tu stai 'giocando'. Spiacente, non sono interessato.
E, se state imparando a programmare, è un compito interessante per voi.
int counted_bars=IndicatorCounted();Comprendo la seguente costruzione:
Ora la domanda. Nella versione pura M1, la prossima cosa è standard.
Con cosa sostituire limite e counted_bars? La mia comprensione è,
(perché il numero di tick in 60 secondi non è costante, cioè, basta scrivere int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ non funziona).
O mi sbaglio su tutto?
p.s. anticipando una possibile domanda, risponderò: so che sul forex sec!=60 non è applicabile, e sec=60 non ha senso, ma non faccio nemmeno trading sul forex.
Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono bravo a programmare, potresti per favore fare le modifiche necessarie ai miei codici indicatori.
Buon pomeriggio a tutti!
Sto imparando a usare gli array.
Ho un array, l'ho inizializzato con delle stringhe, cioè massa doppia [3567]={0.85374 , 0.85694 , 0.85974 , .... };
E il programma legge l'array e lo esegue.
Ora ho inizializzato lo stesso array in una colonna
doppio massi[3567]
{
massa [ 0] = 0,85374;
massa [ 1] = 0.85694;
massa [ 2] = 0. 85974;
massa [ 3] = 0.86174;
massa [ 4] = 0,86474;
massa [ 5] = 0,86494;
massa [ 6] = 0,86504;
massa [ 7] = 0,86524;
}
Il compilatore non genera alcun errore ma genera un avvertimento.
'{' - espressione sull'ambito globale non consentita C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)
L'array è dichiarato globalmente come prima (quando era inizializzato con le stringhe e funzionava bene).
Ci sono solo 2 voci nel registro.
2013.04.12 16:14:44 XXX test iniziato
2013.04.12 16:14:36 XXX EURUSD,H1: caricato con successo
DOMANDA:PERCHÉ IL PROGRAMMA NON LEGGE UN ARRAY INIZIALIZZATO IN UNA COLONNA?
Grazie.