[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 589

 
ilunga:
Perché queste sono variabili locali che già al secondo tick memorizzano spazzatura invece di ticket

Grazie mille! Onestamente ci ho pensato tutto il tempo!
 
Roman.:


Vedere il trailer. Mettete il suo contenuto nella cartella Experts del terminale. Seleziona il timeframe dello strumento che ti interessa e posizionalo sul grafico dell'Expert Advisor,

Imposta i parametri per l'apertura di un ordine nelle variabili esterne di MetaTrader:

Poi si aspetta la formazione di una nuova barra sul timeframe selezionato dello strumento.

Quando l'Expert Advisor apre un ordine dal mercato, confronta il tempo della sua apertura con il tempo di apertura di una nuova barra.

Roman, come promesso, voglio mostrarti cosa succede in pratica quando si lavora con l'Expert Advisor sul "aperto all'apertura". In primo luogo, l'EA viene attivato sul prossimo tick dopo il posizionamento sul grafico a 1 ora e apre un secondo trade all'apertura della candela successiva. Non riesco ancora a capire perché. In secondo luogo, il prezzo di apertura dell'affare non coincide con il prezzo di apertura di una nuova candela:

2012.02.24,12:00,1.3392,1.3405,1.3383,1.3387,768 - la candela si apre a 1.3392 e l'ordine viene attivato a 1.3390. Specifico uno slittamento di 1 punto nelle impostazioni. Se dovessi inserire 0 pip, l'EA non si attiverebbe affatto.

Ho allegato il registro. La cosa importante per me è ancora che l'ordine di apertura ha coinciso con il prezzo di apertura della candela.

 

Salve, signori. Gradirei un chiarimento.

Ho capito bene che se nel codice i comandi OrderDelete e OrderSend sono scritti in sequenza e se l'EA riceve un segnale per eseguire entrambi i comandi (ritiro + impostazione) sul tick #1, allora:

- questi due comandi non possono essere eseguiti nello stesso tick #1, e la loro esecuzione è allungata di almeno 3 tick, e

- al tick #1 viene emesso il comando OrderDelete;

- dopo che OrderDelete è stato inviato, solo con il prossimo tick #2 viene restituito il risultato, e solo ora nello stesso tick #2 può essere inviato il comando OrderSend;

- il risultato del comando OrderSend sarà noto solo al tick #3.

È questo il caso?


Ed è vero che non c'è la possibilità di inviare due comandi a MT nello stesso tick?

Sto scrivendo un EA in MT4.

Grazie.

 
Les:

Salve, signori. Gradirei un chiarimento.

Ho capito bene che se nel codice i comandi OrderDelete e OrderSend sono scritti in sequenza e se l'EA riceve un segnale per eseguire entrambi i comandi (ritiro + impostazione) sul tick #1, allora:

- questi due comandi non possono essere eseguiti nello stesso tick #1, e la loro esecuzione è allungata di almeno 3 tick, e

- al tick #1 viene emesso il comando OrderDelete;

- dopo che OrderDelete è stato inviato, solo con il prossimo tick #2 viene restituito il risultato, e solo ora nello stesso tick #2 può essere inviato il comando OrderSend;

- il risultato del comando OrderSend sarà noto solo al tick #3.

È questo il caso?


Ed è vero che non c'è la possibilità di inviare due comandi a MT nello stesso tick?

Sto scrivendo un EA in MT4.

Grazie.

Un tick è una nuova citazione. E non c'è connessione tra i comandi OrderDelete e OrderSend

Se ci sono aggiornamenti di notizie e slippage, allora nel momento in cui un semplice OrderSend viene eseguito, saranno passati una dozzina di tick. E se il mercato è in una notte piatta, entrambi i comandi possono essere eseguiti entro un tick

 
Les:

Tutto dipende da quanto velocemente vanno le zecche. In generale, le funzioni che restituiscono un valore, OrderDelete, OrderSend, ecc. non vengono eseguite in modo asincrono, cioè fino a quando l'intera operazione viene passata e viene emesso un codice di errore (o NO_ERROR in caso di successo), l'operatore successivo non viene eseguito. Un'altra cosa è che diversi tick possono essere eseguiti durante questo tempo, ma non saranno processati dalla funzione start().


Ci può anche essere una collisione quando, per esempio, un ordine fa scattare uno stoploss e si cerca di aprire/chiudere un altro ordine sullo stesso tick. Allora il server potrebbe, in alcuni casi, non permettervi di eseguire l'operazione.


Cioè la risposta alle tue domande è no, non lo è))

 
ilunga:

Un tick è una nuova citazione. E non c'è connessione con il tempo di esecuzione dei comandi OrderDelete e OrderSend

Se ci sono aggiornamenti di notizie e slippage, quando un semplice OrderSend viene eseguito, sono già passati una dozzina di tick. E se il mercato è in una notte piatta, allora entrambi i comandi possono essere eseguiti entro un tick.

