Risposta

Gestione del denaro Problem - % fisso e dimensione del lotto

5 risposte

Julianrob

Cliente, bbp_partecipante, comunità, 54 risposte.

Visita il profilo

9 anni fa #113227

Ciao Mark,

 

Innanzitutto grazie mille per l'aiuto che mi avete dato finora. Sembra che io abbia difficoltà con la gestione del denaro con questo EA - sto usando MM predefiniti nelle mie regole di strategia.

 

Nella sezione della strategia ho le variabili per la dimensione del lotto e la percentuale fissa definita come valore doppio, ma quando eseguo questo EA su AUDUSD o EURUSD con una dimensione del lotto di 0,10, apre sempre le operazioni con una dimensione del lotto di 0,01.

 

Quando imposto AccountRiskPerTrade a 5, si aprono dimensioni di negoziazione di 5 lotti per ogni operazione, ma non si compongono i guadagni. Si prega di fare riferimento alle immagini allegate.

 

Per lo stop loss e il take profit, utilizzo valori fissi impostati come variabili, a cifra singola e di tipo int (intero).

 

Qualsiasi aiuto sarebbe fantastico, grazie.

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #128549

Salve,

 

In base alla scelta del MM, i lotti vengono calcolati dinamicamente in base allo SL e all'equity del conto corrente. Il LotSize viene utilizzato solo se il MM non può essere calcolato, di solito quando non è stato definito uno SL per l'ordine.

Ma se il rischio per operazione è impostato su 0, questo non ha senso.

 

Se si desidera utilizzare una dimensione fissa del lotto, si deve utilizzare "Nessuna gestione del denaro", altrimenti si deve impostare la quantità di % del conto che si desidera rischiare in ogni operazione.

 

 

Il problema della dimensione calcolata è che la variabile LottiDecimali è impostata su 2, il che significa che arrotonderà i lotti a due numeri decimali.

 

Esso non compone i guadagni - funzionerà quando imposterete il rischio per operazione a un valore non nullo.

Marchio
Architetto StrategyQuant

0

Julianrob

Cliente, bbp_partecipante, comunità, 54 risposte.

Visita il profilo

9 anni fa #128585

Grazie Mark, ho capito.

0

loonet

Abbonato, bbp_partecipante, comunità, cliente, sq-ultimate, 15 risposte.

Visita il profilo

9 anni fa #129589

Ciao Mark, sono Riccardo di Sapienza Finanziaria.

Vorrei farvi notare che, a mio parere, il MAE ha un bug nel calcolo del rischio di gestione del denaro con % fisso del capitale del conto.

Per il sistema di trading che sto pianificando ho fissato un rischio per operazione di 1%

Provate a guardare ad esempio cosa succede nel trade # 79 che ho evidenziato nell'immagine allegata.

risultato della compravendita.jpg

 

Prima dell'operazione #79 sul mio conto ho un saldo di 21680 USD e ho impostato un rischio per operazione di 1%.

Significa che potrei perdere circa 217 dollari se prendo l'SL.

Il trade # 79 è un'operazione BUY con prezzo di entrata a 1,3703 e SL a 1,3640.

L'operazione va a mercato con 3:40 lotti, quindi ogni pip è di 34 USD.

La transazione si chiude con una perdita di 1241 pip (= 63 x 34).

In realtà, per rispettare un rischio per operazione di 1%, il sistema di trading avrebbe dovuto aprire l'operazione con 0,34 lotti e non con 3,40 lotti.

 

 

Ho quindi cercato di correggere la funzione EAW sqMMFixedRisk sostituendola con una mia funzione che riporto qui di seguito:

//------ sqMMFixedRisk corretto da Riccardo

double sqMMFixedRisk (int orderMagicNumber, int orderType)
  {
   
   double LotSize=0;
  
   double _riskInPercent = RiskPercent;
   double _maximumLots = 5.0;
   
   double slSize = sqMMGetOrderStopLossDistance(orderMagicNumber, orderType) * gPointPow;


   double riskPerTrade=AccountBalance() *(_riskInPercent/100);
   
  
   se(slSize 0 && TickValue>0)
     {
      
      LotSize = MarketInfo(Symbol(),MODE_TICKSIZE) * riskPerTrade / (slSize * TickValue * MarketInfo(Symbol(),MODE_POINT) );

      int err=GetLastError();
      if(err==4013)
        { //ERR_ZERO_DIVIDE
         Verbose("Errore: divisione per zero: StopLoss:",slSize," TickValue:",TickValue," LotSize:",LotSize);
         return(-1);
        }
     }

//--- Gestione di MAXLOT e MINLOT
   double Smallest_Lot = MarketInfo(Symbol(), MODE_MINLOT);
   double Largest_Lot = MarketInfo(Symbol(), MODE_MAXLOT);

   if (LotSize Largest_Lot) LotSize = Largest_Lot;

   if(LotSize > _maximumLots) {
      LotSize = _maximumLots;
   }
//--------------------------------------------



//--- LotSize arrotondato rispetto al LOTSTEP del broker
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==1)
     {
      LotSize=NormalizzaDouble(LotSize,0);
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1)
     {
      LotSize=NormalizzaDoppio(LotSize,1);
     }
   se(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)
     {
      LotSize=NormalizzaDoppio(LotSize,2);
     }
   se(MarketInfo(Symbol(),MODE_LOTSTEP)==0.001)
     {
      LotSize=NormalizzaDoppio(LotSize,3);
     }
