|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Eigene Berechnungs-Funktion programmieren
Hallo.
Bin am Experimentieren. Bräuchte sozusagen ne eigene "Formel", um Werte, die kleiner als 1 sind, korrekt zum Multiplizieren und Dividieren zu nutzen und das Ergebnis dann wieder zurück zu rechnen. ( Wobei da das Ein oder Andere noch nicht ganz klar ist. ) Ich müsste sowas wie nen eigenen Berechnungs-Weg machen, bei dem man dann irgendwie die gewünschten Variablen benutzt. So wie z.B. OrderSend(), nur dass z.B. statt Lots Wert A, statt Ask Wert B usw. rein kommt, und das Ding am Ende nicht das Ticket, sondern eben das Ergebnis der Rechnerei zurück gibt. Das ist der Anfangs-Teil der eigenen Berechnung, ist noch lange nicht fertig. Die soll sozusagen ohne allzu großen Aufwand mit entsprechenden Variablen gefüttert werden und sozusagen als return-Wert das Ergebnis zurück geben, damit der Indi dann damit weiter arbeiten kann. Code:
if( PR > -1.0 && PR < 1.0 ){ PR_mt=PR; mt=-1; while( PR_mt > -1.0 && PR_mt < 1.0 ){ PR_t = PR_mt * 10.0; PR_mt = PR_t; mt++;} OPZ_PR = 1.0 / PR_mt; |
|
|||
Kurz gesagt sollen Werte, die kleiner als 1 sind, so oft mit 10 multipliziert werden, bis sie nicht mehr kleiner als 1 sind. Durch diesen Wert sollen dann andere Werte dividiert werden. Das Ergebnis muss dann, wenn ich mich nicht irre, erneut so oft mit 10 multipliziert werden ( Multipl.-Vorgänge mit 10.0 -1 glaube ich ), bis das Ganze wieder seinen passenden Platz in der 10er-Hirarchie der double-Werte hat. Wie gesagt ist da aber Einiges noch nicht ganz klar.
Mal angenommen, ich will 2,0 durch 0,005 teilen. Dann hieße es, 0,005 so oft * 10, bis es 5,0, also nicht mehr kleiner als 1 ist. Dann 2,0 / 5,0. Das Ergebnis wär glaub ich 0,4. Das müsste dann, wenn ich mich nicht irre, wieder so oft mit 10 multipl. werden, bis es eben passt. Das soll dann ne for-Loop machen. Code:
for( Vorgänge, wie oft 0,005 * 10 gerechnet wurde -1 ; Vorgänge > 0 ; Vorgänge--){... Wie gesagt ist aber noch das Ein oder Andere unklar und ich bin auch nicht gerade der Experte für sowas. |
|
|||
Hab beim Kompilieren 7 Fehler und keine Ahnung warum.
Code:
'OPZ_DIV' - function not defined PRdMA_OPZ_v2.mq4 157 1 ';' - unexpected token PRdMA_OPZ_v2.mq4 173 16 '=' - constant expression required PRdMA_OPZ_v2.mq4 173 13 '{' - some operator expected PRdMA_OPZ_v2.mq4 171 1 '=' - operand expected PRdMA_OPZ_v2.mq4 175 15 expression has no effect PRdMA_OPZ_v2.mq4 175 16 '}' - semicolon expected PRdMA_OPZ_v2.mq4 201 1 '}' - semicolon expected PRdMA_OPZ_v2.mq4 201 1 not all control paths return a value PRdMA_OPZ_v2.mq4 216 21 7 errors, 3 warnings 8 4 Code:
if( PR > -1.0 && PR < 1.0 ){ OPZ_DIV_Value = PR; OPZ_DIV_ToDiv = 1.0;} //------------------------------------------------------------------------------------------------------------- OPZ_DIV( OPZ_DIV_Value , OPZ_DIV_t , OPZ_DIV_mt , OPZ_DIV_ToDiv , OPZ_DIV_DivEd ) { OPZ_DIV_mt=-1; OPZ_DIV_V_mt=OPZ_DIV_Value; while( OPZ_DIV_V_mt > -1.0 && OPZ_DIV_V_mt < 1.0 ){ OPZ_DIV_t = OPZ_DIV_mt * 10.0; OPZ_DIV_mt = OPZ_DIV_t; mt++;} OPZ_DIV_DivEd = OPZ_DIV_ToDiv / OPZ_DIV_mt; for( mt ; mt > 0; mt-- ){ OPZ_DIV_DivEd_t = OPZ_DIV_DivEd * 10.0; OPZ_DIV_DivEd = OPZ_DIV_DivEd_t; } OPZ_DIV = OPZ_DIV_DivEd; return OPZ_DIV } |
|
|||
Gibts irgendwo ne gut verständliche Anleitung? Beim Kompilieren gibts immer etliche Errors.
Code:
ODIV( double ODIV_Div;// Soll dividiert werden double ODIV_ToDiv;// Wert, durch den dividiert werden soll ODIV_Div_mt , ODIV_t , ODIV_mt ; int ODIV_mt; ) ODIV(){ int ODIV_mt= -1; double ODIV_Div_mt=ODIV_Div; while( ODIV_mt > -1.0 && ODIV_mt < 1.0 ){ double ODIV_t = ODIV_mt * 10.0; ODIV_mt = ODIV_t; mt++;} ODIV_DivEd = ODIV_ToDiv / ODIV_t; for( ODIV_mt ; ODIV_mt > 0; ODIV_mt-- ){ ODIV_DivEd_t = ODIV_DivEd * 10.0; ODIV_DivEd = OIV_DivEd_t; } OPZ_DIV = OPZ_DIV_DivEd; return(ODIV); } |
|
|||
Keiner ne Idee, was da nicht stimmt? Gibts keine brauchbare Anleitung?
|
|
|||
Wenn Du Dir mal angewöhnen würdest, ordentlich eingerückten Code zu schreiben, wäre das Fehlerfinden bestimmt einfacher. AVT
|
|
|||
Funktion außerhalb OnCalculate() deklariert, Funktion brauch Datentyp, Funktionsparameter brauchen Datentyp, Semikolon vergessen
PHP-Code:
Liebe Grüße smilemore |
|
|||
@ AVT
Wie soll ich den einrücken? @ smilemore Danke. Aber 1. soll die Funktion für jede Candle zur Verfügung stehn, also muss sie ja innerhalb von OnCalculate() sein soviel ich weiß? 2. Wird da irgendwie Alles ein mal global und noch mal in der Funktion deklariert, das gibt doch Fehler, das die Variable schon deklariert wurde oder nicht? |
|
|||
Im MetaEditor unter Extras - Optionen kannst Du alles einstellen:
Bei mir ist unter Allgemein alles gewählt: Tabgröße 3 Zeichen Leerzeichen einfügen schließende Zeichen einfügen: sehr praktisch, damit man das nicht vergißt Passende Klammern markieren: wenn man den Cursor hinter eine öffnende oder vor eine schließende Klammer setzt, zeigt er die dazu gehörige "Gegen-"Klammer an. Aktuelle Zeile markieren Listennamen nach 3 Zeichen Auto Listennamen Auto Einzug: rückt bei Enter automatisch die nächste Zeile auf dieselbe Stufe wie die vorherige Zeile Auto Parameter-Info: zeigt an, welche Werte in welcher Reihenfolge als Zusatz erforderlich sind Zeilennummern anzeigen: zum schnelleren Finden von Zeilen Und unter Styler habe ich Leerzeichen pro Tab 3 und Konvertieren von Tabs in Leerzeichen, aber das ist eher ne persönliche Sache. |
Lesezeichen |
|
|