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: 3359
Beiträge: 33848
Benutzer: 5.342
Aktive Benutzer: 599
Links: 79
Wir begrüßen unseren neuesten Benutzer: maxi
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 5 Stunden
- maxi
vor 20 Stunden
- athaclena
vor einem Tag
- Naale
vor einem Tag
- csabi911
vor einem Tag
- Adlerflüge...

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 32
Gesamt: 35
Team: 0
Team:  
Benutzer:  fxnoob, Naale, SentiTrader
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Oct 2016
Beiträge: 2
Danilo Doberto befindet sich auf einem aufstrebenden Ast
Standard Trailing Stop funktioniert nur bei Sell Order

Hallo Forum,


nachdem ich eigentlich bisher immer alle Probleme durch stöbern im Forum lösen konnte muss ich jetzt leider zum ersten Mal nach Hilfe rufen.
Ich habe ein Problem bei dem EA unten welches ich nicht lösen kann....

Der EA soll auf eine kleine Zeiteinheit (5Min / 15Min) angewendet werden und das Tradesignal soll durch kreuzende EMA´s in höheren Zeiteinheiten (1h/4h) entstehen.
Mit der Tradeeröffnung aus einer höheren Zeiteinheit habe ich kein Problem (zumindest glaube ich dass ).

Es geht darum, dass der Trailing Stop nur bei Sell Orders funktioniert und bei Buy Orders den Dienst verweigert.
Die Orders dürfen nur bei einem neuen Bar eröffnet und auch nur bei einem neuen Bar modifiziert werden.
Es darf auch immer nur eine Order offen sein.
Ich bekomme im Strategy Tester keine Error Codes ausgegeben, es kommen einfach keine Order Modify´s bei Buy Orders. Bei Sell Orders funktioniert es wie gesagt tadellos.

Ich quäle mich mit dem EA schon einige Zeit und komme nicht weiter.
- habe schon versucht die ganzen Doubles bei den OrderModify- und Order Send-Funktionen zu Normalisieren, ohne Erfolg.
- die OrderSend hatte ich schon in einer Void-Funktion statt in zwei
- ich hatte schon zwei AdjustTrail Funktionen anstatt einer
- habe schon sämtliche Variationen der Parameter (StopLoss, WhenToTrail, TrailAmount, TakeProfit) durch
- habe schon verschiedene Symbole durchprobiert (DAX, Währungspaare)--> immer das Selbe

Kurz gesagt: ich habe schon alles was ich mir denken konnte versucht und der Code unten stellt einfach die letzte Version dar.

Wäre für Hilfe sehr dankbar!


Die Beschreibungen, die ich beim Kompilieren bekomme:
(bei meinen anderen EA´s hatten diese Warnungen eigentlich nie Auswirkungen auf das Ergebnis)

PHP-Code:
return value of 'OrderSend' should be checked    BEW_HighSig.mq4    119    5
return value of 'OrderSend' should be checked    BEW_HighSig.mq4    124    4
return value of 'OrderModify' should be checked    BEW_HighSig.mq4    142    19
return value of 'OrderModify' should be checked    BEW_HighSig.mq4    157    18
0 error
(s), 4 warning(s), compile time979 msec        1    5 


PHP-Code:
extern double LotSize 0.1;
extern double TakeProfit 60;
extern double StopLoss 120;
extern bool   UseTrail true;
extern double TrailAmount 20;
extern double WhenToTrail 20;

double pips;
int    BarsOnChart;

double EMA_10;
double EMA_10vor;
//double EMA_20;
//double EMA_20vor;
double EMA_50;
double EMA_50vor;     
//double EMA_100;
//double EMA_100vor;
//double EMA_200;
//double EMA_200vor;






//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{

//Modifizierung SL und TP für 5Digit Broker
   
double ticksize MarketInfo(Symbol(),MODE_TICKSIZE);
      if (
ticksize==0.00001||ticksize==0.001||ticksize==0.1)
        
pips ticksize*10;
      else 
pips ticksize;
      
//Setze die Variable BarsOnChart auf die tatsächliche Anzahl der Bars beim Start des EA   
           
BarsOnChart=Bars;
  
   
return(
INIT_SUCCEEDED);
}



//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  
}






//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//Überprüfe ob eine Order offen ist und ob ein neuer Bar entstanden ist
   
if(OrdersTotal()==0)
      {
        if (
Bars!=BarsOnChart)CheckEMA();
      }    
      
 
//Überprüfe ob Trailing Stop aktiviert ist, eine Order zum Modifizieren offen und ob ein neuer Bar entstanden ist          
   
if(UseTrail==true&&OrdersTotal()>0)
      {
        if (
Bars!=BarsOnChart)AdjustTrail();
      }
      
//Aktualisierung der Variable BarsOnChart auf die tatsächliche Anzahl der Bars      
     
