Come codificare? - pagina 232

 

Idea

OK ragazzi e ragazze

Ho giocherellato con l'idea di creare semplicemente un CUF (Commonly used functions) - da tutto quello che ho letto non è possibile chiamare gli script dall'interno di un EA.

Nonostante ciò - pensando a un workaround perché non mi piace essere costretto a ridisegnare la ruota ogni volta e sono sicuro che in questo modo le cose funzionerebbero meglio.

Gli script, come tutti sanno, si caricano e poi si scaricano e non si caricano mai più, tranne quando si premono i tasti di scelta rapida.

Questo è un grosso problema che vedo con tutti gli EA è che sembrano rimanere bloccati in attesa che qualche condizione di tempo o qualche condizione di "sonno" crudele passi prima di continuare. Questo rende improbabile l'annullamento e la vendita in una frazione di secondo, il che è un grande fallimento in condizioni estremamente volatili da cui si potrebbe fare una fortuna in pochi secondi.

La soluzione? Fare un indicatore CUFF che lavora su variabili globali? Qualcuno ha provato questo. L'indicatore cicla ogni tick quindi è perfetto.

 

Come codificare un allarme che invierà avvisi sonori o email quando più indicatori e condizioni di barra sono soddisfatti?

 

ciao,

essendo un principiante vorrei chiedere se la funzione metastock incorporata : ref() e stochmomentum() sono implementate da alcune funzioni in metatrader

thnx

 

Darian vedi il mio esempio di globals sopra. trova uno script che manda email / fischia / fa quello che vuoi e codificalo. tieni presente che dovrai considerare che non scattano tutti esattamente nello stesso momento, quindi dovrai inserire un ritardo di qualche secondo / minuto prima di resettare le variabili di nuovo a 0.

 

con Global

posso aggiungere un GlobalVarible ad un indicatore come questo?

if ( trend[2]0 && Volume[0]>1 && !UpTrendAlert)

{

GlobalVariableSet("trend "+Symbol(),1);

// Print("UP" + GlobalVariableGet("trend "+Symbol());

Messaggio = " Compra "+Simbolo()+" M "+Periodo()+": Segnale per l'ACQUISTO";

if ( AlertMode>0 ) Alert (Message);

UpTrendAlert=true; DownTrendAlert=false;

poi chiamare questa GlobalVariable in un EA con

int init() {

GlobalVariableDel("trend "+Symbol());

trend = GlobalVariableGet("trend "+Symbol());

Compra = (trend == 1);

Vendere = (trend == 2);

tutto l'aiuto è apprezzato

 

Potresti però se scambi più di 1 valuta non funziona.

 

Problemi con gli array, ho bisogno di aiuto!

Ciao,

Sto cercando di creare una funzione che determini se un ordine aperto sta perdendo più soldi di un punto di cutoff (diciamo $-1000).

La funzione dovrebbe poi memorizzare l'OrderTicket() e l'OrderProfit() in due array separati, e uscire con return (1) per indicare che il punto limite è stato raggiunto.

Prima di memorizzare i valori in questi array, dovrebbe controllare l'array OrderTicket() per vedere se questo ordine è già archiviato.

Se il numero di OrderTicket è già memorizzato nell'array, si suppone che determini se l'ordine ha perso $1000 in più e, in tal caso, sostituisca il valore nell'array OrderProfit() con un nuovo valore e esca con return(1) per indicare che è stato raggiunto un NUOVO punto limite. Se l'ordine non ha perso altri 1000$ (chiamato Cutoff) allora dovrebbe ritornare(0) per significare che nessun ordine ha perso altri 1000$.

Penso di averlo più o meno funzionante (non ne sono sicuro??), ma per qualche motivo l'array si riempie di molti valori '0' insieme ai valori legittimi. L'output dell'array è il seguente:

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 431 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 425 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 386 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 371 ResumeArrayPrices[k] = -12933

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 320 ResumeArrayPrices[k] = -6057

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 249 ResumeArrayPrices[k] = -5076

ResumeArrayTickets[k] = 241 ResumeArrayPrices[k] = -1017

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 230 ResumeArrayPrices[k] = -13122

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 186 ResumeArrayPrices[k] = -4068

ResumeArrayTickets[k] = 128 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

[/code]

The following is my actual code:

[code]

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

}

int arraycount1 =1;

int arraycount2 =1;

bool found = false;

int k;

for (int i = 0; i<OrdersTotal();i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

if (OrderProfit()< Cutoff)

{

for (k=0; k<ArraySize(ResumeArrayTickets); k++)

{

if ((ResumeArrayTickets[k] == OrderTicket()) && ResumeArrayTickets[k] !=0)

{

found = true;

if (ResumeArrayPrices[k] + Cutoff < OrderProfit())

{

return (0);

}

else

{

Print ("ELSE");

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1);

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

if (found == false)

{

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1)'

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

return (0);

}

}

 

Aggiornare un EA una volta a barra

Ciao, c'è un modo per aggiornare un EA in modo che reagisca come la prima volta che viene inizializzato? (Come un riavvio) Deve essere fatto una volta per barra. Per esempio una volta ogni 30 minuti.

RefreshRates() e WindowRedraw() non lo fanno correttamente.

Vorrei anche mantenere alcune variabili e non perdere i dati.

C'è un modo per farlo?

Mi piacerebbe poterlo fare anche per un indicatore.

Molte grazie.

 

Aiuto per la programmazione

Ciao a tutti,

Sto lavorando alla modifica di un misuratore di forza delle valute per mostrare la forza della valuta in base al tempo del grafico. Al momento, il codice utilizzato è:

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Ho capito che MODE_HIGH e MODE_LOW ottengono i massimi e i minimi del giorno corrente. Come potrei invece ottenere il massimo e il minimo del time frame corrente del grafico?

Grazie!

P.S. Non sono un programmatore, quindi usate parole piccole per favore:)

 

Cercate nel manuale di aiuto le funzioni iHigh e iLow.

buona fortuna

Lux