Heeeelp! heeeelp! - página 4

 
RaptorUK:
Para fazer o que . . . você não explicou o que realmente quer fazer . . apesar de lhe terem sido feitas perguntas específicas . . se você ignorar as perguntas que lhe são feitas para que você possa ser ajudado, então você será ignorado muito rapidamente.

para turbo ou não para turbo
 
jameslarry:

para turbo ou não para turbo
OK, divirta-se... você não quer ajuda.
 
Eu tenho um sistema que faz isso como se eu quisesse que vocês fossem enviados em breve.
 

Bem, como você parece querer o mais simples possível, como você é um novato, eu procurei o mais fácil de entender.

extern double LotPerThousand=0.1;  // If you had 1000 balance what lot size would you use

int start()
{

double lots;

lots=NormalizeDouble((LotPerThousand/1000)*AccountBalance(),2);
if(lots<MarketInfo(Symbol(),MODE_MINLOT)){ lots=MarketInfo(Symbol(),MODE_MINLOT); }
if(lots>MarketInfo(Symbol(),MODE_MAXLOT)){ lots=MarketInfo(Symbol(),MODE_MAXLOT); }

...
OrderSend(Symbol(),OP_BUY,lots,...)
...

return 0;
}
 
tonny:
Bem, como você parece querer o mais simples possível, como você é um novato, eu procurei o mais fácil de entender.
Desculpe, o tamanho do lote deve estar entre minlot e maxlot E um múltiplo de lotStep.
double NormalizeLots(double lots, string pair=""){
    if (pair == "") pair = Symbol();
    double  lotStep     = MarketInfo(pair, MODE_LOTSTEP),
            minLot      = MarketInfo(pair, MODE_MINLOT);
    lots            = MathRound(lots/ls) * ls;
    if (lots < minLot) lots = 0;    // or minLot
    return(lots);
}
 
tonny:

Bem, como você parece querer o mais simples possível, como você é um novato, eu procurei o mais fácil de entender.


Bingo! Tonny, isto é exatamente o que eu queria que funcionasse no testador de estratégia e o auto incrementa o tamanho do lote mantendo a porcentagem. É melhor que o meu anterior, com inúmeras declarações de agradecimento a todos! :-)
 
Bem, eu só me lembro da matemática onde se a é para b então c é para? a fórmula seria (b/a)*c neste caso c é o saldo de sua conta. E o resultado respeita a proporção de a:d, ou seja, digamos que o resultado é d então a:b é o mesmo que c:d e b:a é a mesma proporção que d:a . Em seguida, basta colocar a fórmula em normalizar duas casas decimais para obter um valor de lote com duas casas decimais arredondadas, caso os cálculos retornem mais casas decimais do que duas, das quais o final do pedido seria rejeitado como um tamanho de lote inválido. A partir daí, verifique se este valor é inferior ao lote mínimo exigido, se assim for, use o mínimo exigido e se for superior ao máximo exigido, então use o máximo como valor de lote.
/* new value of lot would be (old lot/old balance)*new balance in this case we fix old balance at 1000 and new balance is the current balance i.e. (LotPerThousand/1000)*AccountBalance() */

lots=NormalizeDouble((LotPerThousand/1000)*AccountBalance(),2);                            // round two 2 decimal places incase more than 2 decimal places is returned
if(lots<MarketInfo(Symbol(),MODE_MINLOT)){ lots=MarketInfo(Symbol(),MODE_MINLOT); }        // if lower than minimum required use the minimum
if(lots>MarketInfo(Symbol(),MODE_MAXLOT)){ lots=MarketInfo(Symbol(),MODE_MAXLOT); }        // if higher than maximum required use the maximum
 
Muito obrigado!
 
WHRoeder:
Desculpe, o tamanho do lote deve estar entre minlot e maxlot E um múltiplo de loteStep.

querido WHRoeder, por favor, não engane as pessoas dando códigos que só têm muitos erros, você não definiu o seu objeto no código e você está dando a alguém para usá-lo, por favor, pare seu comportamento malicioso

 
tonny:

Bem, como você parece querer o mais simples possível, como você é um novato, eu procurei o mais fácil de entender.


tonny, muito obrigado pelo código que você deu, realmente funcionou muito bem



eu estava encontrando desde 2 dias e até mesmo quarentena com minha esposa sobre ele!


obrigado