Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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 è:
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