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?
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à?
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); }
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++;
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:
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.
Buona sera!
Sto pensando di combinare due coppie in un solo EA. L'ho fatto.
Ma improvvisamente ho avuto dei dubbi. Ho fatto così:
Nell'online e nello Strategy Tester tutto funziona! Forse questo non è proprio il modo giusto per farlo:
La seconda opzione sembra funzionare anche nel tester.Ma qual è il modo migliore per farlo?