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: 4973
Beiträge: 43248
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Like Tree33Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #21 (permalink)  
Alt 17.01.18
Auf eigenen Wunsch deaktiviert
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für deine Antwort und den Link Adlerauge. Zur gegebener Zeit werde ich die Stunden mal investieren.

Einen groben Überblick zu C und entsprechende Tutorials habe ich bereits gesehn, jedoch kenn ich dadurch natürlich nicht alle Möglichkeiten.

Und eines sei klar gesagt, so geht es mir jedenfalls, theoretisch angeeignetes Wissen zu C ist eine Sache, die praktische Umsetzung in MQL4 ist nochmal eine andere.

Ich suche daher weiterhin nach einer Lösung für mein obiges Problem.

Wenn ich mit AccountBalance den Kontostand auslese, kann ich dadurch meine Lotsize berechnen.

Ich suche aber einen Weg den jeweiligen Kontohöchststand zur Berechnung zu nutzen und somit nutzt mir AccountBalance alleine nichts. Ich müsste die dort ausgelesenen Werte irgendwie Speichern um dann den Höchstwert rauszufinden.

Ich könnte die Werte eventuell in einem Array speichern?

Wenn ja, kann mir dann bitte irgendwer mal kurz sagen wie eine entsprechende Codezeile auszusehen hat?
  #22 (permalink)  
Alt 17.01.18
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

arrays benötigst du nur, wenn du mehrere Werte abspeichern und aufrufen möchtest, ansonsten ist das eher unnötig, hängt natürlich auch davon ab was du machen möchtest, deswegen kann man das nicht pauschalisieren.

von der Logik her ganz einfach:
Code:
double Kontostand  = AccountBalance();
double Höchststand = 0.0;

if(Kontostand > Höchststand)
{
   Höchststand = Kontostand;
}
else
{
   Höchststand = Höchststand ;
}
sollte so klappen, musst natürlich schauen dass du das vernünftig in deinem Code platzierst.
  #23 (permalink)  
Alt 17.01.18
Auf eigenen Wunsch deaktiviert
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

Hallo Trader6666, freut mich das du wieder vorbei schaust!

Ich habe es mittlerweile ganz genau so gelöst, es funktioniert auch soweit ganz gut.

Für meine Zwecke reicht die Variante aber auf lange Sicht sehe ich da zwei Probleme.

1. laufen mehrere EAs auf einem Konto kann man nicht mehr so einfach den Kontostand verwenden sondern müsste irgendwie schaun das man jedem EA einen eigenen Kontostand zuweißt.

2. und das ist eigentlich der derzeit relevanterer Punkt für mich. Da der Kontohöhststand nicht gespeichert wird, wären die Daten weg wenn der EA mal abstürzt und nicht mehr läuft oder?

Als Beispiel Kontohöhstand steht bei 1000 Euro, dann macht man 100 Verlust und der EA stürzt ab. Wenn man ihn dann wieder auf den Chart zieht wären diese 900 Euro der Höhststand.

Oder täusche ich mich da?
  #24 (permalink)  
Alt 18.01.18
Auf eigenen Wunsch deaktiviert
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

So jetzt muss ich auch nochmal eine dumme Frage stellen.

Ich habe in der OnTick Funktion die OrderSend Funktion und möchte die LotSize Berechnung ausserhalb der OnTick Funktion berechnen lassen.

Code:
OnTick
{
ShortOrder1=OrderSend(NULL,OP_SELLSTOP,LotSize,VerkaufPreis,NULL,KaufPreis,0,"DAX_H1_StrategieShort",MagicNummer,0,clrRed);
}

double LotSize
       {
       (10);
       }
Die 10 ist natürlich nur ein Platzhalter, dort folgt später eine größere Berechnung.
Allerdings klappt das so nicht, kann mir jemand sagen was ich anders machen muss damit ich Berechnungen aus der OnTick Funktion auslagern kann?
  #25 (permalink)  
Alt 19.01.18
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

das ist der Moment wo du dich einlesen solltest in das Thema Funktionen.


OnTick Funktion bedeutet, dass der Code der in der OnTick enthalten ist, bei jedem Tick ausgeführt wird. Deshalb sollte jede Aktion, die nicht mit jedem Tick gemessen/gebraucht wird, auch dort verschwinden. So läuft das ganze auch reibungsloser.


Code:
bool Funktion()
{

return();
}

double Funktion()
{

return();
}

int Funktion()
{

return();
}
Jeder dieser Funktionen gibt dir einen Rückgabewert zurück, sprich eine Information die du benötigst. Du musst halt wissen was du benötigst.
In der OnTick, werden idR. die Signale ermittelt, wenn sich eines ergibt, dann rufe eben eine Funktion auf, die einen Trade setzt, denn dann brauchst du Sie ja auch nur.

Code:
OnTick()
{

    if(Signal == true)
      {
         Order_oeffnen();
       }

}

void Order_oeffnen()
{

    Lots_ermitteln();
 
    OrderSend(......Variable Lotsize bei Orderlots einsetzten....);

}


double Lots_ermitteln()
{

   //Lotsize ermitteln und in einer Variablen speichen....

return(Varible für die Lotsize);
}
am bequemsten ist es die Lotsize Variable Global zu speichern, ist aber natürlich jedem überlassen wie er es händelt.
Lampe likes this.
  #26 (permalink)  
