consulente esperto - domande varie - pagina 33

 

MQL4:

MODE_LOTSTEP

24

Passo per cambiare i lotti


Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));

MQL5:

SIMBOLO_VOLUME_STEP

Passo minimo per il cambio di volume per l'esecuzione dell'operazione

doppio


Print(" Step: ",SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

Quindi vi informa sul più piccolo passo verso l'alto o verso il basso nella dimensione del lotto, se è 0.01 allora i vostri lotti devono essere d'accordo con 0.01, 0.02, 0.03, 0.04 ecc.

Se fosse 0,1 allora il vostro cambiamento di dimensione del lotto dovrebbe soddisfare 0,1, poi 0,2, poi 0,3 ecc.

Quindi non capisco il vostro:

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Forse intendi un diverso passo di lotto?

Normalmente non cambiereste il valore perché è fisso per ogni simbolo.

 
Max Enrik:
// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Le cose possono diventare confuse se si cambia il valore di una variabile dal nome intuitivo. Suggerirei che lotstep sia sempre lotstep, nient'altro.

Che ne dici di qualcosa come questo?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edit: scusa, ho appena visto la risposta di Marco. Sono d'accordo per quanto riguarda la denominazione di lotstep.
 

Marco vd Heijden:

Quindi non capisco il vostro:

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Forse intendi un passo di lotto diverso?
Normalmente non cambieresti il valore perché è fisso per ogni simbolo.

Sì! Intendo un passo di lotto diverso, quindi quando la dimensione del lotto ha raggiunto la dimensione del lotto 1.00 per EURUSD. Allora ho bisogno di aumentare la dimensione del lotto di 1.00. Prima che la dimensione del lotto raggiunga 1.00 - la dimensione del lotto aumenta di 0.01, 0.02 ecc. (quale voglio) - ma dopo che la dimensione del lotto ha raggiunto 1.00 - allora la dimensione del lotto aumenta di 1.00, 2.00, 3.00, ecc.
Questo è ciò che voglio fare in questo sotto-argomento.

Grazie ancora.

 
honest_knave:

Le cose possono confondersi se si cambia il valore di una variabile dal nome intuitivo. Suggerirei che lotstep sia sempre lotstep, nient'altro.
Che ne dici di qualcosa come questo?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Modifica: scusa, ho appena visto la risposta di Marco. Sono d'accordo per quanto riguarda la denominazione di lotstep.

( Ho appena cambiato poco non - ... lotstep : lotstep*100 - ...? lotstep : lotstep*10 )

Sì! Nel mio codice originale le cose si confondono.
Dopo il tuo grande aiuto, ho risolto il mio problema. Grazie mille.

Inoltre vorrei che la dimensione del lotto aumentasse in questo modo.
Quindi la dimensione del lotto aumenta così 0.99, 1.00, 1.01, 1.11.
Ma ho bisogno di questo 0.99, 1.00, 1.10, 1.20 ecc.

Grazie in anticipo.

 

Penso che 0.99, 1.00, 1.01, 1.02. sarebbe l'idea migliore.

Attieniti al più piccolo passo disponibile, credo.

Perché vuoi fare questi passi ULTRA GRANDI?

Avete provato?

Per favore, provate.
 
Marco vd Heijden:

Penso che 0.99, 1.00, 1.01, 1.02. sarebbe l'idea migliore.
Attieniti al più piccolo passo disponibile, credo.
Perché vuoi fare questi passi ULTRA GRANDI?
Avete provato?

Per favore, provate.

Ho già provato, penso che se ho bisogno di raggiungere la dimensione del lotto 5.00 dovrei 40 volte cliccare il pulsante lot plus ( + ctrl ).

 

Wow e perché cinque?

Puoi semplicemente usare + e - al posto di *

lotsize=lotsize+0.1;
lotsize=lotsize-0.1;

Ma c'è una linea nel mio robot che lo salva dalla distruzione totale ed è questa:

static input double lotsmax=1;// Max Lots (please respect the setting)
 
Marco vd Heijden:

Ma c'è una linea nel mio robot che lo salva dalla distruzione totale ed è questa:

Questo è assolutamente vero, anche ovviamente io rispetto questa impostazione.

Ma questo è solo un problema - voglio dire che posso modificarlo in qualsiasi momento.
Forse ho bisogno di un po' di esperienza sulla dimensione del lotto.

Penso che questo sotto-argomento possa essere chiuso per ora.

Grazie @Marco vd Heijden e @honest_knave

#Lot Step - Chiuso

 

#Lot Size Max - Open

@Marco vd Heijden- grazie ancora per il tuo ultimo commento, che mi ha ispirato a scrivere questa parte di codice per i miei EA. (Ho appena smesso di scrivere altre funzioni - che cerco di scrivere questa prima di altre)

Quindi, come di solito provo a testare qualcosa per la dimensione del lotto max.
Quando la dimensione del lotto è migliore di quella massima, la funzione di stampa non mi permette di conoscere la modalità di trading.
Dopo aver risolto questo problema, ho bisogno di mettere questa funzione Vendere e comprare le funzioni del pulsante.

Q: Come posso fare in modo che la funzione di stampa mi permetta di conoscere la modalità di negoziazione? (- la dimensione del lotto è meglio della dimensione massima del lotto o meno di essa)
Q: Questo metodo è utile per la dimensione del lotto max?

Grazie in anticipo.

void example()
  {
   string trademode;
   ENUM_ACCOUNT_TRADE_MODE accounttype=(ENUM_ACCOUNT_TRADE_MODE) AccountInfoInteger(ACCOUNT_TRADE_MODE);

   if(accounttype==ACCOUNT_TRADE_MODE_DEMO)
     {
      switch(accounttype)
        {
         case ACCOUNT_TRADE_MODE_DEMO:
            if( lotsize > ( lotstep * lotsizemax ) ) return;
            trademode="demo";
            break;
         case ACCOUNT_TRADE_MODE_CONTEST:
            trademode="contest";
            break;
         default:
            trademode="live";
            break;
        }
     }
   Print("Trade Mode: ",trademode);
  }
 

Non c'è quello per verificare se è un conto demo o un conto live, il concorso è usato raramente.

Il lotto massimo può essere molto semplice.

//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}
Motivazione: