Tudo funciona bem se eu definir um tamanho de lote fixo, mas eu quero um tamanho de lote dinâmico. Então eu pensei no roteiro acima, mas não funciona e não conheço o problema. @raptor eu quero usar $100 do saldo de $1000 que eu entendo ser 0,1 lote já que minha alavancagem é 1:100 mas eu quero que seja dinâmico para que se o sistema lucrar e o saldo se tornar maior digamos que o novo saldo se torne $2000 eu quero que ele agora abra negociações com $200(0,2 lote) respeitando a porcentagem que eu estabeleci, ou seja, 10%, 20% ou qualquer um do saldo/margem que eu estabeleci. @ onewithzachy orderend está bem, uma vez que funciona se eu definir o tamanho fixo do lote, ou seja,
double lots=0.1;
, mas quando tento dinamizá-lo como abaixo, diz o tamanho errado do lote.Minha conta é micro e suporta lote mínimo de 0,01.
externint LotPercentage=10; // use 10% of balance as lot sizeint start()
{
double LotInBalance=(LotPercentage/100)*AccountBalance(); // find the amount that is 10% of balance lets assume its $1000double LotUnits=LotBalance*AccountLeverage(); // multiply this 10% balance($100) by leverage to get lot unitsdouble lots=NormalizeDouble((LotUnits/100000),2); // expected to return 0.1/* divide this lot units by 100,000(standard lot size units) and normalize to 2 decimal places to get something like 0.1 if account balance is say $1000 for use in ordersend()*/
...
return0;
}
Também devolve o mesmo erro enquanto é ainda mais simples
double lots;
double Balance=AccountBalance();
if(Balance<=500){lots=0.1;} // If my account has $500 or less the lot will be 0.1if(Balance<1500&&Balance>1000){lots=0.3;}
if(Balance<2500&&Balance>2000){lots=0.5;}
if(Balance<3500&&Balance>3000){lots=0.7;}
if(Balance<4500&&Balance>4000){lots=0.9;}
if(Balance<5500&&Balance>5000){lots=1.1;}
if(Balance<6500&&Balance>6000){lots=1.3;}
if(Balance<7500&&Balance>7000){lots=1.5;}
if(Balance<8500&&Balance>8000){lots=1.7;}
if(Balance<9500&&Balance>9000){lots=1.9;}
if(Balance>10000){lots=2;} // If account balance if over 10000 lot is 2if(/*opening criteria met*/){
OrderSend(Symbol(),OP_BUY,lots,...)
}
Por favor leia os comentários que incluí no código para entender melhor.
VOCÊ QUERÁ PERDER 10 % ou ABRIR POSIÇÃO COM 10% ? (resposta: a primeira!)
double lots; // <<== value is zerodouble Balance=AccountBalance();
if(Balance<=500){lots=0.1;} // What the lots if Balance > 500 && <= 1000 ?if(Balance<1500&&Balance>1000){lots=0.3;} // read this carefully : if balance bigger than but not equal with 1000// AND balance also smaller but not equal than 1500.// Question : what's the lot if balance equal with 1000 and 1500 ?
Quero abrir posição com 10% da mesma maneira que alguém pode depositar $1000 em sua conta e abrir posições com 0,1 lote (10% se a alavancagem for 1:100).
Com a ajuda dezachy você está certo, eu modifiquei para o abaixo e funcionou, mas o teste de estratégia saiu mais pobre, acho que é melhor usar lotes fixos.
jameslarry: Tudo funciona bem se eu definir um tamanho de lote fixo, mas eu quero um tamanho de lote dinâmico. Então eu pensei no roteiro acima, mas não funciona e não conheço o problema. @raptor eu quero usar $100 do saldo de $1000 que eu entendo ser 0,1 lote já que minha alavancagem é 1:100 mas eu quero que seja dinâmico para que se o sistema lucrar e o saldo se tornar maior digamos que o novo saldo se torne $2000 eu quero que ele agora abra negociações com $200(0,2 lote) respeitando a porcentagem que eu estabeleci, ou seja, 10%, 20% ou qualquer um do saldo/margem que eu estabeleci. @ onewithzachy orderend está bem, uma vez que funciona se eu definir o tamanho fixo do lote, ou seja,mas quando eu tento dinamizá-lo como abaixo ele diz o tamanho errado do lote. Minha conta é micro e suporta um lote mínimo de 0,01. Também isto retorna o mesmo erro, enquanto que seu ainda mais simplesPor favor leia os comentários que eu incluí no código para entender melhor.
Acho que você tem um grande mal-entendido sobre como as coisas funcionam ... Exigência de margem e risco não são a mesma coisa . . . se você criar um tamanho de posição baseado em uma exigência de margem de $100 e seu comércio perder, você pode perder muito mais, ou menos, do que seus $100 . . A exigência de margem muda com alavancagem . . O risco não.
Sem esperar, acrescentou algum turbo que eu havia testado erroneamente. Seria ótimo se eu pudesse calculá-lo usando uma fórmula em vez de toneladas de se declarações. É possível derivar uma fórmula?
jameslarry: Sem esperar, acrescentou algum turbo que eu havia testado erroneamente. Seria ótimo se eu pudesse calculá-lo usando uma fórmula em vez de toneladas de se declarações. É possível derivar uma fórmula?
Sim, trace seus pontos em um gráfico e então você pode elaborar uma equação linear para ela na forma y = mx + c
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 login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
NÃO FAÇA ISSO COM DINHEIRO REAL.
VOCÊ QUERÁ PERDER 10 % ou ABRIR POSIÇÃO COM 10% ? (resposta: a primeira!)
Quero abrir posição com 10% da mesma maneira que alguém pode depositar $1000 em sua conta e abrir posições com 0,1 lote (10% se a alavancagem for 1:100).
Com a ajuda dezachy você está certo, eu modifiquei para o abaixo e funcionou, mas o teste de estratégia saiu mais pobre, acho que é melhor usar lotes fixos.
Tudo funciona bem se eu definir um tamanho de lote fixo, mas eu quero um tamanho de lote dinâmico. Então eu pensei no roteiro acima, mas não funciona e não conheço o problema. @raptor eu quero usar $100 do saldo de $1000 que eu entendo ser 0,1 lote já que minha alavancagem é 1:100 mas eu quero que seja dinâmico para que se o sistema lucrar e o saldo se tornar maior digamos que o novo saldo se torne $2000 eu quero que ele agora abra negociações com $200(0,2 lote) respeitando a porcentagem que eu estabeleci, ou seja, 10%, 20% ou qualquer um do saldo/margem que eu estabeleci. @ onewithzachy orderend está bem, uma vez que funciona se eu definir o tamanho fixo do lote, ou seja,mas quando eu tento dinamizá-lo como abaixo ele diz o tamanho errado do lote. Minha conta é micro e suporta um lote mínimo de 0,01. Também isto retorna o mesmo erro, enquanto que seu ainda mais simplesPor favor leia os comentários que eu incluí no código para entender melhor.
Sem esperar, acrescentou algum turbo que eu havia testado erroneamente. Seria ótimo se eu pudesse calculá-lo usando uma fórmula em vez de toneladas de se declarações. É possível derivar uma fórmula?
Qual é o caminho mais seguro?