Heeeelp! heeeelp! - página 3

 
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.
extern int LotPercentage=10; // use 10% of balance as lot size

int start()
{

double LotInBalance=(LotPercentage/100)*AccountBalance(); // find the amount that is 10% of balance lets assume its $1000
double LotUnits=LotBalance*AccountLeverage(); // multiply this 10% balance($100) by leverage to get lot units
double 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()*/

...

return 0;

}
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.1
if(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 2

if(/*opening criteria met*/){
OrderSend(Symbol(),OP_BUY,lots,...)
}
Por favor leia os comentários que incluí no código para entender melhor.
 

NÃO FAÇA ISSO COM DINHEIRO REAL.

VOCÊ QUERÁ PERDER 10 % ou ABRIR POSIÇÃO COM 10% ? (resposta: a primeira!)

double lots;                               // <<== value is zero
double 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.

double Balance=AccountBalance();
if(Balance<=500||(Balance>500&&Balance<1000)){lots=0.1;}
if((Balance<=1500&&Balance>=1000)||(Balance>1500&&Balance<2000)){lots=0.3;}
if((Balance<=2500&&Balance>=2000)||(Balance>2500&&Balance<3000)){lots=0.5;}
if((Balance<=3500&&Balance>=3000)||(Balance>3500&&Balance<4000)){lots=0.7;}
if((Balance<=4500&&Balance>=4000)||(Balance>4500&&Balance<5000)){lots=0.9;}
if((Balance<=5500&&Balance>=5000)||(Balance>5500&&Balance<6000)){lots=1.1;}
if((Balance<=6500&&Balance>=6000)||(Balance>6500&&Balance<7000)){lots=1.3;}
if((Balance<=7500&&Balance>=7000)||(Balance>7500&&Balance<8000)){lots=1.5;}
if((Balance<=8500&&Balance>=8000)||(Balance>8500&&Balance<9000)){lots=1.7;}
if((Balance<=9500&&Balance>=9000)||(Balance>9500&&Balance<10000)){lots=1.9;}
if(Balance>10000){lots=2;} 
 
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?
 
ok arriscado em algumas situações, por exemplo, em 2012 teria perdido com turbo, mas ganho sem
 
Qual é o caminho mais seguro?
 
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
 
jameslarry:
Qual é o caminho mais seguro?
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.