Domanda sul consulente multivaluta

 

Buona sera!

Sto pensando di combinare due coppie in un solo EA. L'ho fatto.

Ma improvvisamente ho avuto dei dubbi. Ho fatto così:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
double A = iRSI("GBPUSD", 0, .....);
double B = iRSI("GBPUSD", 0, .....);
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
//------------------------------------------------------
if (GBP) {//если есть разрешение true
if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }

Nell'online e nello Strategy Tester tutto funziona! Forse questo non è proprio il modo giusto per farlo:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
//------------------------------------------------------
if (GBP) //если есть разрешение true{
 
double C = iRSI("GBPUSD", 0, .....);
double D = iRSI("GBPUSD", 0, .....); 
 if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
 if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }
La seconda opzione sembra funzionare anche nel tester.

Ma qual è il modo migliore per farlo?

 
rid:

Buona sera!


Sto pensando di combinare due coppie in un solo EA. L'ho fatto.


Ma improvvisamente ho avuto dei dubbi. Ho fatto così:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
double A = iRSI("GBPUSD", 0, .....);
double B = iRSI("GBPUSD", 0, .....);
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
//------------------------------------------------------
if (GBP) {//если есть разрешение true
if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }

Nell'online e nello Strategy Tester tutto funziona! Forse questo non è proprio il modo giusto per farlo:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
//------------------------------------------------------
if (GBP) //если есть разрешение true{
 
double C = iRSI("GBPUSD", 0, .....);
double D = iRSI("GBPUSD", 0, .....); 
 if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
 if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }
La seconda opzione sembra funzionare anche nel tester.

Ma qual è il modo migliore per farlo?




Di solito calcolo tutti i valori dell'indicatore all'inizio, cioè la variante 1, è più facile, non ci si confonde e il codice è più strutturato.
 

Grazie! Per la risposta. Un'altra domanda. I trailing stop non vogliono funzionare. Funzionano individualmente nel tester!

Ma online, funziona per una coppia. Ma per un altro genera un errore - subito dopo aver attaccato l'Expert Advisor.

Ma gli accordi vanno - solo senza strascico sulla seconda coppia.

Errore 130 che modifica SL

int start()
  {
РАСЧЁТ  ИНДИКАТОРОВ 
{
ПОКУПКА/ПРОДАЖА
  }
 
for (int j=0; j<OrdersTotal(); j++)                                    {
    if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))                     {
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1)          {
ИДЕТ КОД 1 ТРЕЙЛИНГА.
   }
 
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2)          {
ИДЕТ КОД 2 ТРЕЙЛИНГА
}
 
return(0);  
  }
I codici di coda sono gli stessi, ma le variabili esterne e interne hanno caratteri diversi.

Non riesco a capire cosa c'è di sbagliato. Forse qualcuno me lo dirà?

 
prova così
int start()
{
//РАСЧЁТ  ИНДИКАТОРОВ 
 
//ПОКУПКА/ПРОДАЖА
  
 
for (int j=0; j<OrdersTotal(); j++)
  {
    if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
       {
          if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1)         
              {
                  ИДЕТ КОД 1 ТРЕЙЛИНГА.
              }
          if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2)   
              {
                  ИДЕТ КОД 2 ТРЕЙЛИНГА
              }
        }
   }
 
 
  return(0);  
}
 
strutturare il codice, sarà più facile da capire sia per le persone che per voi.
 

Lo proverò, grazie.

 

Sembra funzionare!

Nessun errore ancora. Aspettando i profitti per controllare la rete a strascico.

Altre domande. Se non ti dispiace.

Non sono nemmeno lontanamente vicini agli esempi più semplici di esperimenti multivalutari e, quando sono disponibili, non sono per le menti deboli. È troppo complicato per capire tutto.

Ce n'è uno nel mio codice:

 double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
//-------Проверяем условие на покупку-------------
if  (

Tuttavia, nei rari esempi su questo sito in cui è presente un blocco simile, c'è una linea:

RefreshRates();
 double BID = MarketInfo("GBPUSD", MODE_BID);
 double ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);

