[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 497
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Dimmi come scrivere un EA su questa condizione:
Ci sono tre coppie di valute su cui l'EA aprirà operazioni e l'EA è attaccato a un solo grafico e sugli altri due lavora da solo, in generale, multicurrency.
La seconda condizione è quando il prezzo raggiunge un certo livello su una qualsiasi delle coppie di valute, si apre un accordo. Si può aprire un solo affare alla volta.
Non appena l'affare è chiuso, l'Expert Advisor può riaprire l'affare in qualsiasi coppia se il prezzo si avvicina.
Ho impostato una variabile statica in modo che finché il valore della variabile è falso, le operazioni possono essere aperte e non appena l'ordine viene aperto su una qualsiasi delle coppie, la variabile assume il valore vero. Non appena l'ordine viene chiuso e il ciclo for non trova nessuna operazione, la variabile assume nuovamente il valore false.
E se per esempio si deve aprire un solo trade per ogni coppia, significa che ogni coppia ha la sua variabile.
C'è una soluzione più razionale a questo problema?
C'è un parametro come "Magik" nell'ordine - basta contare gli ordini con un certo magik e permettere o proibire gli scambi.
Come si chiudono correttamente gli ordini e come si raccolgono le informazioni su di essi?
Mi scuso per le domande stupide in anticipo) ho scritto il seguente algoritmo: voglio aprire una posizione di acquisto quando l'apertura è inferiore al frattale up e la chiusura è superiore al frattale up, e una posizione di vendita quando l'apertura è superiore al frattale down e la chiusura è inferiore; voglio anche chiudere tutte le posizioni se sono short di 85 punti o se l'ordine è aperto entro 38 candele (cost. S).Ho la sensazione che non venga chiuso proprio niente, solo ordini chiusi e in generale ho la sensazione che sto trattando gli ordini nel modo sbagliato, opero in modo sbagliato e poi li chiudo nel modo sbagliato)) Per favore, ditemi come chiuderli correttamente, in modo che non scivolino chiusi e dove ci sono errori in questo codice. O può essere un esempio di come nyu cammina, in cui tutte queste operazioni sono fatte adeguatamente. Grazie in anticipo per il vostro aiuto!)
extern int S=38; //numero di candele, dopo le quali la posizione sarà chiusa
extern int SL=85; //lo stop, al quale le posizioni saranno chiuse in ogni caso
extern int HIGH=0; //su quale timeframe saranno cercati gli estremi (5 o 1 o 0(D1))
extern int l=1; //numero di lotti da tradare
int massorder[30][30]; //ci sono dati su lotti OPEN
int numb=1; //il numero di el-ta nell'array, che è oot. lotto aperto
int i=0;
int ticket=0;
int x=0;
double down,up=0;
double highH1,lowH1=0;
int start()
{if(Hour()>x)
{
searchH1();
up=highH1;
down=lowH1;
i++;
}
//----
if(Open[1]<up && Close[1]>up)//se la candela è più bassa all'apertura e più bassa alla chiusura del livello frattale up, allora
{
ticket=OrderSend(Symbol(),OP_BUY,l,Bid,5,Bid-SL*Point,NULL);
i=0;
savedata();
}
if(Open[1]>down && Close[1]<down)//se la candela è più alta in apertura e più bassa in chiusura del livello frattale down, allora
{
ticket=OrderSend(Symbol(),OP_SELL,l,Ask,5,Ask+SL*Point,NULL);
i=0;
savedata();
}
if(i==S)
{
closeAllticket();
closeAllPos();
}
i++;
//----
x=Ora();
if(Ora()==23)
x=-1;
return(0);
}
//+------------------------------------------------------------------+
void closeAllticket()
{
for(int j=0;j<=numb;j++)
{
OrderClose(massorder[j][0],l,Ask,5);
OrderClose(massorder[j][0],l,Bid,5);
}
numb=0;
}
void closeAllPos()
{
for(int j=0;j<=OrdersTotal();j++)
{
OrderSelect(j,SELECT_BY_POS);
OrderClose(OrderTicket(),l,Ask,5);
OrderClose(OrderTicket(),l,Bid,5);
}
}
void searchH1()//funzione per trovare il frattale
{
if(iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,2) && iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,1) &&& iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,4) && iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,5))
highH1=iHigh(Symbol(),PERIOD_H1,3)
if(iHigh(Symbol(),PERIOD_H1,3)<iHigh(Symbol(),PERIOD_H1,2) && iHigh(Symbol(),PERIOD_H1,3)<iHigh(Symbol(),PERIOD_H1,1) && iHigh(Symbol(),PERIOD_H1,3)<iHigh(Symbol(),PERIOD_H1,4) && iHigh(Symbol(),PERIOD_H1,3)<iHigh(Symbol(),PERIOD_H1,5))
lowH1=iHigh(Symbol(),PERIOD_H1,3);
return (0);
}
void savedata() //programma per salvare i dati nell'array{
OrderSelect(ticket,SELECT_BY_TICKET);
massorder[numb][0]=OrderTicket();
massorder[numb][1]=OrderOpenPrice();
massorder[numb][2]=OrderStopLoss();
massorder[numb][3]=OrderTakeProfit();
if(OrderType()==OP_BUY)
massorder[numb][4]=0;
if(OrderType()==OP_SELL)
massorder[numb][4]=1;
numb++;
}
Come si chiudono correttamente gli ordini e come si raccolgono le informazioni su di essi?
Mi scuso per le domande stupide in anticipo) ho scritto il seguente algoritmo: voglio aprire una posizione di acquisto quando l'apertura è inferiore al frattale up e la chiusura è superiore al frattale up, e una posizione di vendita quando l'apertura è superiore al frattale down e la chiusura è inferiore; voglio anche chiudere tutte le posizioni se sono short di 85 punti o se l'ordine è aperto entro 38 candele (cost. S).Ho la sensazione che non venga chiuso proprio niente, solo ordini chiusi e in generale ho la sensazione che sto trattando gli ordini nel modo sbagliato, opero in modo sbagliato e poi li chiudo nel modo sbagliato)) Per favore, ditemi come chiuderli correttamente, in modo che non scivolino chiusi e dove ci sono errori in questo codice. O può essere un esempio di come nyu cammina, in cui tutte queste operazioni sono fatte adeguatamente. Grazie in anticipo per il vostro aiuto!)
Nelle variabili globali, dove avete specificato gli arresti all'inizio
prima di aprire gli ordini:
nel segnale per aprire
alla fine dell'EA
Credo di non aver dimenticato nulla
nelle variabili globali, dove avete specificato gli arresti all'inizio
prima dell'apertura degli ordini:
nel segnale per aprire
alla fine dell'EA
come se niente fosse stato dimenticato
Ho messo tutto quello che hai scritto ma ancora niente è cambiato per qualche motivo. il risultato è lo stesso che era e rimane ancora, gli ordini rimangono aperti per una grande quantità di tempo, e ho bisogno che si chiudano dopo le barre S, che cosa è?????????????????
Ho messo tutto quello che hai scritto ma ancora niente è cambiato. il risultato è come era e come è ora, gli ordini sono ancora aperti un sacco di tempo e ho bisogno che si chiudano dopo le barre S, qual è l'affare?????????????????
La chiamata a chiudere gli ordini dovrebbe essere fatta prima dell'apertura degli ordini. Ho questi in chiusura:
prima del più globale
#include <stdlib.mqh>
La metto così prima di aprire gli ordini:
e questo alla fine dell'EA
Domanda agli esperti, ci sono dei criteri per gli EA, come il numero minimo di lotti per un certo periodo di tempo del test? Percentuale di perdita, ecc.
Ho solo 2 EAs, e fanno 100 scambi all'anno, e un altro fa 30 scambi in tutto... (tempi 15, 30 rispettivamente). La redditività è buona, la prima è in una demo su quotazioni reali, ora è in fase di test ... ma qualcuno può dirmi se c'è una migliore ... Ma forse qualcuno mi dirà se ci sono test migliori che in MT4?
Ciao a tutti gli intenditori))))
C'è un indicatore che disegna una linea di tendenza sugli ultimi due frattali, ma la disegna dopo un "frattale non confermato", cioè la seconda barra non si è ancora formata dopo il frattale ma la linea è già stata disegnata. Come farlo disegnare dopo la seconda barra ma non dopo la prima? L'indicatore è nella scheda.
Ciao a tutti gli intenditori))))
C'è un indicatore che disegna una linea di tendenza sugli ultimi due frattali, ma la disegna dopo un "frattale non confermato", cioè la seconda barra non si è ancora formata dopo il frattale ma la linea è già stata disegnata. Come farlo disegnare dopo la seconda barra ma non dopo la prima? L'indicatore è nella scheda.
Prova
Prova