Alt 19.01.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich habe das nun schon oft geschrieben. Das Erlernen der Sprache MQL4/5 ist relativ einfach, vorausgesetzt, es bestehen gewisse Grundkenntnisse in der Programmierung allgemein und der feste Wille mit fast eigenene Kräften diese Sprache zu erlernen. Warum aus eigenen Kräften? Nicht weil dem User hier keine Hilfe zuteil kommen soll, sondern, weil ich selbst erfahren habe, dass das eigene Beschäftigen mit bereits vorhandenem und funktionierenden Code die beste Schule für einen selbst darstellt. Das in Verbindung mit der Hilfe über F1 sollte nahezu schon ausreichen, um relativ schnell voranzukommen.

Solch eine Fragestellung, wie eine Funktion in den Code integriert wird, kann man locker aus bestehendem Code sehr leicht erlesen. D.h. das Aneignen von Grundkenntnissen, sollte nun wir´klich im Selbststudium absolviert werden.

Und ich erinnere auch gern nochmals an den gut strukturierten Code, wenn er denn hier gepostet wird, als Voraussetzung für eine schnelle Hilfe. Und nicht nur, dass damit dem Beantworter das Leben einfacher gestaltet wird, sondern es geht mir auch darum, dass sich alle "Anfänger" von vornherein einen sauberen Codierungsstil angewöhnen, um später die eigenen Programme schneller lesen zu können.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #27 (permalink)  
Alt 19.01.18
Auf eigenen Wunsch deaktiviert
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

Um nochmal kurz zur Code Strukturierung zu kommen. Ich weiß nicht ob es nur bei mir so ist aber beim kopieren aus dem MetaEditor hier ins Forum, übernimmt er die Abstände nicht. Das heißt es wird so kopiert das jede Zeile Linksbündig steht. Ist das nur bei mir so?

Ich muss nochmal auf die Funktionen zurück kommen denn es mag nicht so ganz klappen.

Code:
OnTick

Kontostand=AccountInfoDouble(ACCOUNT_BALANCE);
  
   if(Kontostand>KontoHigh)
      {
      KontoHigh=Kontostand;
      }

   KontoHoch=NormalizeDouble(KontoHigh,Digits);

if(a==0)
         {
         LotSize=LotSizeBerechnung();
         LongOrder1=OrderSend(NULL,OP_BUYSTOP,10,KaufPreis,NULL,VerkaufPreis,0,"DAX_H1_StrategieLong",MagicNummer,0,clrGreenYellow);
         ShortOrder1=OrderSend(NULL,OP_SELLSTOP,10,VerkaufPreis,NULL,KaufPreis,0,"DAX_H1_StrategieShort",MagicNummer,0,clrRed);
            {
            if((LongOrder1>0)&&(ShortOrder1>0)) 
               {
               TradeActionZehnUhr++;
               }
            }
         }
Jetzt möchte ich wie oben ersichtlich die LotSize in der Funktion LotSizeBerechnung berechnen:

Code:
double LotSizeBerechnung()
         {
         if(KontoHoch<7500)
            {
            LotSize=10.0;
            return(LotSize);
            }
         }
Er gibt mir beim Copilieren den Fehler aus:

')' - not all control paths return a value


Ich kann mir vorstellen das der Wert "KontoHoch" nicht in der Funktion ankommt, könnte ist das der Fehler?
  #28 (permalink)  
Alt 19.01.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
double LotSizeBerechnung()
  {
   if (
KontoHoch 7500)
     {
      
LotSize=10.0;
     }
   return(
LotSize);
  } 
so geht's, return(....) muss vor der letzten Schweifklammer stehen.
Lampe likes this.
  #29 (permalink)  
Alt 19.01.18
Auf eigenen Wunsch deaktiviert
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank Adlerauge!

MfG
Lampe
  #30 (permalink)  
Alt 19.01.18
Auf eigenen Wunsch deaktiviert
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

Entschuldigung aber ich möchte nochmal den Post von Trader6666 aufgreifen und allgmeine Programmier Frage stellen.

Trader6666 schrieb man sollte alles was nicht wirklich mit jedem Tick berechnet wird auslagern in seperate Funktionen. Der Gedanke leuchtet mir auch soweit ein, allerdings stelle ich mir eine Frage.

Wenn man OnTick eine if Bedingung formuliert wie Beispielsweise oben verwendet:

Code:
if(Longsignal=true)
   {
   OrderSenden();
   }
Dann wird doch bei jedem Tick nur und ausschließlich die erste if Zeile gelesen, und nur dann wenn die stimmt, geht das Programm doch in die Berechnung die innerhalb der geschweiften Klammern steht.

Welchen Vorteil bietet es dann wenn man OrderSenden() auslagert wenn sie eh nur berechnet wird wenn die if Bedingung stimmt?

Oder andersrum gefragt, welche Nachteile habe ich wenn die Berechnung einfach dann OnTick berechnen lasse?

Ich würde mich über ein kurzes Feedback freuen.

Mit freundlichen Grüßen
Lampe
Thema geschlossen

Lesezeichen

Stichworte
hilfe, lernen, mql4, mql4 aufbau, mql4 hilfe, mql4 lernen, programmierung, programmierung metatrader, programmierung mql4, starthilfe

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 +1. Es ist jetzt 20:45 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.
-----------------------------------------------------------------------------------------------------------------------------