Ho anche inserito questa linea. Ha compilato. Ma non noto alcun cambiamento nelle prestazioni.

Quanto è necessario qui? Forse dovrebbe essere lasciato nella mia EA. Funziona su tutte le zecche. E usa un array di valori -

//------заполняем массив значениями RSI GBPUSD -----------
 double RSI_array[30];
int    i=0;
while (i<31)
 {
RSI_array[i]=iRSI("GBPUSD",0,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i);
i++;

 
il principio di Expert Advisor multivaluta è approssimativamente il seguente:
1. nel calcolo degli indicatori per specificare specifiche valute e intervalli di tempo, per esempio: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //ma qui c'è un errore
2. ottenere prezzi, punti, ecc. utilizzando MarketInfo.
3. usare iLow(...) invece di Low[0] per esempio
e si applicano a tutte le coppie di valute.
Buona fortuna.
 

Ricevuto l'errore! Invece di "0" - ho messo nelle variabili dell'indicatore per le valute - il timeframe su cui lavora l'Expert Advisor.

Il mio Expert Advisor sembra funzionare senza problemi. E anche le reti a strascico funzionano.

E un'ultima domanda, spero. Ne ho inserito un altro. Ma non è l'indicatore incorporato ma uno personalizzato. Nel tester, questa coppia funziona. Ma online non lo farà! Genera qualcosa di strano: quasi ogni secondo questo indicatore viene messo e cancellato. ..... - qualche consiglio?

//***************************************************************

kLerk! Di tutti gli esperti qui questa settimana lei è l'unico che ha risposto alla mia domanda. E ho ottenuto le risposte di cui ero per lo più soddisfatto. ( Tranne la domanda su RefreshRates() )

Mettete qui il vostro indirizzo e-mail.

Come segno della mia gratitudine, vi invierò un semplice "Graal" di trading - EA! che è stato inventato dal mio buon amico (d'accordo). Io ci lavoro come conferma manuale e uso solo due indicatori indotti incorporati.

Senza ironia, - che è davvero quasi un "Graal" (a una certa abilità di lavorare con esso), - si vedrà dopo pochi minuti dopo averlo ricevuto! Tuttavia - lasciamo che tutti diano un'occhiata:

Il simbolo ---------

Periodo 30 minuti (M30) 2007.01.02 11:00 - 2007.08.15 00:00

Modello Tutti i tick (basato su tutti i più piccoli periodi disponibili con interpolazione frattale di ogni tick)

Qualità della modellazione 67,35%

Deposito iniziale 10000.00

Utile netto 4009.24

Profitto totale 6335.06 Perdita totale -2325.82

Redditività 2,72 Payoff atteso 21,44

Estrazione massima 245,63 (2,18%) Estrazione relativa 2,18% (245. 63)

Totale scambi 187

Posizioni corte (% vittoria) 71 (80,28%)

Posizioni lunghe (% vittoria) 116 (68,10%)

Operazioni redditizie (% di tutte) 136 (72,73%)

Operazioni in perdita (% di tutte) 51 (27,27%)

La più grande operazione redditizia 145,02, l'operazione perdente -47. 77

Media degli scambi redditizi 46.58, scambi perdenti -45.60

Numero massimo di vittorie continue (profitto) 9 (586. 96)

perdite continue (perdita) 4 (-189.99

Ed ecco il grafico del test fuori campione per novembre/dicembre dell'anno precedente 2006:

 
rid:

Come segno della mia gratitudine, vi manderò un semplice "graal" del trading: un consigliere!

Congratulazioni, klerk, hai avuto il graal gratis!
 
<< Stampa qualcosa di incomprensibile: quasi ogni secondo questo indicatore viene messo e rimosso...... - >>

Molto probabilmente, i parametri reali con cui viene chiamato l'indicatore personalizzato non corrispondono a quelli formali elencati con la chiave extern nell'elenco (numero, ordine, tipo, ...). Un errore abbastanza comune.