assessor especializado - perguntas diversas - página 33

 

MQL4:

MODE_LOTSTEP

24

Passo para mudar de lote


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

MQL5:

PASSO_DE_SÍMBOLO_VOLUME_STEP

Etapa mínima de mudança de volume para a execução do negócio

duplo


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

Assim, ele o informa sobre o menor passo para cima ou para baixo em lotes se for 0,01, então seus lotes têm que concordar com 0,01, 0,02, 0,03, 0,04, etc.

Se for 0,1, então sua mudança no tamanho do lote terá que atender a 0,1 próximo 0,2 próximo 0,3 etc.

Portanto, eu não entendo o seu:

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

Talvez você queira dizer uma etapa de lote diferente ?

Normalmente você não mudaria o valor porque ele é fixo para cada símbolo.

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

As coisas podem ficar confusas se você mudar o valor de uma variável de nome intuitivo. Eu sugeriria que o passo de lote é sempre passo de lote, nada mais.

Que tal algo como isto?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edição: desculpe, acabei de ver a resposta de Marco. Concordo em re: nomear os passos de lote.
 

Marco vd Heijden:

Portanto, não entendo o seu:

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

Talvez você queira dizer um passo de lote diferente?
Normalmente você não mudaria o valor porque ele é fixo para cada símbolo.

Sim! Quero dizer passo de lote diferente, então quando o tamanho do lote atingiu o tamanho de 1,00 para EURUSD. Então eu preciso aumentar o tamanho do lote em 1,00. Antes do tamanho do lote chegar a 1,00 - aumento do tamanho do lote 0,01, 0,02 etc. ( qual eu quero ) - mas depois que o tamanho do lote chegou a 1,00 - então o tamanho do lote aumenta 1,00, 2,00, 3,00, etc.
Isso é o que eu quero fazer neste subtópico.

Muito mais obrigado.

 
honest_knave:

As coisas podem ficar confusas se você mudar o valor de uma variável de nome intuitivo. Eu sugeriria que o passo de lote é sempre passo de lote, nada mais.
Que tal algo como isto?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edição: desculpe, acabei de ver a resposta de Marco. Concordo com a re: muitos passos.

( Eu apenas pouco mudei não - ... ? passo de lote : passo de lote*100 - ...? passo de lote : passo de lote*10 )

Sim! Em meu código original, as coisas confundem.
Depois de sua grande ajuda, resolvo meu problema. Muito obrigado.

Também desejo que o tamanho do lote aumente desta forma.
Assim, o tamanho do lote aumenta assim 0,99, 1,00, 1,01, 1,11.
Mas eu preciso assim 0,99, 1,00, 1,10, 1,20, etc.

Obrigado de antemão.

 

Penso que 0,99, 1,00, 1,01, 1,02. seria a melhor idéia.

Cingir-se ao menor passo disponível, suponho.

Por que você quer dar estes passos ULTRA LARGOSOS?

Você já tentou?

Por favor, experimente.
 
Marco vd Heijden:

Acho que 0,99, 1,00, 1,01, 1,02. seria a melhor idéia.
Fique com o menor passo disponível, acho eu.
Por que você quer dar estes passos ULTRA LARGOSOS?
Você já tentou?

Por favor, experimente.

Já tentei, pensei que se eu precisar chegar ao tamanho de lote 5,00 eu deveria clicar 40 vezes no botão lote mais ( + ctrl ).

 

Uau e por que cinco ?

Você pode simplesmente usar + e - em vez de *

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

Mas há uma linha em meu robô que o salva da destruição total e é esta:

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

Mas há uma linha em meu robô que o salva da destruição total e é esta:

Isso é absolutamente verdade, também é claro que respeito esse cenário.

Mas isto é apenas um problema - posso ajustá-lo a qualquer momento.
Talvez eu precise de um pouco de experiência sobre esse tamanho de lote.

Acho que este subtópico poderia fechar por enquanto.

Obrigado @Marco vd Heijden e @honest_knave

#Etapa Lote - Fechado

 

#Tamanho máximo de lote - Aberto

@Marco vd Heijden- muito mais obrigado por seu último comentário, que me inspirou a escrever esta parte do código para as minhas EA's. ( Eu apenas parei para escrever outras funções - que eu tento escrever esta antes das outras )

Assim, como geralmente tento testar algo para o tamanho máximo do lote.
Quando o tamanho do lote é melhor que o tamanho máximo do lote, a função de impressão não me deixa falar sobre o modo de troca.
Depois de resolver este problema, preciso colocar esta função Funções de botão Vender e Comprar.

P: Como posso fazer a função de impressão também não me deixa falar sobre o modo de troca? ( - tamanho de lote melhor que o tamanho de lote máximo ou menos que ele )
P: Este método é útil para o tamanho máximo do lote?

Obrigado de antemão.

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);
  }
 

Não que seja para verificar se é uma conta demo ou uma conta ativa, a competição raramente é utilizada.

O lote máximo pode ser muito fácil.

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

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}
Razão: