[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 305

 

Ciao!

Inizierò con un esempio semplice, altrimenti sarà difficile da spiegare.

doppio risultato()

{

doppio x = Bid;

ritorno(x);

}

doppio risultato_y()

{

doppio y = Bid;

ritorno(y);

}

Devono essere fusi in uno solo.

Il risultato() è quindi necessario come X in una funzione e come Y nell'altra . È possibile? Come fare?

double result() // ????

{

doppio x = Bid;

doppio y = Ask; // devo restituire anche questo

ritorno(x);

return(y); // ?

}

 

No, ci può essere solo un risultato. passare i valori per riferimento:

double _bid = 0, _ask = 0;

Print(_bid,":",_ask);

ResFunction(_bid,_ask);

Print(_bid,":",_ask);


void ResFunction(double &x, double &y){
   x = Bid;
   y = Ask;
   return;
}
 
abeiks:

Ciao!

Inizierò con un esempio semplice, altrimenti sarà difficile da spiegare.

Bene, per il fatto che in entrambi i casi viene restituito lo stesso valore dalle vostre subroutine - prezzo Bid, allora una di queste due funzioni può essere eliminata dal codice. Se i valori restituiti sono diversi, potete, per esempio, assemblarli in una stringa - restituite dalla subroutine questi due valori separati da qualche separatore, per esempio punto e virgola. E restituirli come stringa. Poi, nel codice principale, estrarre 2 valori dalla stringa e convertirli in doppio.
 

Invia qualcosa al sottoprogramma in modo che possa capire cosa è necessario.

 
abeiks:

Ciao!

...

Ciao, visto che qualcuno ha già commentato la tua domanda, vorrei chiederti: siete i campioni del 2008 ?

Se è così, potrebbe parlarci del suo GRAAL, senza rivelare tutti i "segreti della corte di Madrid" e senza raccontarci "tutte le storie del bosco di Vienna". Basta sollevare un po' il velo... Puoi - in questo ramo, sono sicuro, la gente lo troverà utile!

Io stesso mi sto preparando attivamente per il campionato...

Grazie!

 
drknn:

Per favore, ditemi, perché si azzera una variabile quando si dichiara una funzione? È proprio qui:


È così che si imposta il valore di default se non lo si imposta esplicitamente quando lo si chiama, o mi sbaglio?
 
Skydiver:

Quindi è così che è impostato al valore predefinito nel caso in cui non sia impostato esplicitamente quando viene chiamato, o mi sbaglio?


Non lo so. Ma sono interessato. Lo controllerò.

P.S.

Funziona!

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start(){
  Alert("func1(100) вернула значение = ",func1(100),"  func1() вернула значение = ",func1());
  return(0);
}
//+------------------------------------------------------------------+
int func1(int i=25){
        return(i);
}

 
Skydiver:
Provate a pre-stampare ogni valore su ogni iterazione del ciclo. La dimensione del vostro array è piccola, quindi non ci sarà un'accozzaglia di dati.
 

Come posso fare in modo che la differenza tra gli ordini di apertura dello stesso segno sia di 1 barra?

 
GarKain:

Come posso fare in modo che la differenza tra gli ordini di apertura dello stesso segno sia di 1 barra?


Dobbiamo confrontare il tempo di apertura di una posizione con il tempo di apertura della barra corrente Time[0]. Se il tempo di apertura di una posizione è maggiore o uguale al tempo di apertura della barra, l'Expert Advisor non aprirà una nuova posizione. Quando appare una nuova barra, Time[0] cambierà il suo valore in un tempo successivo e questo confronto mostrerà che la posizione non è ancora stata aperta sulla barra corrente (nuova) e possiamo negoziare.

A proposito, la tua domanda può anche essere suddivisa in 2 sotto-domande:
1. Alla barra attuale è stata aperta una posizione che è riuscita a chiudere, ma siamo ancora in attesa di una nuova barra.
2. Una posizione è stata aperta sulla barra corrente ed è riuscita a chiudersi, quindi possiamo aprire di nuovo una posizione sulla stessa barra (cioè possiamo aprire 1 posizione sulla stessa barra contemporaneamente).