//--------------------------------------------

   return (LotSize);

  }
//--------------------------------------------------------------------

Utilizzandolo si può anche evitare di impostare il parametro   Lotti Decimali  e il   Tasso di cambio della valuta base  Parametri MM che diventano ininfluenti.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

9 anni fa #129667

SQ sembra avere qualche problema con il corretto dimensionamento della posizione in relazione a StopLoss / Valuta di base del conto e alla coppia negoziata, in quanto tutti questi fattori devono essere presi in considerazione per calcolare correttamente la dimensione del lotto da negoziare. Per aiutarvi, ecco il mio codice che ho perfezionato e che uso da 5 anni in MT4. Tiene conto dello SL, della valuta in cui è nominata la coppia e della valuta in cui è nominato il conto negoziato, in modo da perdere sempre l'% corretto se viene colpito uno SL. Inoltre controlla le dimensioni minime e massime consentite per i lotti e le fasi dei lotti e il margine richiesto e si assicura che il margine venga utilizzato solo fino a 73% quando viene colpito uno SL completo, in modo da non essere fermati a causa di un margine troppo basso (che sarebbe comunque un folle overtrading). Forse Mark può adattarlo per SQ.

 

Basta passargli lo SL e il numero massimo di operazioni che si aprono successivamente (io lo uso per fare una media e quando voglio perdere solo un importo specifico su tutte queste operazioni - per il trading diretto basta passargli "1"):

double GetLotSize(double TotalRiskPercentageAllTrades, double Stop_Loss, int MaximumTrades)
{
    int DigitsMulti = 1;

    se (Digits == 5 || Digits == 3)
        DigitsMulti = 10;

    Stop_Loss = Stop_Loss * DigitsMulti;
    double divided_by = 0;
    double Lotti = 0;

    se (TotalRiskPercentageAllTrades != 0)
    {
        double RiskBalance = AccountBalance() * (TotalRiskPercentageAllTrades / 100.0);
        se (MarketInfo(Symbol(), MODE_TICKSIZE) != 0 && Stop_Loss != 0)
            divided_by = MarketInfo(Symbol(), MODE_TICKVALUE) * (MarketInfo(Symbol(), MODE_POINT) / MarketInfo(Symbol(), MODE_TICKSIZE));
        se (divided_by == 0)
            Print("Gestione del denaro temporaneamente disabilitata a causa della divisione per: ", divided_by);
        altrimenti
            Lotti = RiskBalance / divided_by / Stop_Loss;
    }

    Lotti = Lotti / MaximumTrades;
    Lotti = MathMax(Lotti, MarketInfo(Symbol(), MODE_MINLOT));
    Lotti = MathMin(Lotti, MarketInfo(Symbol(), MODE_MAXLOT));
    se (MarketInfo(Symbol(), MODE_MARGINREQUIRED) != 0)
        Lotti = MathMin(Lotti, AccountEquity() / MarketInfo(Symbol(), MODE_MARGINREQUIRED) * 0.73);
    Lotti = MathCeil(Lotti / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
    Lotti = MathMax(Lotti, MarketInfo(Symbol(), MODE_MINLOT));

    return(Lotti);
}


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Julianrob

Cliente, bbp_partecipante, comunità, 54 risposte.

Visita il profilo

9 anni fa #129673

Grazie per le informazioni.

 

Ho scoperto come abilitare sia il rischio di gestione del denaro % che l'opzione di dimensione del lotto fisso nelle variabili nella codifica dell'EA. La semplice soluzione che ho utilizzato è stata quella di creare una variabile con valore booleano true/false e chiamarla "UseRiskPercent".

 

Poi ho una regola che apre l'operazione utilizzando il rischio di gestione del denaro% solo se la variabile UseRiskPercent è impostata su TRUE. Una seconda regola, che è un clone della prima, dice che se UseRiskPercent è impostato su false, per l'operazione si usa invece un lotto fisso.

 

Giuliano

0

Stai visualizzando 5 risposte - da 1 a 5 (di 5 totali)