Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Forex max Lot für alle Paare (http://www.expert-advisor.com/forum/showthread.php?t=6177)

sazaron 22.08.18 11:07

Forex max Lot für alle Paare
 
Hi leute,
ich will die maximale lotzahl für alle forex paare haben. leider finde ich nichts dazu in google... das problem ist, dass meine kontowährung nicht mit der währung aller forexpaare übereinstimmt bzw. es mit dann einen "not enought money error" raushaut oder halt zu wenig lots einsetzt. Z.B. bei NZD/JP meine konotwährung ist EUR. Gibts da irgendeine lösung?

hier ist der code den ich atm nutze:

int Percent =100; // % of free margin
double Free =AccountFreeMargin(); // Free margin
double One_Lot=MarketInfo(NULL,MODE_MARGINREQUIRED);// 1 lot price
double Step =MarketInfo(NULL,MODE_LOTSTEP); // Size step changed

double Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;


und es liegt nicht an der min lot bzw. max lot begrenzung.

hoffentlich kann mir einer hier weiter helfen, danke schon mal :)

MA-EA 22.08.18 12:57

Soviel ich weiß, haben einige WP andere Margin-Level als Andere WP.

Schätze mal, Du willst in % festlegen, wie viel Lots er kaufen soll. Dann musst Du das glaub ich mit MinLot() berechnen. Bzw. MinLot() in das Ganze mit einbeziehen.

Ach ja, mit jeder offenen Order verändert sich natürlich auch die FreeMargin()...

Ich hatte das irgendwann mal so versucht. Aber irgendwas war glaub ich nicht richtig. :confused:
Code:

extern bool Percent_of_Balance=true;//
extern int Units_of_1_Lot=100000;
extern double Auto_Lotsize_Perc=1.0;//

Code:

double Min_L=MarketInfo(Symbol(),MODE_MINLOT);//Mindest_Lot_Einsatz
double Max_L=MarketInfo(Symbol(),MODE_MAXLOT);//Maximaler_Lot_Einsatz

//---------------------------------------------------------------------------------------------

  if(Percent_of_Balance==true){
 
    double M_REQ=MarketInfo(Symbol(),MODE_MARGINREQUIRED);//nötige Margin für 1 Lot (100.000 Units)
    double A_BAL=AccountBalance();//momentaner Kontostand
 
//  Einheiten von 1_Lot geteilt durch Mindest_Lot, um später auszurechnen, wie viel Margin für kleinst mögliches Lot nötig ist:
    double U1L__MinL=NormalizeDouble(Units_of_1_Lot*Min_L*_Point,_Digits);

//  Margin_für_1_Lot geteilt durch Ergebnis, um raus zu finden, wie viel Margin für Mindest_Lot benötigt wird:
    double MREQ__MinL=M_REQ/U1L__MinL;

//  Kontostand geteilt durch für Min_Lot nötige Margin, um rauszufinden, wie viel Min_Lot mit Kontostand möglich sind.
    double A_BAL__MinL=A_BAL/MREQ__MinL;

//  Mit Kontostand_mögliche_Mindest_Lots geteilt durch "HP" (hundred Percent)
    double A_BAL__MinL__HP=A_BAL__MinL/100.0;

    Lots=A_BAL__MinL__HP*Auto_Lotsize_Perc;

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

if(Lots<Min_L)Lots=Min_L;
if(Lots>Max_L)Lots=Max_L;


sazaron 22.08.18 13:43

danke für die schnelle antwort! Account freemargin benutze ich, weils auch bei 50% freien margin noch ne lot zahl berechnen kann und das mit MODE_MINLOT und MODE_MAXLOT ist nicht das prob.
ich habe den titel etwas schlecht gewählt ich will 100% meines kontos in lots umrechnen egal welche währung. das problem ist, dass die verschiedenen forexpaare verschiedene währungswerte ausgeben d.h. der endwert ist nicht immer EUR sondern was ganz anderes. ich glaube nicht, dass mir hier einer weiter helfen kann ich benutze jetzt eine mischung aus zwei berechnung. wenn die 1. nicht funktioniert dann nehme ich halt die 2.. so bekomme ich keine 100% raus doch besser als nichts. mich fehlt die zeit beim scalpen jedes mal an der lot schraube zu drehen und bei 0.8 trades am tag ist es schon frustrierend, wenn man nen trade verpasst, weil die positions größe nicht passt. ich trade auf elf forexpaare, da ist es mir auch zu viel arbeit, es täglich manuel abzustimmen. Theoretisch könnte ich auch einfach die minlots nehmen doch dann würde ich zeitverlieren , die übersicht verlieren, langsamer positionen schließen und meine statistiken versauen weil ich anstatt 0.8 trades dann z.B. 8-20 trades habe z.B..

hier ist noch die andere berechnung. ka was die genau macht doch es haut mir eine tradebare lotzahl raus, wenn die andere mir nen not enought money error gibt...

double CalculateVolume()
{
double lot_min =MarketInfo(Symbol(),MODE_MINLOT);
double lot_max =MarketInfo(Symbol(),MODE_MAXLOT);
double lot_step=MarketInfo(Symbol(),MODE_LOTSTEP);
double contract=MarketInfo(Symbol(),MODE_LOTSIZE);
Print("contract "+contract);
double vol;
//--- check data
if(lot_min<0 || lot_max<=0.0 || lot_step<=0.0)
{
Print("CalculateVolume: invalid MarketInfo() results [",lot_min,",",lot_max,",",lot_step,"]");
return(0);
}
if(AccountLeverage()<=0)
{
Print("CalculateVolume: invalid AccountLeverage() [",AccountLeverage(),"]");
return(0);
}
//--- basic formula
vol=NormalizeDouble(AccountFreeMargin()*AccountLev erage()/contract,2);
//--- additional calculation
// ...
//--- check min, max and step
vol=NormalizeDouble(vol/lot_step,0)*lot_step;
if(vol<lot_min) vol=lot_min;
if(vol>lot_max) vol=lot_max;
//---
// Print("vol "+vol);
return(vol);
}

Adlerauge 22.08.18 15:13

moin,
du must den Tickvalue in Deine Berechnung mit einbeziehen. Dann kannst Du Lotgroessen berechnen, die deinem eingestellten Prozentsatz der Margin entsprechen.

MarketInfo (Symbol (), MODE_TICKVALUE));

MINLOT und MAXLOT haben damit nichts zu tun.

Raul0 23.08.18 03:34

Du möchtest eine Money Management Berechnung durchführen.

Wieviel Lots Du bei 100% Risiko kaufen kannst, ist das richtig? Dann sollte auch Dein verwendetes StopLoss mit einbezogen werden.

sazaron 23.08.18 11:52

Zitat:

Adlerauge
moin,
du must den Tickvalue in Deine Berechnung mit einbeziehen. Dann kannst Du Lotgroessen berechnen, die deinem eingestellten Prozentsatz der Margin entsprechen.

MarketInfo (Symbol (), MODE_TICKVALUE));

MINLOT und MAXLOT haben damit nichts zu tun.
ich finde nur sachen, die da einen festen stoplosswert mit einbeziehen...
ich habe auch diverse formeln damit getestet doch es kam nicht raus was passend wäre.

Zitat:

Raul0
Du möchtest eine Money Management Berechnung durchführen.

Wieviel Lots Du bei 100% Risiko kaufen kannst, ist das richtig? Dann sollte auch Dein verwendetes StopLoss mit einbezogen werden.
Ja richtig! stoploss berechne ich mit mit der lotzahl in %.
hier ist der code:

double buttontp = 0.015 ////1.5%
double buttonsl = 0.025 ////2.5%



double PointValue()
{
int Percent =100; // % of free margin
double Free =AccountFreeMargin(); // Free margin
double One_Lot=MarketInfo(NULL,MODE_MARGINREQUIRED);// 1 lot price
double Step =MarketInfo(NULL,MODE_LOTSTEP); // Size step changed

double Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;
double PipValue=(((MarketInfo(Symbol(),MODE_TICKVALUE)*po int)/MarketInfo(Symbol(),MODE_TICKSIZE))*Lots_New);
double pointValue =PipValue/10;
return(pointValue);
}




tp=Ask+(((AccountFreeMargin()*(buttontp))/PointValue()) *Point);
sl=Ask-(((AccountFreeMargin()*(buttonsl))/PointValue()) *Point);


alternativ habe ich auch ein algorythmus, dass mir die positionen bei z.b. 2% gewinn oder verlust schließt, doch finde ich zu unsicher. lags usw. könnten da einen echt arm machen.


ich habe mir gerade eine neue brechnung ausgedacht, doch die rechnet auch mit der falschen währung, glaube ich... ich erhalte den selben wert wie bei Lots_New...

double lot_min =MarketInfo(Symbol(),MODE_MINLOT);
double minlotgeld=(AccountFreeMargin()-(AccountFreeMarginCheck(Symbol(),OP_BUY,lot_min))) ;
double minlotlot=(Free/minlotgeld*lot_min);
Print("MINLOTLOT "+minlotlot);


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:02 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum