|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 |
|
|||
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. 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; |
|
|||
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); } Geändert von sazaron (22.08.18 um 13:56 Uhr) |
|
|||
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. Geändert von Adlerauge (22.08.18 um 15:25 Uhr) |
|
|||
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. |
|
|||
Zitat:
ich habe auch diverse formeln damit getestet doch es kam nicht raus was passend wäre. Zitat:
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); Geändert von sazaron (23.08.18 um 12:21 Uhr) |
Lesezeichen |
|
|