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: 4845
Beiträge: 42777
Benutzer: 7.157
Aktive Benutzer: 92
Links: 83
Wir begrüßen unseren neuesten Benutzer: Lnx4All
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 15 Stunden
- Lnx4All
vor einer Woche
- Tagtranple...
vor einer Woche
- Albert12
vor einer Woche
- guentheral...
vor 2 Wochen
- Graf-Rotz

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.162
MA-EA befindet sich auf einem aufstrebenden Ast
Standard 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;
Angehängte Dateien
Dateityp: mq4 PRdMA_OPZ_v1.mq4 (11,6 KB, 0x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 310
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Selbst nachdem ich zweimal deinen Text gelesen habe, ist es mir immer noch nicht ganz klar was du brauchst.

Hört sich aber so als ob du wissen möchtest, wie man eine Funktion definiert.

Code:
double SuperDuperFunktion(double Wert_A, double Wert_B)
{
 return Wert_A + Wert_B;
}
Wie "OrderSend" nur halt anders... ich hoffe das Hilft.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.162
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

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--){...
Im Großen und Ganzen erklärt. Um das nicht immer wieder Alles schreiben zu müssen, wär ne eigene Funktion, bei der man bloß die jeweiligen Werte eintragen muss, ganz hilfreich.


Wie gesagt ist aber noch das Ein oder Andere unklar und ich bin auch nicht gerade der Experte für sowas.
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.162
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

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

}
Angehängte Dateien
Dateityp: mq4 PRdMA_OPZ_v2.mq4 (13,0 KB, 1x aufgerufen)
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.162
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

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);

}
Angehängte Dateien
Dateityp: mq4 PRdMA_OPZ_v2.mq4 (13,3 KB, 1x aufgerufen)
Mit Zitat antworten
  #6 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.162
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Keiner ne Idee, was da nicht stimmt? Gibts keine brauchbare Anleitung?
Mit Zitat antworten
  #7 (permalink)  
Alt vor 6 Tagen
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 570
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
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
Mit Zitat antworten
  #8 (permalink)  
Alt vor 6 Tagen
Neues Mitglied
 
Registriert seit: Sep 2021
Beiträge: 7
smilemore befindet sich auf einem aufstrebenden Ast
Standard

Funktion außerhalb OnCalculate() deklariert, Funktion brauch Datentyp, Funktionsparameter brauchen Datentyp, Semikolon vergessen

PHP-Code:
//#property strict

//#include<MovingAverages.mqh>// ?
//=============================================================================
#property version     "PRdMA_OPZ_v2.mq4"
#property description "( PR / MA ) * ?"
#property link        "daniel-rudloff@web.de"
//=============================================================================

#property indicator_chart_window// Chart-Fenster

#property indicator_buffers 1

#property indicator_color1 clrYellow// Farbe der Linie
#property indicator_width1 1

//=============================================================================

//=============================================================================================================
// G L O B A L E   E I N S T E L L U N G E N
//=============================================================================================================

input ENUM_APPLIED_PRICE Price PRICE_CLOSE;

extern int               MA_Period     6;// Zum Testen 6
extern int               MA_ChartShift 0;
input ENUM_MA_METHOD     MA_Method     MODE_SMA;
input ENUM_APPLIED_PRICE MA_Price      PRICE_CLOSE;

//=============================================================================================================
// G L O B A L E   B U F F E R
//=============================================================================================================
//=============================================================================
string IndisName "PRdMA_OPZ_v1";  // Indikatorname
//-------------------------------------------------------------------------------------------------------------

double   
Pr_Hi
,Pr_Op,Pr_Cl,Pr_Lo,Pr_ME,Pr_TY,Pr_WE,
PR,MA,

OPZ_PR,

PR_mt,PR_t,


OPZ_DIV,
OPZ_DIV_Value,
OPZ_DIV_t,
OPZ_DIV_mt,
OPZ_DIV_div,
OPZ_DIV_DivEd,
OPZ_DIV_V_mt,
OPZ_DIV_ToDiv,
OPZ_DIV_DivEd_t,


BUF_PRdMA_OPZ[]// Buffer 0

;

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

int imt;

//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){
   
// === Anzeige des Indikatornamens und der Werte
    
IndicatorShortName(IndisName);
    
IndicatorBuffers(1);// Gesamtanzahl aller Buffer
//-------------------------------------------------------------------------------------------------------------

SetIndexBuffer(0,BUF_PRdMA_OPZ);
SetIndexLabel(0,
              
"PRdMA_OPZ"
             
);// Beschreibung im Datenfenster
SetIndexDrawBegin(0,0);

}
// OnInit

//=============================================================================================================
// D E I N I T
//=============================================================================================================
void OnDeinit(const int reason){}// nothing to do here
//=============================================================================================================
// O N C A L C U L A T E
//=============================================================================================================
int OnCalculate(const int rates_total,
                const 
int prev_calculated,
                const 
datetime &time[],
                const 
double &open[],
                const 
double &high[],
                const 
double &low[],
                const 
double &close[],
                const 
long &tick_volume[],
                const 
long &volume[],
                const 
int &spread[]){
//-------------------------------------------------------------------------------------------------------------

for( i=rates_total-MA_Period-i++ ){// ?

//=============================================================================================================
// D E K L A R A T I O N   P R I C E
//=============================================================================================================

Pr_Hi=iHigh (NULL,NULL,i);
Pr_Op=iOpen (NULL,NULL,i);
Pr_Cl=iClose(NULL,NULL,i);
Pr_Lo=iLow  (NULL,NULL,i);

Pr_ME = ( Pr_Hi Pr_Lo ) / 2.0;

Pr_TY = ( Pr_Hi Pr_Cl Pr_Lo ) / 3.0;

Pr_WE = ( Pr_Hi Pr_Cl Pr_Cl Pr_Lo ) / 4.0;

// Zuweisung Price
if(Price==PRICE_HIGH    )PR=Pr_Hi;
if(
Price==PRICE_CLOSE   )PR=Pr_Cl;
if(
Price==PRICE_OPEN    )PR=Pr_Op;
if(
Price==PRICE_LOW     )PR=Pr_Lo;
if(
Price==PRICE_MEDIAN  )PR=Pr_ME;
if(
Price==PRICE_TYPICAL )PR=Pr_TY;
if(
Price==PRICE_WEIGHTED)PR=Pr_WE;

//=============================================================================================================
// D E K L A R A T I O N   M A
//=============================================================================================================

MA=iMA(Symbol(),Period(),MA_Period,MA_ChartShift,MA_Method,MA_Price,i);

//=============================================================================================================
// ?
//=============================================================================================================


if(PR<=-1.0||PR>=1.0)OPZ_PR=1.0/PR;


if( 
PR > -1.0 && PR <  1.0 ){

  
OPZ_DIV_Value PR;
  
  
OPZ_DIV_ToDiv 1.0;}

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






BUF_PRdMA_OPZ[i] =  OPZ_DIV ;



//=============================================================================================================
// E N D E   F U N K T I O N E N
//=============================================================================================================
}// for (i=ratestotal)...
//=============================================================================================================
// E N D E   I N D I
//=============================================================================================================
return(rates_total);    

}
// OnCalculate´



double OPZ_DIV(
  
  
double OPZ_DIV_Value
  
,
  
double OPZ_DIV_t
  
,
  
double OPZ_DIV_mt
  
,
  
double OPZ_DIV_ToDiv
  
,
  
double OPZ_DIV_DivEd   
               
)
{
   
int imt;

  
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 0mt-- ){
  
    
OPZ_DIV_DivEd_t OPZ_DIV_DivEd 10.0;
    
    
OPZ_DIV_DivEd OPZ_DIV_DivEd_t;
    
  }
  
  
OPZ_DIV OPZ_DIV_DivEd;

  return 
OPZ_DIV;


Sollte gehen

Liebe Grüße smilemore
Mit Zitat antworten
  #9 (permalink)  
Alt vor 5 Tagen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.162
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

@ 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?
Mit Zitat antworten
  #10 (permalink)  
Alt vor 5 Tagen
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 570
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
@ AVT
Wie soll ich den einrücken?
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.
Mit Zitat antworten
Antwort

Lesezeichen

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 04:15 Uhr.





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