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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36918
Benutzer: 6.077
Aktive Benutzer: 493
Links: 80
Wir begrüßen unseren neuesten Benutzer: Batangenyo
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 7 Stunden
- Batangenyo
vor einem Tag
- Spitzmaus
vor einem Tag
- juleslesqu...
vor 2 Tagen
- hmf44
vor 2 Tagen
- Crossa

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 45
Gesamt: 46
Team: 0
Team:  
Benutzer:  Batangenyo
Freunde anzeigen

Empfehlungen

Werbung

Like Tree3Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 20.01.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Da hat sich wohl der Fehlerteufel eingeschlichen.
Du hast die FOR-Schleife nicht original übernommen.

Sie muss so anfangen:
for(int i = OrdersTotal()-1; i >= 0; i--)

Gruß
naranjoe
  #12 (permalink)  
Alt 20.01.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Jo danke, daran lags.
Ich hab die Indexverschiebung angewand bevor ich den Code richtig verstanden gehabt hatte^^
  #13 (permalink)  
Alt 16.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Beiträge: 15
Rico1040 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Ich bin neu in EA Programmieren und Lese hier alles was ich finde. Eins versteh ich nicht was das Void immer zusagen hat?.

Ich wollte den Breakeven bei mir einsetzen aber irgendwie funktioniert es nicht !

Vieleicht könnte ein Profi mal drüber schauen.

HTML-Code:
extern double UpdateToBE = 10 ;


bool LongTrade,ShortTrade;
//Globale Variablen
string Signal;
datetime PeriodenStartzeit;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void UpdateBE()
  {
//---Überprüfen der Starzeit
      PeriodenStartzeit = Time[0];   
//---Breakeven Starten
///-----+++ Break Even setzen
{
 if(UpdateToBE <= 0) 
 return;
for(int i = OrdersTotal()-1; i >= 0; i--)
 
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  	 {
  	  OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
  		 
  	if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  	 {
  	  OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
      }
    }
}

   return;
  }
  #14 (permalink)  
Alt 16.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
extern double UpdateToBE = 10 ;

bool     LongTrade, ShortTrade;
string   Signal;
datetime PeriodenStartzeit;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void UpdateBE()
{
//---Überprüfen der Starzeit
      PeriodenStartzeit = Time[0];   
//---Breakeven Starten
///-----+++ Break Even setzen

   if(UpdateToBE <= 0) return;
 
   for(int i = OrdersTotal()-1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  	 {
  	    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }		 
  	 if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  	 {
  	    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
      }
   }
   return;
}
Als Erstes wird bei Dir nicht erkannt, ob es ein 4- oder 5-DigitBroker ist.

Als Zweites solltest Du Dir mal angewöhnen eine klare Struktur zu schreiben und immer entsprechend einrücken.
void bedeutet nur "leer" bzgl. der Rückgabe von Funktionsergebnissen, im Gegensatz zu int Funktion(), bool Funktion(), double Funktion oder string Funktion(). In diesen Fällen wird die Rückgabe einer entsprechend deklarierten Variable erwartet.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #15 (permalink)  
Alt 17.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Beiträge: 15
Rico1040 befindet sich auf einem aufstrebenden Ast
Standard

Danke für deine Antwort woran erkennt man wie viel Digit meiner hat? am EUR/USD zb. ? (Nachkomma stellen ) ?
  #16 (permalink)  
Alt 17.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Genau, 4-DigitBroker geben in den Kurse 4 bzw. 2 Kommastellen aus und 5-DigitBroker demnach 5 bzw. 3.
Beim 5-DigitBroker würden Deine angedachten 10 Pips in der Variablen UpDateToBE nur 1Pip entsprechen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #17 (permalink)  
Alt 17.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Beiträge: 15
Rico1040 befindet sich auf einem aufstrebenden Ast
Standard

Ok dann ist es ein 4 Digit Brokker, weil dax zb. 9800,5 und Eur/Dollar 1,3290

Ich hab das wie folgt reingebaut ist das ok ?
HTML-Code:
extern double UpdateToBE = 10 ;


bool LongTrade,ShortTrade;
//Globale Variablen
string Signal;
datetime PeriodenStartzeit;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---Überprüfen der Starzeit
      PeriodenStartzeit = Time[0];   

///-----+++ Break Even setzen
{
{
   if(Digits == 4)
   {
      UpdateToBE = UpdateToBE * 10;
   }
if(UpdateToBE <= 0) return(0);
 
   for(int i = OrdersTotal()-1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  	 {
  	    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }		 
  	 if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  	 {
  	    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
      }
   }
   
   return(0);
Hab ich was vergessen ? noch macht er nix Danke Traderdoc für deine Hilfe.
  #18 (permalink)  
Alt 17.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Wenn es ein 4Digit-Broker ist, dann darf nicht! mit 10 multipliziert werden, sondern nur bei 5-DigitBrokern!
Die Abfrage müßte richtig lauten:

int Multiplier = 1;
if (Digits == 3 || Digits == 5) Multiplier = 10;

Desweiteren steht plötzlich die eigene Funktion in der Funktion init().
Diese wird aber nur zur Initialisierung des Programms einmalig durchlaufen.

Deine Funktion gehört in die Funktion start().

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #19 (permalink)  
Alt 17.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Beiträge: 15
Rico1040 befindet sich auf einem aufstrebenden Ast
Standard

Gut hab das so Übernommen und ein bisschen eingerückt.
Hab das in die start Funktion geschoben nur das bei mir steht void OnTick() ist das ok ??

sieht jetzt so aus besser?

HTML-Code:
int Multiplier = 1;
{
   if (Digits == 3 || Digits == 5) Multiplier = 10;
         
   if(Multiplier <= 0) return;
 
   for(int i = OrdersTotal()-1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
             if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= Multiplier * Point)
  	                {      OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);      }
  	                  	                                                                                                            		 
  	            if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= Multiplier * Point)
  	                {      OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);  	   }                                                                                                       }
                                                                                                                                    }
                                                                                                                                    
   }
  #20 (permalink)  
Alt 17.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= Multiplier * Point)
{ OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); }

if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= Multiplier * Point)

Da soll doch bestimmt das hin:

....>= UpdateToBE * Multiplier * Point)

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
breakeven, mql4, programmierung, sl, stoploss, trailingstop


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 00:42 Uhr.



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