Non ho mai studiato programmazione, ma voglio scrivere un EA. - pagina 8

 

Allora, come va, colleghi programmatori?
Sono l'autore di questo thread e continuo a chiedere consigli.


quindi nella struttura dichiarata dell'intestazione

ed ecco la parte interessante: che cos'è questo?
Ho definito una condizione in OnTick che se non ci sono ordini aperti
poi:
se uno swing veloce è maggiore di uno swing lento,
poi: aprire un ordine.



domanda: perché un ordine si apre su ogni tick?

 
Sergey Lobzankin:

Allora, come va, colleghi programmatori?
Sono l'autore di questo thread e continuo a chiedere consigli.


Così ho dichiarato la struttura nell'intestazione

e qui c'è la cosa interessante, COSA è questo?
Ho definito una condizione in OnTick che se non ci sono ordini aperti
poi:
se uno swing veloce è maggiore di uno swing lento,
poi: aprire un ordine.



Domanda: perché un ordine si apre su ogni tick?

Significa che ad ogni tick la condizione è soddisfatta.

Se la condizione dovrebbe essere un incrocio di MA, allora sulla prima barra era < meno e sulla barra zero è diventato > più. Ma nella tua condizione sulla barra zero > più e sulla prima barra > più.

 

https://code.org/

https://scratch.mit.edu/

Se vuoi imparare la programmazione (è davvero uno stile di pensiero, non un linguaggio) in MQL - è una vera seccatura per te e per l'ambiente circostante.

Cliccate sui link - tutto è semplice, di livello scolastico (anche elementare in alcuni posti), ma almeno una certa introduzione agli algoritmi e alla loro scrittura. Altrimenti, ogni volta che starnutite, contatterete il forum e aspetterete una risposta, e questa è una perdita di tempo, e il tempo è denaro.

PS/ e consiglio a tutti di leggerlo, scratch è un capolavoro dall'interno - il nonno della programmazione moderna.

Code.org: Любой может научиться
Code.org: Любой может научиться
  • code.org
Каждый студент в каждой школе заслуживает возможность изучения компьютерных наук.
 
Sergey Lobzankin:

Allora, come va, colleghi programmatori?
Sono l'autore dell'argomento e continuo a chiedere consigli.


così nell'intestazione ha annunciato la struttura

e qui c'è la cosa interessante, che cos'è questo?
Ho definito una condizione in OnTick che se non ci sono ordini aperti
poi:
se uno swing veloce è maggiore di uno swing lento,
poi: aprire un ordine.



domanda: perché un ordine si apre su ogni tick?

Allora, compagno autore dell'argomento?

Te l'ho consigliato un mese fa, ma non ci stai nemmeno facendo caso:

Questo è il forum per il trading, i sistemi di trading automatico e il test delle strategie di trading.

Non ho mai studiato programmazione, ma voglio scrivere un Expert Advisor.

Alexey Volchanskiy, 2018.04.10 17:47

C'è un pulsante "Codice", a sinistra del pulsante con le lettere Aa. Se non sapete come usarlo, potete usarlo per esempio per postare il vostro codice ).


Questo è un forum per il trading, sistemi di trading automatico e test di strategia.

Non ho mai studiato programmazione, ma voglio scrivere un Expert Advisor.

Konstantin Nikitin, 2018.04.10 21:18

Beh, non hai niente di super naturale lì. Quindi l'opzione migliore. Pubblicalo qui, ma solo attraverso

Qualcuno suggerirà qualcosa di utile.


E si incolla ancora del codice con un'immagine.

 
Ciao, sto affrontando il seguente problema. L'EA ha bisogno dei dati della media mobile sullo zero e sulla prima barra per analizzare la situazione e per ulteriori calcoli.
La funzione OnCalculate è stata fondamentalmente inventata per scrivere un indicatore. Ho fatto questa funzione separata nel mio EA, ma non riesco a capire come accedervi da OnTick.
 
Sergey Lobzankin:
Ciao, ho incontrato un problema simile. L'Expert Advisor ha bisogno dei dati della media mobile sullo zero e sulla prima barra per analizzare la situazione e per ulteriori calcoli.
La funzione OnCalculate è stata fondamentalmente inventata per scrivere un indicatore. Nel mio EA, ho fatto questa funzione separata, ma non posso dare un'idea di come accedervi da OnTick