MT, per quanto ho capito, sta estraendo informazioni dal server tramite ticchettii (e il server, a sua volta, sta dando risposte sui comandi simultaneamente all'invio di nuovi ticchettii, ottimizza i costi in base al tempo). E prima che arrivi una nuova zecca, non si sa nulla. Questo è quello che volevo dire. Ma forse mi sbaglio in questa supposizione? La domanda ha più a che fare con la seconda opzione che hai menzionato, quando il tick è lento, piuttosto che una dozzina di tick.

Ho capito bene, quindi, che ottenere una risposta sul comando #1 non è un prerequisito per passare al comando #2 ed elaborarlo completamente?

La risposta al comando è la parte "non essenziale" del comando? La sua presenza non è fondamentale per passare al comando successivo?

Abbiamo avuto una discussione con alsu qui sotto, e penso di aver assunto la stessa cosa che ha fatto lui: che avere una risposta è fondamentale. Voi scrivete che due comandi possono essere eseguiti in un solo tick. Quindi l'informazione dal server arriva senza alcuna connessione con il flusso delle quotazioni?


Grazie.

 
alsu:
Tutto dipende da quanto velocemente vanno le zecche. Generalmente le funzioni che restituiscono un valore, OrderDelete, OrderSend ecc. non vengono eseguite in modo asincrono, cioè fino a quando l'intera operazione viene passata e viene restituito un codice di errore (o NO_ERROR in caso di successo), l'operatore successivo non viene eseguito. Un'altra cosa è che diversi tick possono essere eseguiti durante questo tempo, ma non saranno processati dalla funzione start().


Ci può anche essere una collisione quando, per esempio, un ordine fa scattare uno stoploss e si cerca di aprire/chiudere un altro ordine sullo stesso tick. Allora il server potrebbe, in alcuni casi, non permettervi di eseguire l'operazione.


Cioè la risposta alle tue domande è no, non lo è))

Come non è così, se risulta essere esattamente "così", secondo le sue stesse parole? )) O sto di nuovo fraintendendo qualcosa? In risposta lei scrive che le funzioni vengono eseguite in modo tale che l'operatore successivo viene eseguito solo dopo che il codice di errore dell'operatore precedente è stato elaborato. Penso che sia quello che intendevo: che "due comandi non possono essere eseguiti sullo stesso tick #1", perché la risposta - quella risposta o il codice di errore - appare più presto con il nuovo tick. Oppure no? O le risposte ai comandi vanno in un flusso temporizzato separato, non collegato al flusso delle citazioni? Forse il mio errore è stato quello di supporre che i risultati dell'esecuzione del comando siano restituiti con una nuova citazione?

Naturalmente, mi riferivo principalmente alla situazione in cui le zecche sono lente.

 
Per favore, ditemi se è possibile che l'Expert Advisor chiuda solo gli affari positivi, nonostante il segnale dell'indicatore di chiudere l'affare e li chiuda ai prossimi segnali dell'indicatore, come escono in profitto?
 
Les:

MT, per quanto ho capito, estrae le informazioni dal server potikovo (e il server, a sua volta, dà risposte ai comandi contemporaneamente all'invio di nuovi tick, questo ottimizza i costi di tempo). E prima che arrivi una nuova zecca, non si sa nulla. Questo è quello che volevo dire. Ma forse mi sbaglio in questa supposizione? La domanda ha più a che fare con la seconda opzione che hai menzionato, quando il tick è lento, piuttosto che una dozzina di tick.

Ho capito bene, quindi, che ottenere una risposta sul comando #1 non è un prerequisito per passare al comando #2 ed elaborarlo completamente?

La risposta al comando è la parte "non essenziale" del comando? La sua presenza non è fondamentale per passare al comando successivo?

Abbiamo avuto una discussione con alsu qui sotto, e penso di aver assunto la stessa cosa che ha fatto lui: che avere una risposta è fondamentale. Voi scrivete che due comandi possono essere eseguiti in un solo tick. Quindi l'informazione dal server arriva senza alcun collegamento con il flusso delle quotazioni?


Grazie.

Le risposte ai comandi e i tic sono separati e non correlati. Se c'è un dead flat, puoi "catturare" diversi ordini aperti/chiusi sullo stesso tick.
 

Salve. Non sono affatto bravo a programmare. Non sono molto esperto nella codifica, quindi per favore aiutatemi ad aggiungere le posizioni di chiusura byStopLoss e TrailingStop al mio codice. L'Expert Advisor non è mio, ma la strategia non è male, quindi prova ed errore rielaborando l'EA per me - e per essere onesti, mi sto già facendo saltare la testa, e non c'è molto tempo - lavoro. Ho già provato e riprovato e, francamente, non ho tempo per questo - lavoro. Ed ecco cosa ci faccio:


//+------------------------------------------------------------------+
//|                                             stohastic_system.mq4 |
//|                                                    Анатолий      |                                                                  |
//+------------------------------------------------------------------+

extern double Lots=0.4;
extern int TakeProfit=50;
extern int NWave=2;
extern int K=9;
extern int D=3;
extern int slowing=5;
extern int Average_method=2;
extern int price_field=0;

int K_level=0;
int down=0;
int up=0;


int init()
  {

   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
    int ticket=0;
    double stoch_1=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,1);
    double stoch_2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
    double stoch_3=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,3);
    int Hour_curr=TimeHour(TimeCurrent());
    
    if ((stoch_1>90)&&(stoch_2>70)) K_level=90;
    if ((stoch_1<10)&&(stoch_2<30)) K_level=10;  
    if(OrdersTotal()<1)
      {        
        if((Hour_curr>=1)&&(Hour_curr<24))//проверка сигналов только в этот промежуток времени
          {
            if((K_level==10)&&(stoch_1>10))//сигнал на покупку
              {
                RefreshRates();
                Print("Сигнал на покупку. stoch_1=",stoch_1," stoch_2=",stoch_2);
                ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,Ask+TakeProfit*Point,"buy_order1",1,0,Blue);
                
                K_level=10; 
                down=0;               
              }
            if((K_level==90)&&(stoch_1<90))//сигнал на продажу
              {
                RefreshRates();
                Print("Сигнал на продажу. stoch_1=",stoch_1," stoch_2=",stoch_2);
                ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,Ask-TakeProfit*Point,"sell_order1",1,0,Red);
               
                K_level=90;
                up=0; 
              }
          }
      }
    
   
   
    return(0);
  }