Aiuto per la codifica - pagina 188

 

ciao mladen o chiunque altro,

ho notato che la piattaforma mt4 ha alcuni indicatori predefiniti (anche se alcuni sono ripetere nella parte di indicatori personalizzati,), ma il codice penso non è esatto lo stesso, come recuperare o vedere il codice di quegli indicatori predefiniti, grazie mille per informarmi.

 
kenwa:
ciao mladen o chiunque, ho notato che la piattaforma mt4 ha alcuni indicatori predefiniti (anche se alcuni sono ripetere nella parte indicatori personalizzati,), ma il codice penso che non è esatto lo stesso, come recuperare o vedere il codice di questi indicatori predefiniti, grazie mille per informarmi.

Non è possibile

Quelli sono indicatori incorporati (eseguiti direttamente dal terminale)

 

sembra che quelli costruiti in indicatori sono meglio di quelli in sessione indicatore personalizzato in funzione, davvero nessun modo per conoscere il codice di loro?

 

Qualcuno mi ha chiesto come sto usando l'inquadratura multi temporale da un singolo file (quando non è possibile chiamare le funzioni integrate)

Ecco un semplice esempio e alcune spiegazioni in esso

_____________________________

L'indicatore allegato si comporta come 3 indicatori in uno e nel codice troverete commenti su cosa viene fatto e quando. Spero che questo aiuti qualcuno a capire come può essere fatto un indicatore multi time frame corretto in un singolo file (che, tra le altre cose, calcolerà sempre il numero corretto di barre, senza supporre quante barre nel time frame di destinazione sono state cambiate).

Quindi questo semplice indicatore multi time frame a file singolo può essere facilmente usato come modello per indicatori multi time frame

File:
 

ciao mladen,

sai se è possibile e come fare iStochasticOnArray? qualche modello o formula per farlo? grazie per informare.

 
kenwa:
Ciao mladen, sai se è possibile e come fare iStochasticOnArray? qualche modello o formula per farlo? grazie per l'informazione.

kenwa

Non esiste una funzione integrata. A questi post puoi vedere come si può scrivere una funzione per farlo e come si può usare poi : https://www.mql5.com/en/forum/177239/page34

 

ciao mladen:

un po' profondo per me

e.g.double iStoch(double priceR, double priceH, double priceL, int period, int slowing, int i, int instanceNo=0) è double within double? è questo metodo può ridurre indexbuffer occupato all'interno del mq4?

questo po 'strano per me della sua funzione:

stoch = iStoch(rsi,rsi,rsi,StoPeriod,StoSlowing,i);

grazie per qualche chiarimento.

 
mladen:
Non so perché non accetta l'altro file wav

Se l'avete cambiato nel codice dovrebbe accettarlo

Per ripeterlo 5 volte dovresti metterlo in un loop, ma questo potrebbe causare qualche problema (se il file audio è troppo lungo)

Ecco il codice che ho usato (so molto poco di codifica per sapere come fare i loop):

//+-----------------------------------------------------------------

#proprietà copyright "https://www.forex-tsd.com"

#proprietà link "https://www.forex-tsd.com"

#proprietà indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

extern bool alertsOn = true;

extern bool alertsSound = true;

extern bool alertsMessage = true;

extern bool alertsNotification = false;

extern bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[];

bool alerted[];

stringa symbols[];

int types[];

int times[];

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// raccoglie i dati per gli ordini

//

//

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS)) continua;

if (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue;

if (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime()) continua;

//

//

//

//

//

for (int k=ArraySize(tickets); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

se (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(types ,size); types = OrderType();

ArrayResize(times ,size); times = OrderOpenTime();

}

}

//

//

// controlla se un ordine deve essere avvisato per

//

//

for (i=ArraySize(tickets)-1; i>=0; i--)

{

tipo di stringa = "";

if (!alerted)

{

alerted = true;

switch (tipi)

{

caso OP_BUY : tipo = "compra"; break;

caso OP_SELL : tipo = "vendere"; break;

caso OP_BUYSTOP : tipo = "comprare stop"; break;

caso OP_BUYLIMIT : tipo = "limite di acquisto"; break;

caso OP_SELLSTOP : tipo = "vendere stop"; break;

caso OP_SELLLIMIT : tipo = "limite di vendita"; break;

}

doAlert(type+" aperto a : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" per "+symbols);

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

stringa messaggio;

messaggio = doWhat;

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertsNotification) SendNotification("avvisi d'ordine "+messaggio);

if (alertsSound) PlaySound("hallelujah.wav");

}

ma suona solo il normale allarme quando viene attivato.

Pensiero: se non riesco a far cambiare il PlaySound, si potrebbe eventualmente codificare in un ciclo che riproduca un breve avviso regolare ogni 1 secondo per 10 volte? - Almeno questo farebbe molto di più per svegliarmi che un singolo suono di allarme regolare...

Grazie

 
person77:
Ecco il codice che ho usato (so molto poco di codifica per sapere come fare i loop):

//+-----------------------------------------------------------------

#proprietà copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#proprietà indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

extern bool alertsOn = true;

extern bool alertsSound = true;

extern bool alertsMessage = true;

extern bool alertsNotification = false;

extern bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[];

bool alerted[];

stringa symbols[];

int types[];

int times[];

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// raccoglie i dati per gli ordini

//

//

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS)) continua;

if (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue;

if (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime()) continua;

//

//

//

//

//

for (int k=ArraySize(tickets); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

se (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(types ,size); types = OrderType();

ArrayResize(times ,size); times = OrderOpenTime();

}

}

//

//

// controlla se un ordine deve essere avvisato per

//

//

for (i=ArraySize(tickets)-1; i>=0; i--)

{

tipo di stringa = "";

if (!alerted)

{

alerted = true;

switch (tipi)

{

caso OP_BUY : tipo = "compra"; break;

caso OP_SELL : tipo = "vendere"; break;

caso OP_BUYSTOP : tipo = "comprare stop"; break;

caso OP_BUYLIMIT : tipo = "limite di acquisto"; break;

caso OP_SELLSTOP : tipo = "vendere stop"; break;

caso OP_SELLLIMIT : tipo = "limite di vendita"; break;

}

doAlert(type+" aperto a : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" per "+symbols);

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

stringa messaggio;

messaggio = doWhat;

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertsNotification) SendNotification("avvisi d'ordine "+messaggio);

if (alertsSound) PlaySound("hallelujah.wav");

}

ma suona solo il normale allarme quando viene attivato.

Pensiero: se non riesco a far cambiare il PlaySound, si potrebbe eventualmente codificare in un ciclo che riproduca un breve avviso regolare ogni 1 secondo per 10 volte? - Almeno questo farebbe molto di più per svegliarmi che un singolo suono di allarme regolare...

Grazie

Persona77,

Quello che funzionava per questo è andare su un grafico aperto, poi andare su strumenti/opzioni/eventi poi su allarme semplicemente cambiare il wav con quello che vuoi, ma non lo faccio da un po', quindi non so se funziona ancora, e assicurati che il file wav che usi sia nella cartella dei suoni.

File:
alert.png  99 kb
 

mrtools - grazie: ha funzionato benissimo!