Non hai nemmeno bisogno di provare a prendere OnCalculate da un indicatore in un EA! Devi solo applicare l'indicatore nell'EA (usando l'handle dell'indicatore) e ottenere i dati.

Esempio di lavoro con iMA e iStdDev nel codiceiMA iStdDev- codice estratto da OnTick, ottenendo dati dagli indicatori iMA

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;
 
Vladimir Karputov:

Non hai nemmeno bisogno di provare a portare OnCalculate dall'indicatore all'EA! Hai solo bisogno di applicare l'indicatore nell'Expert Advisor (usando la maniglia dell'indicatore) e ottenere i dati.

Esempio di lavoro con iMA e iStdDev nel codiceiMA iStdDev- estratto di codice da OnTick, ottenendo dati dagli indicatori iMA

Ho il sospetto che tu abbia dannatamente ragione ))))
ora proverò a giocare con gli array via ...Array...

 

Ed ecco l'altra cosa...
Ho le maniglie giuste nel cappello dell'esperto

extern int    zazor      = 0;
extern double Lots       = 0.1;
extern int    TrailingStop = 15;
extern int    TrailingStep = 2;
extern int    Magic      = 123;
extern int    Slippage   = 5;
int Digits;

int timeprev=0;

int    ticket;
double price,TP,SL,lastlot;
string;

int ima1_handle          = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);               //хендл
int ima2_handle          = iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
int Stoch_handle         = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
int ATR_handle           = iATR        (Symbol(),0,21);                              //хендл
double ima1_massiv [2];                                                              //статический массив для быстрой машки 

e sui forum, chi lo fa... Ognuno lo fa in modo diverso: alcuni in oninit, altri in ontik,
Il punto è che nel mio layout, copio i dati in un array e ottengo il numero di elementi da copiare

void OnTick()
  { 
    int ima_count1 = CopyBuffer(ima1_handle,0,1,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    string str_ima1 = IntegerToString(ima_count1);                 //отладочная
    printf("мой первый хендл = "  + str_ima1);                     //отладочная
   }
P.S., a proposito, il tester ha visto tutti gli indicatori le cui maniglie sono nell'intestazione di Expert Advisor e ha disegnato tutto sul grafico del visualizzatore
 

ecco un articolo che spiega chiaramente come implementare l'accesso ai dati dell'indicatore
https://www.mql5.com/ru/articles/43

Ma ragazzi, i dati vengono copiati in un array, senza dubbio, ma ho bisogno di ottenere numeri specifici, cioè, se l'onda sull'ultimo tick della barra corrente è 1,32456, allora ho bisogno di ottenere questa cifra nel log (per essere sicuro che la cifra sia effettivamente ottenuta), ho bisogno di tirare fuori questa informazione specifica nel tipo double,

per calcolare il numero di punti di tipo int tra due maschere diverse. come posso ottenere questo valore?


Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sergey Lobzankin:

Ecco un articolo che spiega chiaramente come implementare l'accesso ai dati dell'indicatore
https://www.mql5.com/ru/articles/43

Ma ragazzi, i dati sono copiati in un array, senza dubbio, ma ho bisogno di ottenere numeri specifici, cioè se l'onda sull'ultimo tick della barra corrente è 1,32456, ho bisogno di ottenere questo numero nel log (per essere sicuro che il numero sia effettivamente ottenuto), ho bisogno di tirare fuori questa informazione specifica nel tipo double,

per calcolare il numero di punti int tra due diversi mash-up. come si ottiene questo valore?


Guardate e leggete anche quello che vi viene detto? Ti ho dato un esempio nel post. Sta solo ricevendo dati da due iMA:

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;

Ci sono due indicatori iMA - "Fast" e "Normal". I dati di questi due indicatori sono ottenuti negli arrayma_fast ema_normal rispettivamente. Richiediamo ilconteggio di #start_pos dalla barra.

E poi accediamo ai dati ottenuti (in questo esempio accediamo ai dati della barra #0)