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

 
LSM:
Ho modificato la mia domanda e aggiunto il codice. C'è un ciclo in corso. Non è chiaro cosa otterrò quando accadrà nel ciclo.
Lì tutto è chiaro,
per esempio, nel ciclo, l'indicatore ha contato 15. Candela da 5 minuti
e ha preso il valore del 15+1. La 16a candela a 15 minuti.


 
LSM:

Risponderò alla mia stessa domanda nel caso in cui qualcuno ne abbia bisogno).

Proprio così.
 

Buon pomeriggio.

Per favore, consigliatemi, ho un'idea, ma da quale parte avvicinarmi, "non capisco" ancora.

Ho un indicatore, ho aperto l'accesso per una certa lista di numeri di conto da un file CSV sul server.

È tecnicamente possibile scrivere un messaggio per un account specifico dalla lista e visualizzarlo sul grafico per questo specifico utente.

Per esempio, specifico il numero di conto in CSV e scrivo il testo come "Ciao..." e l'utente lo vede sul grafico? Se è possibile, in quale direzione "scavare"? Grazie...

 

Buon pomeriggio, potreste aiutarmi a capire un po' di sintassi di mql4? Ho un'idea per scrivere un EA trend-following che per esempio entrerebbe in una posizione lunga con uno stop di 150 pip dall'ordine aperto e take profit di 50 e poi se il prezzo raggiungesse i tp si aprirebbe un nuovo acquisto con stop 150 e take profit 50 e se fosse battuto al ribasso dallo stop loss si effettuerebbe una vendita con lo stesso rapporto rischio/profitto delle posizioni lunghe. Ho provato a scrivere un codice con tale logica, ma non è riuscito perché l'Expert Advisor non fa alcun trade durante i test.

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
MosheDayan:

Buon pomeriggio.

Per favore consigliatemi, ho un'idea, ma da quale parte avvicinarmi, "non capisco" ancora.

Ho un indicatore, ho aperto l'accesso per una certa lista di numeri di conto da un file CSV sul server.

È tecnicamente possibile scrivere un messaggio per un account specifico dalla lista e visualizzarlo sul grafico per questo specifico utente.

Per esempio, specifico il numero di conto in CSV e scrivo il testo come "Ciao..." e l'utente lo vede sul grafico? Se è possibile, in quale direzione "scavare"? Grazie...

Invia al server una post-request con il numero di conto

IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN)

Sul server controlla il numero in arrivo con tutte le righe del file CSV, e se c'è una corrispondenza, allora da questa riga del file invia una risposta al terminale. Tutto ciò che rimane è leggere la risposta dal server nel terminale e visualizzarla sul grafico.

In generale, queste cose sono più facili da implementare su MySQL che su file.

 
Maxim235v34:
E sì, se non è difficile, suggerisci un modo per ridurre l'interlinea in questo forum.

Scrivere prima in un file di testo (blocco note) - poi copiare tramite gli appunti. Lo otterrete così

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
leggere la funzione OnInit() - mettere il cursore su di essa e premere F1. La parola int è davanti - quindi la funzione restituisce un valore intero. State cercando di restituire un valore di tipo double. Il risultato della funzione OnInit() è analizzato dal sottosistema runtime del terminale e non ha quasi bisogno di questo valore.
 
LRA:

Scrivere prima in un file di testo (in notepad) - poi copiare tramite gli appunti. Funziona così

Grazie. Buono a sapersi.

Leggete la funzione OnInit() - mettete il cursore su di essa e premete F1. La parola int è davanti - quindi questa funzione restituisce un valore intero. Voi state cercando di restituire un valore di tipo doppio. Il risultato di OnInit() è analizzato dal sottosistema runtime del terminale e non ha quasi bisogno di questo valore.
Allora quale gestore di eventi di quale tipo dovrebbe essere usato per implementare questo - per
per fissare il valore del prezzo all'inizio del funzionamento del programma, rispetto al quale verranno eseguiti i calcoli futuri?
Ho provato a rimuovere tutto ciò che era nell'int OnInit e a mettere il seguente codice nel void OnTick all'inizio aggiungendo la variabile varStart
se(varStart==0)
{
b=Offerta;
varStart=1;
}
Il risultato è invariato.
 

C'è una funzione con un puntatore:


  TickReturn *returntick(int period, int timeposition)
   {
      TickReturn *returntick = new TickReturn();
      MqlRates rates[];
      MqlTick last_tick;
      
      if(SymbolInfoTick(symbol,last_tick)){}
      else Print("SymbolInfoTick() failed, error = ",GetLastError());
      
      //int timeposition=0;
      ArraySetAsSeries(rates,true);
      ArrayResize(rates,1);
      int copied=CopyRates(symbol,period,timeposition,1,rates);
      
      returntick.curtime = rates[0].time;
      returntick.open = rates[0].open;
      returntick.close = rates[0].close;
      returntick.high = rates[0].high;
      returntick.low = rates[0].low;
      returntick.priceask = last_tick.ask;
      returntick.pricebid = last_tick.bid;
      
      return(returntick);

   } 

Lo chiamo ancora in un'altra funzione:


string timeis = returntick(period, 1).curtime;

Come faccio a cancellare la memoria?

Su delete(TickReturn); ottengo un errore operando escluso.

 
hamsteruser:

C'è una funzione con un puntatore:


Lo chiamo ancora in un'altra funzione:


Come faccio a cancellare la memoria?

A delete(TickReturn); ottengo un errore operando escluso.


Se ho letto bene il tuo codice, TickReturn è una classe. Avete creato un puntatore a una variabile del tipo di questa classe e cancellate... la classe stessa? Dovete distruggere il puntatore e assicurarvi che esista e sia dinamico.

 
Алексей Барбашин:

Se ho letto bene il tuo codice, TickReturn è una classe. Avete creato un puntatore a una variabile del tipo di quella classe, ma state distruggendo... ...la classe stessa? Dovete distruggere il puntatore e assicurarvi che esista e sia dinamico.


Anche il *returntick non è distruttibile. Sono solo confuso dall'uscita del terminale di trading. Mi dice che non sta cancellando la memoria.

Motivazione: