[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 605

 
VAM_ 08.06.2010 18:48modifica | cancella

Come si fa a metterlo in muto? Ha guidato fino alle ginocchia bianche. Ci sono molte finestre di strumenti (33). Non ci sono EA. Solo il centro e Zup. Non riesco a capire da dove canta. Vi prego di aiutarmi. Servizio, gli eventi sono stati. Le croci sugli eventi non aiutano. Sta ancora cantando, il bastardo.

Techno:


lo storno può sedersi nel tacchino )))

Guardato attraverso il codice - nessun avviso da nessuna parte! Cosa fare?
 
VAM_:

Guardato attraverso il codice - nessun avviso da nessuna parte! Cosa fare?

Controlla su PlaySound().
 
Come posso rendere possibile l'assegnazione di diversi valori a una variabile definita globalmente nel corso dell'esecuzione quando si chiamano diverse funzioni e questa li salva?

Ho bisogno di assegnare certi valori alla variabile Part, che è impostata globalmente, per la chiusura parziale di una posizione, e passarla come parametro alla funzione che esegue la chiusura parziale dell'ordine. Questa variabile è un semplice divisore. In altre parole, se il valore inizialmente impostato a 1, il lotto viene diviso per 1 e l'intera posizione viene chiusa. Quando le condizioni di trading cambiano, questa variabile ottiene nuovi valori e può essere uguale, per esempio, a 1,5 o 2, quindi il lotto della posizione viene diviso per questo numero, e viene eseguita la chiusura parziale. La chiamata di funzione con passaggio di parametri assomiglia a questo testualmente:

// На глобальном уровне
double Part = 1;                           // на сколько разделить лот для частичного закрытия 
//..........

void ClosePartPosBySelect(double Part)    // Объявление функции
// ... тру-ля-ля ... тело функции ...
ll=NormalizeLot((OrderLots()/Part));      // рассчёт лота внутри функции
// ... дальнейший код ф-ции ...

//--------- Вызов функции частичного закрытия ---------
// Происходит из тела этой функции
void TrailingPositionsTLE(int MAGIC, int CloseMethod, double Part, int LastTrailing)
// таким образом:
if (CloseMethod==1)
            ClosePartPosBySelect(Part);

Quindi, nonostante il fatto che quando la funzione viene chiamata ...

TrailingPositionsTLE(561, 1, 2, 1);

... CloseMethod = 1 (chiusura parziale) è impostato e Part = 2 è esplicitamente specificato, la funzione passa il suo valore iniziale = 1 che è stato impostato globalmente invece del valore Part specificato nel corso del programma (per esempio 2)...

Come posso sconfiggere questo? Grazie...

 
artmedia70: Quando le condizioni di trading cambiano, questa variabile ottiene nuovi valori e può essere uguale, per esempio, a 1,5 o 2, quindi il lotto della posizione viene diviso per questo numero e viene eseguita una chiusura parziale.


Bene, quando le condizioni di trading cambiano, allora cambiate la vostra variabile Parte. O li avete in un altro EA? Allora questa variabile deve essere letta tutto il tempo, cioè

int init()

{

.....

GlobalVariableSet("Part0",Part);

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

 
Roger:

Bene, quando le condizioni di trading cambiano, allora cambiate la vostra variabile Parte. O li avete in un altro EA? Allora questa variabile deve essere letta tutto il tempo, cioè

int init()

{

.....

GlobalVariableSet("Part0",Part);

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

No, la variabile è nello stesso EA. È definito globalmente e le funzioni possono usarlo, ma il suo valore, se cambiato all'interno delle funzioni, non viene restituito alle funzioni esterne. Pertanto, le funzioni vedono il suo valore come impostato inizialmente. Se non la imposto a livello globale, allora le funzioni si accoppiano sulla variabile non impostata...
 

Quando si passa una variabile a una funzione tramite il suo parametro, la variabile viene passata per valore, il che significa che cambiare la variabile nella funzione stessa non causerà la sua sovrascrittura.
Provate a passarlo per riferimento inserendo una "&" davanti al nome del parametro

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
VAM_:

Guardato attraverso il codice - nessun avviso da nessuna parte! Cosa fare?

Nella scheda "Eventi", deseleziona la casella "Consenti".

 

Salve cari professionisti.

Mi piacerebbe molto scrivere un EA che apra due ordini di vendita e di acquisto allo stesso tempo.

Poi, dopo una certa quantità di punti (parametro lim), l'ordine perdente verrebbe chiuso,

e uno redditizio sarà chiuso quando il prezzo è sceso sotto il prezzo massimo da quando l'ordine è stato aperto

(una specie di trailing stop virtuale).

In agonia ho creato questo, ma non funziona... non funziona

Per favore suggerisci qualcosa

int start()
  {
 
  double 
   max, min;                                            
  int b, s;
   if (Bid>max) max=Bid; 
    if (Ask<min) min=Ask;  
       if (OrdersTotal()>0)
       {                                   
           if ((max-Bid)>=lim*Point) 
           {                   
          OrderSelect(b,SELECT_BY_TICKET);                                  
          b=OrderClose(OrderTicket(),0.1,Bid,3,Blue);
          }
          
          
          if ((Ask-min)>=lim*Point)  
          {         
      OrderSelect(s,SELECT_BY_TICKET); 
      s=OrderClose(OrderTicket(),0.1,Ask,3,Red);
         }
}
else
{
  if (OrdersTotal()<1)
  {
 b=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",5,0);
      
 s=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",5,0); 
    }                           
   }
         return;

   return(0);
  }
 
artmedia70:
Come rendere possibile l'assegnazione di diversi valori a una variabile definita globalmente in fase di runtime quando si chiamano diverse funzioni e questa li salva?

due modi

1. aggiungere un amplificatore alla funzione in cui si cambia il valore,

es. void function( double& Part ){}

poi, quando un valore all'interno della funzione viene cambiato, il nuovo valore tornerà al luogo della chiamata

2. rimuovere la variabile dalla lista dei parametri della funzione, poiché la variabile è definita globalmente, il suo valore può essere cambiato in qualsiasi punto del codice senza passarla come parametro...

Ma per evitare confusione, è meglio la 1a variante, per non pensare a cosa sia questa variabile, dato che ci può essere più di una di queste variabili definite globalmente (e all'interno di una funzione)...


Ho dato un'occhiata al post, la risposta è già stata data...

 
artmedia70:
ma il suo valore, cambiato all'interno delle funzioni, non viene restituito a quelle esterne.


Mostra la funzione stessa.

Se è void ClosePartPosBySelect(double Part), cambiare in

void ChiuderePartPosBySelect()

Motivazione: