Funzione Trailing funds (equity) - qualcuno ne ha trovata una già pronta? - pagina 4

 

il mio suggerimento:

//+------------------------------------------------------------------+
//|Трал по эквити                                                    |
//+------------------------------------------------------------------+
bool EcvitiTral3(double EqvTralStep){
if(OrdersTotal()<1){ gEqviti=AccountBalance();return(false);}
if(!GlobalVariableCheck("step")){ EqvTralStep= EqvTralStep;}
  else{ EqvTralStep=GlobalVariableGet("step");}
EqvTralStep= EqvTralStep*(GlobalVariableGet("multi")-GlobalVariableGet("disable"));
  if( WithoutLoss){
    if(AccountEquity()>=AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*( EqvTralStep*2))){ EqvTralStep= EqvTralStep*2;}
      if(AccountEquity()>( gEqviti+( gEqviti/100* EqvTralStep))){
        gEqviti= gEqviti+( gEqviti/200* EqvTralStep);
        eqvtrade=true;
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<= gEqviti){ CloseAll();Print("CloseAll");GlobalVariableDel("stop");return(false);}
      else{Comment(AccountFreeMargin()+AccountMargin(),"\n",
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =", EqvTralStep," %",
                 "\n ACCOUNT BALANS         = ",AccountBalance(),
                 "\n CLOSE LEVEL                  = ", gEqviti,
                 "\n ACCOUNT EQUITY        = ",AccountEquity(),
                 "\n NEXT STEP                     = ", gEqviti+( gEqviti/100* EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");} 
  }else{
    if(AccountEquity()>AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*( EqvTralStep*2))){ EqvTralStep= EqvTralStep*2;}      
      if(AccountEquity()>( gEqviti+( gEqviti/100* EqvTralStep))){
        gEqviti= gEqviti+( gEqviti/200* EqvTralStep);
        eqvtrade=true;
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<= gEqviti){ CloseAll();Print("CloseAll");GlobalVariableDel("stop");return(false);}
      else{Comment(AccountFreeMargin()+AccountMargin(),"\n",
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =", EqvTralStep," %",
                 "\n ACCOUNT BALANS         = ",AccountBalance(),
                 "\n CLOSE LEVEL                  = ", gEqviti,
                 "\n ACCOUNT EQUITY        = ",AccountEquity(),
                 "\n NEXT STEP                     = ", gEqviti+( gEqviti/100* EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");}  
  }
return(false);
}
La chiamata è messa all'inizio, e si sovrappone al resto dei blocchi EA per il tempo di strascico, il passo di strascico è variabile - quadratico, che permette di lavorare bene con salti azionari catturando il massimo profitto. La modalità CU permette di tagliare sul nascere gli ordini non redditizi.
 
xrust >>:

il mio suggerimento:

Il trailing step è variabile, permette di lavorare fuori dai salti di Equity catturando il massimo profitto. La modalità CUE permette di tagliare sul nascere gli ordini non redditizi.

Buon pomeriggio,xrust! Per favore, spiega un po' di più sul funzionamento di questa unità. Non riesco a farlo funzionare.

Non riesco a farlo funzionare.

1. Funzione CloseAll(), deve essere una funzione f che cancella tutti gli ordini e/o chiude le posizioni.

Ho un analogo di questa funzione e qui non ci sono problemi.

2. L'ho definito nelle proprietà.

extern bool WithoutLoss = true;

- cos'è questo parametro?

3.

extern double gEqviti=200;// - è questa la dimensione del raggiungimento del patrimonio netto a cui la rete a strascico inizia a lavorare?

4. Ho anche impostato -

bool eqvtrade;

Cos'altro deve essere impostato? Come si imposta il parametro EqvTralStep?

E per favore (se non è difficile) descrivi in 2-3 parole come funziona la funzione in forma generale.

 
La funzione viene chiamata all'inizio dell'EA subito dopo l'int Start():
//удаляем запрет на торговлю после удаления всех ордеров 
  if(OrdersTotal()<1){
    if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}  
    gEqviti=AccountBalance(); 
  } 
//тралим эквити
  if( EcvitiTral3( EqwTralStep)){return(0);}
  if(GlobalVariableCheck("stop")){return(0);}

se eqviti è salito sopra l'equilibrio, blocca tutte le funzioni di acciaio di EA e traina.

Ora per le variabili: nelle variabili globali static double gEqviti;

extern double EqwTralStep=0.03; passo finale in percentuale del patrimonio netto extern bool WithoutLoss=false; permettendo di applicare il metodo di pareggio

Come funziona questa funzione: quando il capitale supera il saldo registra il livello del saldo come zero, il che significa che deve chiudere, se il capitale supera di EqwTralStep in percentuale sposta il livello di chiusura verso l'alto, se la velocità di superamento è alta, la funzione aumenta il passo quadraticamente.

 
Grazie! Farò un tentativo.
 

Sei il benvenuto, se hai qualche difficoltà, non esitare...

 

Fatto. È attivo e funzionante. Finora funziona bene. Sono stato online per una seconda settimana.

Ma. Ci sono rari glitch di tanto in tanto.

Di solito ho 3-10 posizioni sul mercato allo stesso tempo.

Ma - Quando c'è una posizione sul mercato, si chiude improvvisamente con un profitto =1-2 pip, senza alcuna ragione apparente!

Non capisco perché. Il codice di base del mio Expert Advisor non prevede una tale situazione.

 

È abbastanza facile da controllare, tali chiusure possono essere causate da una forte oscillazione del prezzo e da un movimento verso un nuovo livello di chiusura e di conseguenza chiudere la posizione.

Fallo:

организуйте в функции стическую переменную static double prewlewel;

потом перед , или за комментами 

  if( prewlewel!= gEqviti){
    prewlewel= gEqviti;
    Print( prewlewel);
  } 

А здесь добавьте обнуление переменной 
if(OrdersTotal()<1){ gEqviti=AccountBalance(); prewlewel=0;return(false);}
 

xrust - Ho un suggerimento/richiesta da farti - puoi portare il codice della tua versione dell'equity trawl come un EA standalone.

Sarebbe uno strumento molto utile per i commercianti manuali.

Ho cercato uno strumento del genere per molto tempo, ma non ho trovato nulla di adatto, e io stesso non sono bravo a codificare (o meglio sono debole).

 
ToKa_TuXa писал(а) >>

xrust - Ho un suggerimento per te - puoi portare il codice della tua versione dell'equity trawl come un EA standalone.

Sarebbe uno strumento molto utile per i commercianti manuali.

Buona idea! Io ti sostengo...

Infatti. Un tale design non passerà inosservato.

 
Prova questo Facile da usare. Lo uso io stesso. Tutto quello che dovete fare è specificare il profitto che volete e la percentuale di drawdown consentita dopo che è stato raggiunto.