BarsOnChart=Bars
}



//Logik für das Tradesignal aus H1
void CheckEMA()
{
  
EMA_10 iMA(NULL,PERIOD_H1,10,0,MODE_EMA,PRICE_CLOSE,0);
  
EMA_10vor iMA(NULL,PERIOD_H1,10,0,MODE_EMA,PRICE_CLOSE,1);
  
//EMA_20 = iMA(NULL,PERIOD_H1,20,0,MODE_EMA,PRICE_CLOSE,0);
  //EMA_20vor = iMA(NULL,PERIOD_H1,20,0,MODE_EMA,PRICE_CLOSE,1);
  
EMA_50 iMA(NULL,PERIOD_H1,50,0,MODE_EMA,PRICE_CLOSE,0);
  
EMA_50vor iMA(NULL,PERIOD_H1,50,0,MODE_EMA,PRICE_CLOSE,1);     
  
//EMA_100 = iMA(NULL,PERIOD_H1,100,0,MODE_EMA,PRICE_CLOSE,0);
  //EMA_100vor = iMA(NULL,PERIOD_H1,100,0,MODE_EMA,PRICE_CLOSE,1);
  //EMA_200 = iMA(NULL,PERIOD_H1,200,0,MODE_EMA,PRICE_CLOSE,0);
  //EMA_200vor = iMA(NULL,PERIOD_H1,200,0,MODE_EMA,PRICE_CLOSE,1);


    
if(EMA_10vor<EMA_50vor && EMA_10>EMA_50)OrderSendBuy();
    if(
EMA_10vor>EMA_50vor && EMA_10<EMA_50)OrderSendSell();
}


//Buy oder Sell Order senden
void OrderSendBuy()   
   {
    
OrderSend(Symbol(),OP_BUY,LotSize,Ask,10,Ask-StopLoss*pips,Ask+TakeProfit*pips,NULL,3116,0,clrGreen);
   }  
  
void OrderSendSell()   
   {
   
OrderSend(Symbol(),OP_SELL,LotSize,Bid,10,Bid+StopLoss*pips,Bid-TakeProfit*pips,NULL,3116,0,clrRed); 
   }
       

     


//Überprüfe ob der SL einer Order modifiziert werden muss
void AdjustTrail()
{
  if(
OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES))//Wähle Order aus
   
{
     if(
OrderType()==OP_BUY)//Prüfe ob Buy Order vorliegt
       
{
        if((
Bid-OrderOpenPrice())>(WhenToTrail*pips))//Prüfe ob StopLoss nachgezogen werden kann
           
{
              if(
OrderStopLoss()<(Bid-(TrailAmount*pips)))//Prüfe ob StopLoss in Traderichtung nachgezogen wird
                
{
                  
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailAmount*pips,OrderTakeProfit(),0,clrNONE);//Order Modify
                
}
           }
       } 
   }

 
  if(
OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES))
   {
     if(
OrderType()==OP_SELL)
       {
         if((
OrderOpenPrice()-Ask)>(WhenToTrail*pips))
           {
             if(
OrderStopLoss()>(Ask+(TrailAmount*pips)))
                {
                 
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailAmount*pips,OrderTakeProfit(),0,clrNONE);
                }
           }
       }

   }

Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.518
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Da muss vorher die Order nach dem klassischen Schema selektiert werden:

Code:
void AdjustTrail() 
{ 
  for (int i = OrdersTotal()-1; i>=0; i--) {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol() == Symbol()) {
           if (OrderType() == OP_BUY) {
           ...
           }
           if (OrderType() == OP_SELL) {
           ...
           }
        }
     }
   }
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Oct 2016
Beiträge: 2
Danilo Doberto befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc, danke für die schnelle Antwort.

Ich verstehe nicht warum ich die Orders so auswählen muss.
Es ist ja durch die Logik vorgegeben, dass nur eine Order offen sein darf.
Wieso muss ich das Symbol prüfen bei nur einer Order?
Das "for" habe ich mir absichtlich gespart weil ja nur eine Order möglich ist

Ich versuche es mal mit der Änderung,
Danke!
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.518
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Diese Zeile ist falsch:
if(OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TR ADES))
Wenn mit der TicketNumber gearbeitet wird, dann
if(OrderSelect(OrderTicket(),SELECT_BY_TICKET))
Die TicketNumber-Ermittlung geht zwar über OrderTicket(), aber nur vorheriger Selektion der Orders. Oder man speichert bei der Öffnung der Order die TicketNumber separat ab und benutzt dann diese Variable, aber auch nur über diese Codestruktur:
if(OrderSelect(TicketNumber, SELECT_BY_TICKET))

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mql4, programmierung, programmierung metatrader, programmierung mql4, trailing stop, 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 15:16 Uhr.



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