Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 402

 
STARIJ:
Qui sotto c'è questo:

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

////+------------------DELETE BUYLIM-----------------------------------+
   if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0)                  //  лот байлимит НЕ лот бая
     {     
      for(int i=0;i<OrdersTotal();i++)
        {
         datetime T_op=0,T_lim=0,buys=0;
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
         if(OrderType()==OP_BUY)
         if(OrderCloseTime()>buys) buys+=OrderCloseTime();
         buys= OrderCloseTime();
         T_op=buys;                                                       //  время закрытия бая
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
           {
            if(OrderType()==OP_BUYLIMIT)
              {
               T_lim=OrderOpenTime();                                     //  время закрытия селл
               ticket=OrderTicket();
               if(T_lim<=T_op)                                            //  разность
               res=OrderDelete( ticket,clrMagenta);
               if(res<1)
               {
                  Print(GetLastError());
               }
              }
           }
        }
     }
 
ZZuretc:

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()

 
Alexey Viktorov: Io stesso non ho guardato il miracolo.

Grazie.

 
Potete dirmi come trovare i valori massimi e minimi dell'ATR attuale?
File:
q6a0hh.PNG  12 kb
 

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

')' - non tutti i percorsi di controllo restituiscono un valore Stohastic-Signals-33.mq4 210 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 --



File:
 
RomanRott: Potete dirmi come trovare i valori massimi e minimi dell'ATP attuale?
   double max=-10000, min=+10000, ATR;
   for(int n=0; n<WindowFirstVisibleBar();n++)
   {
      ATR=iATR(NULL, 0, 14, n);
      if(max<ATR)max=ATR;
      if(min>ATR)min=ATR;
   }
   Alert("min = ", DoubleToStr(min,4), "    max = ", DoubleToString(max,4));
Per altri indicatori in modo simile
 
Skander: Ciao a tutti.Fatto un semplice esperto basato su Stochstic (in alto picco vende, in basso compra), e il compilatore dà un errore su un punto piatto.
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

//--------------------------------------------------------------- 8 --
  bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip)    // Ф-ия закрытия ордера
  {
   double Close_Price=0;                       // Цена закрытия ордера 
   while(true)
     {
        ....................................
            continue;                           // Повторная попытка
         return(false);                                // Выход из функции
     }
     return false;   // Компилятор хочет return в конце функции
  }

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 Codice 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.

 
STARIJ:

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.

Motivazione: