Heeeelp ! heeeelp ! - page 3

 
Tout fonctionne bien si je définis une taille de lot fixe, mais je veux une taille de lot dynamique. J'ai donc conçu le script ci-dessus mais il ne fonctionne pas et je ne connais pas le problème. @raptor Je veux utiliser 100 $ du solde de 1000 $, ce qui est 0,1 lot puisque mon effet de levier est de 1:100, mais je veux que ce soit dynamique de sorte que si le système fait des profits et que le solde devient plus élevé, disons que le nouveau solde devient 2000 $, je veux qu'il ouvre maintenant des transactions avec 200 $ (0,2 lot) en respectant le pourcentage que j'ai défini, c'est-à-dire 10 %, 20 % ou n'importe quel solde/marge que j'ai défini. @ onewithzachy ordersend est correct puisqu'il fonctionne si je fixe une taille de lot fixe, c'est-à-dire
double lots=0.1;
, mais lorsque j'essaie de le dynamiser comme ci-dessous, il indique une taille de lot incorrecte.Mon compte est micro et supporte un lot minimum 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;

}
Ceci renvoie également la même erreur alors que c'est encore plus simple
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,...)
}
Veuillez lire les commentaires que j'ai inclus dans le code pour mieux comprendre.
 

NE FAITES PAS CELA AVEC DE L'ARGENT RÉEL.

VOULEZ-VOUS PERDRE 10 % ou OUVRIR UNE POSITION AVEC 10 % ? (réponse : la première !)

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 ?
 

Je veux ouvrir une position avec 10% de la même manière qu'une personne peut déposer 1000 $ sur son compte et ouvrir des positions avec 0,1 lot (10% si l'effet de levier est de 1:100).

onewithzachy vous avez raison, je l'ai modifié comme ci-dessous et cela a fonctionné mais le test de la stratégie a été moins bon, je suppose qu'il est préférable d'utiliser des lots fixes.

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:
Tout fonctionne bien si je définis une taille de lot fixe, mais je veux une taille de lot dynamique. J'ai donc conçu le script ci-dessus mais il ne fonctionne pas et je ne connais pas le problème. @raptor Je veux utiliser 100 $ du solde de 1000 $, ce qui est 0,1 lot puisque mon effet de levier est de 1:100, mais je veux que ce soit dynamique de sorte que si le système fait des profits et que le solde devient plus élevé, disons que le nouveau solde devient 2000 $, je veux qu'il ouvre maintenant des transactions avec 200 $ (0,2 lot) en respectant le pourcentage que j'ai défini, c'est-à-dire 10 %, 20 % ou n'importe quel solde/marge que j'ai défini. @ onewithzachy ordersend est correct puisqu'il fonctionne si j'ai défini une taille de lot fixe,mais lorsque j'essaie de le dynamiser comme ci-dessous, il indique une taille de lot incorrecte. Mon compte est micro et supporte un lot minimum de 0.01. De plus, ceci retourne la même erreur alors que c'est encore plus simple. Veuillez lire les commentaires que j'ai inclus dans le code pour mieux comprendre.
Je pense que vous avez une mauvaise compréhension de la façon dont les choses fonctionnent .... La marge requise et le risque ne sont pas la même chose... si vous créez une taille de position basée sur une marge requise de 100 $ et que votre transaction est perdante, vous pouvez perdre beaucoup plus, ou moins, que vos 100 $... La marge requise change avec l'effet de levier... . Le risque ne change pas.
 
Non, attends, ça a ajouté du turbo, je l'avais mal testé. Ce serait génial si je pouvais le calculer en utilisant une formule plutôt que des tonnes d'instructions if. Est-il possible de dériver une formule ?
 
ok risqué dans certaines situations, par exemple en 2012 aurait perdu avec le turbo mais gagné sans.
 
Quel est le moyen le plus sûr ?
 
jameslarry:
Non, attends, ça a ajouté du turbo, je l'avais mal testé. Ce serait génial si je pouvais le calculer en utilisant une formule plutôt que des tonnes d'instructions if. Est-il possible de dériver une formule ?
Oui, tracez vos points sur un graphique et vous pourrez alors trouver une équation linéaire de la forme y = mx + c.
 
jameslarry:
Quel est le moyen le plus sûr ?
Faire ce que... vous n'avez pas vraiment expliqué ce que vous voulez faire... bien qu'on vous ait posé des questions précises... Si vous ignorez les questions qui vous sont posées pour vous aider, vous serez très vite ignoré.