Heeeelp ! heeeelp ! - page 4

 
RaptorUK:
Pour faire quoi... vous n'avez pas expliqué ce que vous voulez faire... bien que l'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é.

turbo ou pas turbo
 
jameslarry:

turbo ou pas turbo
OK, amusez-vous... vous ne voulez pas d'aide.
 
J'ai un système qui fait ce que je voulais, je vous le posterai bientôt.
 

Puisque vous semblez vouloir le faire le plus simplement possible, étant donné que vous êtes un novice, j'ai cherché le plus facile à comprendre.

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:
Eh bien, puisque vous semblez vouloir que ce soit le plus simple possible, étant donné que vous êtes un novice, j'ai cherché le plus facile à comprendre.
Désolé Tonny, la taille du lot doit être comprise entre minlot et maxlot ET être un multiple 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:

Puisque vous semblez vouloir le faire le plus simplement possible, étant donné que vous êtes un novice, j'ai cherché le plus facile à comprendre.


Bingo ! Tonny, c'est exactement ce que je voulais, il fonctionne sur StrategyTester et incrémente automatiquement la taille du lot en maintenant le pourcentage. C'est mieux que ma précédente avec d'innombrables déclarations if, merci beaucoup à tous ! :-)
 
Je me souviens juste des maths où si a est à b alors c est à ? la formule serait (b/a)*c dans ce cas c est le solde de votre compte. Et le résultat respecte le rapport a:d, c'est-à-dire que si le résultat est d, alors a:b est égal à c:d et b:a est égal à d:a . Il suffit ensuite de placer la formule dans le double normalize pour obtenir une valeur de lot arrondie à deux décimales, au cas où les calculs renvoient plus de décimales que deux, ce que ordersend rejetterait comme une taille de lot non valide. Vérifiez ensuite si cette valeur est inférieure au lot minimum requis ; si c'est le cas, utilisez le minimum requis et si elle est supérieure au lot maximum requis, utilisez le maximum comme valeur de lot.
/* 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
 
Merci beaucoup !
 
WHRoeder:
Désolé tonny la taille du lot doit être entre minlot et maxlot ET un multiple de lotStep.

Cher WHRoeder, s'il vous plaît ne trompez pas les gens en donnant des codes qui ont juste beaucoup d'erreurs, vous n'avez pas défini l'objet ls dans le code et vous le donnez à quelqu'un pour qu'il l'utilise, s'il vous plaît arrêtez votre comportement malicieux.

 
tonny:

Etant donné que vous semblez vouloir le faire le plus simplement possible étant donné que vous êtes un novice, j'ai cherché le plus facile à comprendre.


tonny merci beaucoup pour le code que tu as donné, il a vraiment très bien marché.



Je l'ai trouvé depuis 2 jours et j'ai même disputé avec ma femme à ce sujet !


merci