Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43265
Benutzer: 7.222
Aktive Benutzer: 72
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 308
Gesamt: 308
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 21.07.13
Gesperrter Benutzer
 
Registriert seit: Jun 2013
Beiträge: 7
L0rd befindet sich auf einem aufstrebenden Ast
Standard lots an schritweite anpassen

Hallo,

ich bin bei JFD und da sind nur lots in 0,05 Schritten möglich also z.B. so
0,40
0,45
0,50
0,55
0,60
0,65
usw...

bis jetzt habe ich das umgegangen in dem ich bis auf eine stelle hinter dem Komma gerundet habe

PHP-Code:
lot=NormalizeDouble(lot,1); 
da kriege ich z.B. so was raus
0,4
0,5
0,6

die Schritte sind ziemlich grob, und habe mir folgendes zum "Aufrunden" gebastelt. Ab x,x3 bis x,x7 wird auf x,x5 gerundet usw.
PHP-Code:
lot=NormalizeDouble(lot,2);

double rest=lot 0.05;

if (
rest == 0.01lot=lot-0.01;
if (
rest == 0.02lot=lot-0.02;
if (
rest == 0.03lot=lot+0.02;
if (
rest == 0.04lot=lot+0.01;
if (
rest == 0.06lot=lot-0.01;
if (
rest == 0.07lot=lot-0.02;
if (
rest == 0.08lot=lot+0.02;
if (
rest == 0.09lot=lot+0.01
doch die Freude war kurz, da das Problem dabei ist, dass "%" Operator nur mit int Zahlen umgehen kann.

Hat jemand eine Idee wie man das lösen könnte ?
Gibts ein Befehl dass die letzte Stelle einer double Zahl auslesen kann ?

danke
  #2 (permalink)  
Alt 22.07.13
Premium Mitglied
 
Registriert seit: Mar 2013
Beiträge: 332
feelfree befindet sich auf einem aufstrebenden Ast
Standard

Hi Lord,

du kannst MathRound für deine Berechnung und korrekte Rundung nutzen.
MathRound - MQL4 Documentation

Das Ergebnis kannst du dann ja durch 10 teilen um die Dezimal-Lotsteps zu ermitteln.

Grüße
Dan
  #3 (permalink)  
Alt 22.07.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

@L0rd,

Ähm, wo liegt denn eigentlich das Problem?
Wenn der Broker nur Schritte in 0,05 Lot anbietet, dann ist das halt so Undank muß damit leben und traden oder man wechselt zu einem Broker der das in 0,01 Schritten anbietet. Mir ist ehrlich gesagt noch unklar was Du erreichen wolltest.

Ich vermute! mal, dass Du z.B. 0,43 Lot per Programm errechnet hast und willst jetzt die am dichtesten an den Lotsteps liegende Lotzahl ermitteln, um die Order öffnen zu können.
Willst Du die zweite Kommastelle auslesen!!, dann wandelt man die Zahl in einen String um, läßt die letzte Stelle auslesen. Ratz fatz, ist sie 0 oder 5 ist alles gut. Ist sie 1 oder 2 wird auf die erste Kommastelle abgerundet, ist sie 3, 4, 6 oder 7 wird sie mit einer 5 substituiert und ist sie 8 oder 9 dann wird einfach auf die erste Stelle nach dem Komma aufgerundet. Sollte mit der 5 substituiert werden muß danach der String wieder in eine Double mit 2 Kommastellen umgewandelt werden und fertig ist die Laube.

traderdoc
  #4 (permalink)  
Alt 22.07.13
Gesperrter Benutzer
 
Registriert seit: Jun 2013
Beiträge: 7
L0rd befindet sich auf einem aufstrebenden Ast
Standard

@ feelfree
wenn es nur Runden währe...

@traderdoc
du hast genau richtig verstanden. Irgendein lot-wert (mit 2 Nachkommastellen) wird errechnet und soll so gerundet werden, dass das Ergebnis auch 2 Nachkommastellen hat und durch 0,05 teilbar(ohne Rest) ist. D.h. letzte Nachkommastelle kann nur 0 oder 5 sein.

Bis jetzt (wie gesagt)hab ich dem Problem ausgewichen durch "Abschneiden" der letzten der zwei Nachkommastellen.

Als ich das Thema eröffnet habe wollte ich noch zu meiner Frage " ... ohne Broker zu wechseln" hinzufügen Leider habe ich noch keine Zeit um alternative zu JFD zu finden, hier in Forum hat mir auch noch keiner was empfohlen. JFD ist halt schnell bei Orderausführung, das ist bei meiner Strategie überlebenswichtig, deswegen muss ich bei denen erstaml bleiben.
  #5 (permalink)  
Alt 22.07.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von L0rd Beitrag anzeigen
@traderdoc
du hast genau richtig verstanden. Irgendein lot-wert (mit 2 Nachkommastellen) wird errechnet und soll so gerundet werden, dass das Ergebnis auch 2 Nachkommastellen hat und durch 0,05 teilbar(ohne Rest) ist. D.h. letzte Nachkommastelle kann nur 0 oder 5 sein.
Na ja, dann hast Du doch jetzt die Methode, um es richtig zu machen.

Viel Erfolg!

traderdoc
  #6 (permalink)  
Alt 22.07.13
Gesperrter Benutzer
 
Registriert seit: Jun 2013
Beiträge: 7
L0rd befindet sich auf einem aufstrebenden Ast
Standard

Hallo nochmal,

das mit stringumwandeln ist mir zu kompliziert und kostet rechenleistung, deswegen würde ich mit der Lösung nicht anfangen und was eleganteres suchen.

... und bin auf Funktion MathMod() gestossen die mir Operator "%" ersetzt und für double eignet:

PHP-Code:
double lot=1.23;
double rest=MathMod(lot,0.05);

Print(
"lot am Anfang ",lot," rest ",rest);

if (
rest==0.01lot=lot-0.01;
if (
rest==0.02lot=lot-0.02;
if (
rest==0.03lot=lot+0.02;
if (
rest==0.04lot=lot+0.01;

Print(
"lot am Ende ",lot); 
in dem Beispiel ist rest 0.03, deswegen um auf 1.25 aufzurunden addiere ich 0.02 dazu.
Hacken tuts aber leider bei ifs, denn lot am Ende bleibt genau so gross wie am Anfang, deswegen denke ich, dass if Abfrage nichts tut, ich sehe aber nicht wieso
Könnt Ihr bitte kucken, ich komm einfach nicht drauf
  #7 (permalink)  
Alt 22.07.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja ja, immer wieder dasselbe, mit dem Vergleich von double-Werten.

Da fehlt schlicht die Zeile:

rest = NormalizeDouble(rest, 2);

Viel Spaß

traderdoc

PS. Die Variante mit dem String habe ich Dir nur geschrieben, weil Du die 2. Stelle nach dem Komma unbedingt auslesen wolltest und das geht am schnellsten über den String.
  #8 (permalink)  
Alt 22.07.13
Gesperrter Benutzer
 
Registriert seit: Jun 2013
Beiträge: 7
L0rd befindet sich auf einem aufstrebenden Ast
Standard

danke ! es funktioniert !
hätte ich nie gedacht, denn Print hat auch 2 Nachkommastellen ausgegeben und mehr sind da auch nicht möglich. Werden warscheinlich mit 00000000 ausgefüllt in Wirklichkeit, deswegen hat vergleich nicht hingehauen.

@traderdoc es war auch kein Vorwurf oder Kritik, wenn, dann an mich selbst.

@feelfree durch dich bin ich auf Funktion MathMod() aufmerksam geworden, da ich Dokumentation für MathRound angeschaut habe.

Danke euch und VIEL ERFOLG !

Übrigens in Theorie das mit 0,05 bringt mir 6% mehr, habe eben getestet.
Thema geschlossen

Lesezeichen

Stichworte
lot, lot erhöhrn, lots, lots anpassen, lots erhöhen, lots schritt, mql4, programmierung, programmierung metatrader

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




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





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------