double LotSize( int type, double LotRisk, int SL ) { // int znakov_lot=0; double lot_min = MarketInfo( Symbol(), MODE_MINLOT ); double lot_max = MarketInfo( Symbol(), MODE_MAXLOT ); double lot_step = MarketInfo( Symbol(), MODE_LOTSTEP ); double lotcost = MarketInfo( Symbol(), MODE_TICKVALUE ); double lot = 0.0; double dollarsPerPip = 0.0; lot = AccountBalance()*LotRisk/100.0; dollarsPerPip = lot/SL; // if (lot_min<2) {znakov_lot=0; if (lot_min<0.2) {znakov_lot=1; if (lot_min<0.02) {znakov_lot=3; if (lot_min<0.002) {znakov_lot=4; }}}} lot = NormalizeDouble( dollarsPerPip/lotcost, 2 ); lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step; if ( lot < lot_min ) lot = lot_min; if ( lot > lot_max ) lot = lot_max; if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 ) { Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." ); return(-1); } return( lot ); }Die Berechnung des Lots auf den % der Einlage für einen bestimmten Abstand von Pips. d.h. "um 20% der Einlage in 10 Pips = Sie brauchen ?lot" ist die Funktion dieser Frage und zählt
Das hier ist viel besser, denn hier gibt es keine Hebelwirkung. Ich mag sehr die Berechnung des Lots für den Prozentsatz der Einlage für einen gegebenen Abstand von Pips. z.B. "um 20% der Einlage in 10 Pips abzuziehen = Sie brauchen ?Lot" fragt diese Funktion und berechnet
Meiner Meinung nach sollte die Hebelwirkung bei der Berechnung der Partien berücksichtigt werden.
1) Wenn die Hebelwirkung nicht berücksichtigt wird, bedeutet dies, dass der TS nicht in der Lage ist, große Gewinne zu erzielen.
2) Wenn die Einlage bereits groß genug ist, wird die Hebelwirkung reduziert (bei meiner Brokerfirma automatisch), so dass der Fehler "Falsches Volumen" erscheint.
Es ist ein Druckmittel, kein Gummi.
P.S.: Dies ist mein IMHO
> Keine Berechnung der Hebelwirkung
Meiner Meinung nach sollte die Hebelwirkung in die Losberechnung einbezogen werden.
1) Wenn keine Hebelwirkung vorhanden ist, bedeutet dies, dass der TS nicht in der Lage ist, einen großen Gewinn zu erzielen.
2) Wenn die Einlage bereits groß genug ist, verringert DT die Hebelwirkung (bei meiner Brokerfirma automatisch), so dass ein Fehler "Falsches Volumen" erscheint.
P.S. Es ist meine IMHO
Betrachten Sie statt der Hebelwirkung die Kosten für einen Tick. Bei einer Hebelwirkung von 1k1 ist ein Tick nicht teuer (sagen wir 1 Cent), bei 1k 500 ist er teuer (5 Pfund). D.h. das System funktioniert gut mit jeder Hebelwirkung, hier ist eine andere Art der Berechnung, die mir optimaler und richtiger erscheint.
Ihr Maklerunternehmen wird automatisch auf eine andere Hebelwirkung für Sie umstellen.
... müssen Sie immer noch die Schulter benutzen ...
lot = AccountEquity()*0.01*Risk / MarketInfo(Symbol(), MODE_MARGINREQUIRED);
Roger war in dieser Angelegenheit sehr hilfreich, wofür ihm ein besonderer Dank gebührt: !!!!
Ich habe es leicht überarbeitet, so dass die Kontowährung von mir selbst bestimmt werden kann
int Percent=10; string Valdepo=AccountCurrency(); int start() { double Lot,MinLots,MaxLots; int lotdig; if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)lotdig=2; else lotdig=1; if(Valdepo=="USD") { if(StringSubstr(Symbol(),0,3)=="USD")Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); else if(StringSubstr(Symbol(),3,3)=="USD")Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/Ask/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); else { double pr=MarketInfo(StringSubstr(Symbol(),0,3)+"USD",MODE_ASK); if(pr!=0)Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/pr/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); else Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); } } if(Valdepo=="EUR") { if(StringSubstr(Symbol(),0,3)=="EUR")Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); else { pr=MarketInfo("EUR"+StringSubstr(Symbol(),0,3),MODE_BID); if(pr!=0)Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()*pr/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); else Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig); } } MinLots=MarketInfo(Symbol(),MODE_MINLOT); MaxLots=MarketInfo(Symbol(),MODE_MAXLOT); if(Lot < MinLots) Lot = MinLots; if(Lot > MaxLots) Lot = MaxLots; return(0); }
Gibt es keine anderen Kontowährungen? ;-)
Und die Risiken werden nicht berücksichtigt? Auch bei dieser Option wird nur die Höhe der Einlage berücksichtigt und das Risiko (in % der Einlage) bei der Auszahlung ignoriert. Als ob man beim Öffnen der Tür die Richtung vom ersten bis zum letzten Moment erraten würde.
nutzlose Funktion, außerdem mit Fehlern...
if(Lot < MinLots) Lot = MinLots;
Was ist das? Nicht genug Geld noch offen?
Wenn wir 100 Pfund, einen Hebel von 100 und ein 100%iges Risiko haben, d.h. wir öffnen weit, was bekommen wir?
if(StringSubstr(Symbol(),0,3)=="USD") Lot=NormalizeDouble(AccountFreeMargin()*Percent*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
Partie = 100 * 100 * 100 / 100 / 100 = 100
Ich habe nichts verwechselt ? für 100 Pfund ist es unwahrscheinlich, dass viele 100 auf ein Paar öffnen können ...
Wenn wir 100 Pfund, einen Hebel von 100 und ein Risiko von 100 % haben, d. h. wir eröffnen voll, was bekommen wir dann?
Partie = 100 * 100 * 100 / 100 / 100 = 100
ich habe nichts verwechselt? für 100 Pfund ist es unwahrscheinlich, dass viele 100 auf ein Paar öffnen können ...
Natürlich ist die echte Zahl 100*100*100/100/100000=0,1, wenn man sie verwechselt.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
Roger, einer der Programmierer, hat mir kürzlich die Augen geöffnet, dass ich meine Funktion zur Berechnung von Losen in % geschrieben habe.
meine Funktion ist die folgende:
double GetSizeLot() //Функция возвращает значение лотов,
{ //если включен ММ то значение лотов,
double lots,MD,RM,MinLots,LotSize; int lotsdigit; //вычисляется путем:Свободные средства*Risk
LotSize = MarketInfo(Symbol(), MODE_LOTSIZE); //поделить на стоимость одного лота
MD = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); //А также вычисляет колличество знаков
if(MD==0.01) lotsdigit=2; //присваивает значения максимума лотов
if(MD==0.1) lotsdigit=1;
if(MM>1) {lots=NormalizeDouble((AccountFreeMargin()*MM/LotSize),lotsdigit);Lot=lots;}
else lots=Lot;
MinLots=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2);
if(lots < MinLots) lots = MinLots;
if(lots > MaxLot) lots = MaxLot;
return(NormalizeDouble(lots,2));
}
Ich sollte die Hebelwirkung und den aktuellen Preis verwenden,
Ich habe versucht, es mit Expert Advisors zu überprüfen, aber sie hatten alle die gleiche Funktion,
Wo liegt die Wahrheit?
Ich möchte Sie um die richtige Funktion für die Berechnung des Loses in % bitten!