Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 402
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
Evento click del mouse su oggetto grafico
CLIC SULL'OGGETTO
Coordinata X
Coordinata Y
Nome dell'oggetto grafico in cui si è verificato l'evento
Ugh, penso di aver capito tutto)
Grazie per l'aiuto!
Non so come collegare il risultato "r" a un buffer per visualizzarlo su un grafico, per favore consigliatemi.
Non riesco a capire gli esempi nei libri di testo, ho chiesto alla gente
Scrivono - "Scrivi il valore di "r" nel buffer, e apparirà sul grafico" e "Di solito si scrive nel buffer attraverso un ciclo for. "
ma questo non mi dice niente!
Un risultato è solo la lettera "r" e basta, non riesco a trovarlo da nessuna parte.
E un'altra cosa
come smussare il risultato "r" per esempio.
Grazie per l'attenzione!Qual è l'errore? Quando viene eseguita nel tester, la funzione cancella l'ordine pendente e a volte no. Perché? Il principio di funzionamento è il seguente: quando l'ordine Buy viene chiuso da TP, il BuyLimit viene rimosso. Si prega di consigliare
Qual è l'errore? Quando viene eseguita nel tester, la funzione cancella l'ordine pendente e a volte no. Perché? Il principio di funzionamento è il seguente: quando l'ordine Buy viene chiuso da TP, il BuyLimit viene rimosso. Si prega di consigliare.
OrdiniTotale() != OrdiniStoriaTotale()
Grazie.
Ciao a tutti.
Ho fatto un semplice Expert Advisor basato su Stochstick (vende sul picco superiore, compra sul picco inferiore), e il compilatore dà un errore sul posto.
Qualcuno può dirmi qual è la ragione e cosa significa questo errore? All'inizio pensavo di aver dimenticato di mettere una parentesi da qualche parte.
Ma no, ho controllato alcune volte e tutto sembra essere a posto. Vi sarò molto grato per l'aiuto.
Ecco gli errori che il compilatore genera: ')' - non tutti i percorsi di controllo restituiscono un valore Stohastic-Signals-33.mq4 177 3
Ecco l'Expert Advisor stesso e un file mq4 allegato:
Si prega di consigliare come allegare l'Expert Advisor a questo file (nell'editor con lettere colorate)
//+------------------------------------------------------------------+
//| Stohastic-Signals-33.mq4
//| Copyright 2017, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#proprietà link "https://www.mql5.com"
#proprietà versione "1.00"
#proprietà rigorosa
//+------------------------------------------------------------------+
bool New_Bar=false; // bandiera di una nuova barra.
extern double H_line=80; // linea stocastica superiore (ipercomprato)
extern double L_line=20; // Linea inferiore (ipervenduto) dello stocastico
extern inttern Slippage=2; // Slippage
extern int SL; // SL dell'ordine da impostare
extern int TP; // TP dell'ordine che viene impostato
extern double Lts; //dimensione del lotto dell'ordine da impostare
bool B_Flag=false; // segnale di flag per BUY
S_Flag=false, // Flag per un segnale SELL
ORD_Buy=false, // Flag posizione Buy aperta
ORD_Sell=false; // Flag open Sell position
bool Work=true; // Flag che permette all'esperto di lavorare. true-nessun errore critico, false-esistente.
string Symb; // Nome dello strumento finanziario
int Crit_Error=1111111111; // Numero di errore critico
//+------------------------------------------------------------------+
//| funzione tick esperto |
//+------------------------------------------------------------------+
void OnTick()
{
int
Totale, // Numero di ordini nella finestra
Tip=-1, // Tipo di ordine selezionato (B=0,S=1)
Biglietto; // Numero d'ordine
doppio
M_1, M_2, M_3, // valore MAIN su 1, 2 e 3 barre
Lot; // Numero di lotti nell'ordine selezionato
bool Ans_Close; // Flag di chiusura riuscita dell'ordine (1-chiuso, 0-non chiuso)
bool Ans_Open; // Flag se l'ordine è stato aperto con successo (1-chiuso, 0-non aperto)
//--------------------------------------------------------------- 1 --
// Controlla se c'è un errore critico
if(Work==false) // Errore critico
{
Alert("Errore critico. Expert Advisor non funziona;)
return; // Esci da start()
}
//--------------------------------------------------------------- 2 --
// Nuovo bar
Fun_New_Bar(); // chiamata della funzione
if (New_Bar==false) // Se la barra non è nuova
return; // ...poi uscire
//------------------------------------------------------------- 3 --
// Conteggio degli ordini
Symb=Symbol(); // Nome dello strumento finanziario.
Total=0; // Numero di ordini
for(int i=1; i<=OrdersTotal(); i++) // ciclo degli ordini
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Se
{ // Analisi dell'ordine:
if (OrderSymbol()!=Symb)continue; // Non è il nostro strumento finanziario
Ticket=OrderTicket(); // Numero d'ordine selezionato.
Tip =OrderType(); // Tipo di ordine selezionato.
Lot=OrderLots(); // Numero di lotti
}
else
{
Alert("OrderSelect() ha restituito un errore - ",GetLastError()); // Se l'ordine non può essere selezionato, allora .
return; // uscire
}
}
//------------------------------------------------------------- 4 --
// Criteri commerciali Analisi della situazione
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1); // 1 barra
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2); // 2 bar
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3); // 3 bar
//------------------------------------------------------------- 5 --
if(M_2>=H_line) // se lo stocastico ha attraversato la linea di ipercomprato
{
if(M_3 <= M_2 && M_2 > M_1) // Lo stocastico ha attraversato la linea di ipercomprato {...
{
if(S_Flag==true) // Se (posizione di vendita aperta, allora ...
return; // Esci da start()
// Se la posizione Sell non è aperta, allora ...
S_Flag=true; // impostiamo un flag che indica che il segnale per vendere è apparso
B_Flag=false; // controlla che il segnale di COMPRA non sia apparso
if(ORD_Buy==true) // Se è stato aperto un ordine di acquisto,...
{
if(Tip!=0) // Controllo: l'ordine TYPE non corrisponde all'ordine aperto...
{
Work=false; //L'Expert Advisor non funzionerà
Alert("L'ordine TYPE non corrisponde al FLAG dell'ordine aperto. Esci."); // Se la corrispondenza non esiste, l'Expert Advisor smette di funzionare
return; // Esci dall'inizio
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Chiudi l'ordine di acquisto aperto
if(Ans_Close==false) // Se la chiusura non è riuscita, allora...
{
Alert("Impossibile chiudere l'ordine. L'Expert Advisor smette di funzionare.\n Numero di errore critico ", Crit_Error);
return; // uscire
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // OPEN POINTS
if(Ans_Open==false) // se non è riuscito ad aprire Sell
{
Alert("Impossibile aprire l'ordine. L'Expert Advisor smette di funzionare.\n Numero di errore critico ", Crit_Error);
return; // Esci dall'inizio
} // Se Sell è stato aperto con successo
ORD_Sell=true; // mettiamo una bandiera che una posizione SHORT è stata aperta
ORD_Buy=false; // Segnala la posizione LONG come andata
}
return; // Esci dall'inizio
}
//------------------------------------------------------------------------ 6 --
if(M_2<=L_line) // Se lo stocastico ha attraversato la linea di ipervenduto
{
if(M_3 >= M_2 && M_2 < M_1) // Appare il picco inferiore (BUY CALL)
{
if(B_Flag==true) // Se la posizione Buy è aperta, allora...
return; // Esci da start()
// Se nessuna posizione Buy è aperta, allora...
B_Flag=true; // Flag positivo per posizione Buy aperta
S_Flag=false; // controlla che non ci sia un segnale SELL
if(ORD_Sell==true) // Se c'è un ordine di vendita aperto,...
{
if(Tip!=1) // Controllo: l'ordine TYPE non corrisponde all'ordine aperto...
{
Work=false; //L'Expert Advisor non funzionerà
Alert("Il TIPO di ordine non corrisponde al FLAG dell'ordine aperto. Esci."); // Se la corrispondenza non esiste, l'Expert Advisor smette di funzionare
return; // Esci dall'inizio
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Chiudi l'ordine di vendita aperto
if(Ans_Close==false) // Se non è riuscito a chiudere
{
Alert("Impossibile chiudere l'ordine. L'Expert Advisor smette di funzionare.\n Numero di errore critico ", Crit_Error);
return; // uscire
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // OPEN LONG POSITION
if(Ans_Open==false) // se non è riuscito ad aprire Buy
{
Alert("Impossibile aprire l'ordine. L'Expert Advisor smette di funzionare.\n Numero di errore critico ", Crit_Error);
return; // Esci dall'inizio
} // Se l'ordine Buy è stato aperto con successo
ORD_Sell=false; // controlla che non ci sia una posizione corta
ORD_Buy=true; // Flag aprire posizione LONG
}
return; // Esci dall'inizio
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // Il rilevamento fie .
{ // ... nuova barra.
static datetime New_Time=0; // tempo della barra corrente
New_Bar=false; // Nessuna nuova barra
if(New_Time!=Time[0]) // confronta il tempo
{
New_Time=Time[0]; // Ora il tempo è
New_Bar=true; // La nuova barra è catturata
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Chiusura ordine
{
double Close_Price=0; // Prezzo di chiusura dell'ordine
mentre(vero)
{
RefreshRates(); // Aggiorna i dati
if(F_Tip==0) // Se l'ordine è Buy, ...
Close_Price=Bid; // Prezzo di chiusura Bid
Close_Price=Ask; // Se l'ordine è Sell, chiudere il prezzo Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Chiudi acquisto o vendita
if (Ans_Close==true) // Ha funzionato :)
return(true); // Esci dalla funzione di chiusura
Crit_Error=GetLastError(); // Fissa il numero di errore
if (Fun_Error(Crit_Error)==1) // Gestione degli errori
continue; // Retry; // Prova di nuovo.
return(false); // Esci dalla funzione
}
}
//--------------------------------------------------------------- 9 --
//Apertura dell'ordine
bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
double Open_Price; //prezzo aperto
stringa Tip_Deal; // direzione del trade(comprare o vendere)
double f_sl; // ordine Stop Loss
double f_tp; // Take Profit
int Ticket; // biglietto dell'ordine aperto
while(true) // Gli ordini chiudono il ciclo.
{
RefreshRates(); // Aggiorna i dati
if(F_Tip==1) // Aprire SELL...
{
Open_Price=Bid;
Tip_Deal="OP_SELL";
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits);
}
//-------------------------------- Se vuoi aprire BUY, allora...
Open_Price=Chiedi;
Tip_Deal="OP_BUY";
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits);
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//open ORDER
if (Ticket > 0) // ha funzionato :)
return(true); //uscita dalla funzione
Crit_Error=GetLastError(); // numero di errore commesso
if (Fun_Error(Crit_Error)==1) // Gestione degli errori
continue; // Retry; // Prova di nuovo.
return(false); // Esci dalla funzione
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) //Errore di gestione delle funzioni
{
interruttore(Errore)
{ // Errori insormontabili.
caso 4: Avviso("Il server commerciale è occupato. Riprova...");
Sleep(3000); // Soluzione semplice.
return(1); // Esci dalla funzione.
caso 135:Alert("Prezzo cambiato. Riprova...");
RefreshRates(); // Aggiorna i dati.
return(1); // Uscire dalla funzione.
caso 136:Alert("Nessun prezzo. In attesa di un nuovo tick...");
while(RefreshRates()==false) // Effettua un nuovo tick
Sleep(1); // Ritardo nel ciclo
return(1); // Esci dalla funzione
caso 137:Alert("Broker is busy. Try again...");
Sleep(3000); // Soluzione semplice.
return(1); // Uscire dalla funzione.
caso 146:Alert("Il sottosistema di trading è occupato. Riprova...");
Sleep(500); // Semplice decisione
return(1); // Esci dalla funzione
// Errori critici
caso 2: Avviso("Errore generale;)
return(0); // Esci dalla funzione.
caso 5: Alert("Versione più vecchia del terminale");
Lavoro=falso; // Non funziona più
return(0); // Esci dalla funzione
caso 64: Avviso("Account bloccato.");
Lavoro=falso; // Non funziona più
return(0); // Esci dalla funzione
caso 133:Alert("Commercio proibito.");
return(0); // Esci dalla funzione
caso 134:Alert("Non ci sono abbastanza soldi per eseguire la transazione.");
return(0); // Esci dalla funzione
default: Alert("Si è verificato un errore ",Error); // Altre opzioni
return(0); // Esci dalla funzione
}
}
//-------------------------------------------------------------- 11 --
Qualcuno può dirmi qual è la ragione e cosa significa questo errore? All'inizio pensavo di aver dimenticato di mettere una parentesi da qualche parte.
Ma no, ho controllato diverse volte e sembra che tutto sia a posto con le staffe. Vi sarò molto grato per l'aiuto.
Ecco gli errori che il compilatore genera: ')' - non tutti i percorsi di controllo restituiscono un valore Stohastic-Signals-33.mq4 177 3
')' - non tutti i percorsi di controllo restituiscono un valore Stohastic-Signals-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Chiusura ordine
{
double Close_Price=0; // Prezzo di chiusura dell'ordine
mentre(vero)
{
RefreshRates();// Aggiorna i dati
se(F_Tip==0)// Se(ordine di acquisto, ...
Close_Price=Bid; // Prezzo di chiusura Bid
Close_Price=Ask;// Se ordine di vendita, prezzo di chiusura Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Chiudi acquisto o vendita
se (Ans_Close==true)// Ha funzionato:)
return(true);// Uscire dalla funzione di chiusura
Crit_Error=GetLastError();// commettere un numero di errore
if (Fun_Error(Crit_Error)==1) // Gestione degli errori
continuare;// riprova
return(false);// Uscire dalla funzione
}
}
Premi il pulsante Compile in MetaEditor e leggi il messaggio di errore - c'è un numero di linea e un numero di posizione
Inserisci il codice del programma con il pulsante SRC - ai lettori locali piace di più in questo modo!!! e il tuo lungo sproloquio è BRRRR
Il pulsante serve per inserire il codice sorgente nel testo del messaggio. Una volta cliccato, apparirà una finestra vuota dove è necessario incollare il codice e poi cliccare sul pulsante Insert.
Premi il pulsante Compile in MetaEditor e leggi il messaggio di errore - c'è un numero di linea e un numero di posizione
Inserisci il codice del programma con il pulsante SRC - ai lettori locali piace di più così!!! e il tuo lungo sproloquio è BRRRRR
Il pulsante serve per inserire il codice sorgente nel testo del messaggio. Quando si clicca, appare una finestra vuota dove è necessario incollare il codice e poi cliccare il pulsante Insert.
Grazie.