Heeeelp! heeeelp! - pagina 4

 
RaptorUK:
Per fare cosa... non hai spiegato cosa vuoi fare... nonostante ti siano state fatte domande specifiche. . . se si ignorano le domande che vengono poste in modo da poter essere aiutati allora sarete ignorati molto rapidamente.

turbo o non turbo
 
jameslarry:

turbo o non turbo
OK, divertiti . . non vuoi aiuto.
 
Ho un sistema che lo fa come volevo e ve lo posterò presto
 

Beh, dato che sembra che tu lo voglia il più semplice possibile, dato che sei un principiante, ho cercato il più facile da capire.

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:
Beh, dato che sembra che tu lo voglia il più semplice possibile, dato che sei un principiante, ho cercato il più facile da capire.
Scusa Tonny, la dimensione del lotto deve essere compresa tra minlot e maxlot E un multiplo di 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:

Beh, dato che sembra che tu lo voglia il più semplice possibile, dato che sei un principiante, ho cercato il più facile da capire.


Bingo! Tonny questo è esattamente quello che volevo, funziona su strategy tester e incrementa automaticamente la dimensione del lotto mantenendo la percentuale. E' meglio del mio precedente con innumerevoli dichiarazioni if grazie a tutti! :-)
 
Beh, ricordo solo la matematica dove se a è a b allora c è a? la formula sarebbe (b/a)*c in questo caso c è il saldo del tuo conto. E il risultato rispetta il rapporto di a:d cioè diciamo che il risultato è d allora a:b è uguale a c:d e b:a è lo stesso rapporto di d:a. Poi basta mettere la formula in normalize double per ottenere un valore di lotto arrotondato a due cifre decimali nel caso in cui i calcoli restituiscano più cifre decimali di due di cui ordersend rifiuterebbe come una dimensione di lotto non valida. Da lì controllare se questo valore è inferiore al lotto minimo richiesto, in tal caso utilizzare il minimo richiesto e se superiore al lotto massimo richiesto allora utilizzare il massimo come valore del lotto.
/* 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
 
Grazie mille!
 
WHRoeder:
Scusa Tonny, la dimensione del lotto deve essere compresa tra minlot e maxlot E un multiplo di lotStep.

caro WHRoeder, per favore non ingannare le persone dando codici che hanno solo un sacco di errori in esso, non hai definito l'oggetto ls nel codice e lo stai dando a qualcuno per usarlo, per favore ferma il tuo comportamento malizioso

 
tonny:

Beh, dato che sembra che tu lo voglia il più semplice possibile, dato che sei un principiante, ho cercato il più facile da capire.


tonny grazie mille per il codice che hai dato, ha davvero funzionato molto bene



l'ho trovato da 2 giorni e ho anche litigato con mia moglie!


grazie