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: 36925
Benutzer: 6.081
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: DarthTrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 12 Stunden
- DarthTrade...
vor 14 Stunden
- Eren
vor 22 Stunden
- Rene1504
vor 22 Stunden
- ibdafx
vor einem Tag
- Batangenyo

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

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 01.04.13
Neues Mitglied
 
Registriert seit: Jan 2013
Beiträge: 18
bergaufbergab befindet sich auf einem aufstrebenden Ast
Standard mein EA reagiert auf Tick statt auf close[0]

Hallo,

warum reagiert mein EA auf den einzelnen Tick statt auf den letzten close-Kurs des aktuellen Timeframes? Also er hat die sell-Position im M5 Chart geschlossen, sobald der Kurs über dem EMA21 gestiegen ist, obwohl von den aktuellen 5 Minuten erst 3 Minuten vorbei waren, also hat er definitiv den Tick statt den close[0] genommen. Könnt ihr mir bitte sagen, was ich da falsch mache?
Code:
 if((Close[0]>iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,0))) // here is your close sell rule
                {
                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
                }
Grüße
bergaufbergab

Hier der EA-Code:
Code:
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=99999;
extern double TakeProfit=99999;
extern int TrailingStop=0;
extern int Slippage=3;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() 
         //&&
         //derMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
                if((Close[0]>iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,0))) // here is your close sell rule
                {
                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
                }
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}

Geändert von bergaufbergab (01.04.13 um 15:56 Uhr)
  #2 (permalink)  
Alt 01.04.13
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

Moin,

versuch mal folgendes:

PHP-Code:

int timeframe
;
static 
datetime update 0;
int init()
        {
      
//----
    
   
timeframe Period();



        
        return(
0);
        }
int start()
        {

if(
update == || TimeLocal() > update Period() * 60)
              {

//Dein Code

 
update TimeLocal()- TimeLocal()%timeframe
            }

     } 
  #3 (permalink)  
Alt 01.04.13
Neues Mitglied
 
Registriert seit: Jan 2013
Beiträge: 18
bergaufbergab befindet sich auf einem aufstrebenden Ast
Standard

Hallo Hoschi,

danke, aber kannst du mir kurz grob sagen, was dein Code macht? Ich steh da grad auf dem Schlauch und bin heute schon zu müde, um mich durch die mql-Doku zu lesen. Ich werde deinen Code testen.

Grüße
bergaufbergab
  #4 (permalink)  
Alt 01.04.13
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bergaufbergab Beitrag anzeigen
Hallo Hoschi,

danke, aber kannst du mir kurz grob sagen, was dein Code macht? Ich steh da grad auf dem Schlauch und bin heute schon zu müde, um mich durch die mql-Doku zu lesen. Ich werde deinen Code testen.

Grüße
bergaufbergab
Mit diesem Code-snippets wird explizit mit dem Entstehen einer neuen Kerze der gewählten Periode entsprechend erst agiert und nicht mehr tickbasiert.

Carpe Diem,
Hoschie
  #5 (permalink)  
Alt 01.04.13
Neues Mitglied
 
Registriert seit: Jan 2013
Beiträge: 18
bergaufbergab befindet sich auf einem aufstrebenden Ast
Standard

hat mit deinem Code leider nicht geklappt, er hat jetzt garnicht geschlossen.
Ich habe hier einen Screenshot mit drangehängt, der rote MA ist der 21er.
Beim Pfeil hätte er nach dem Balkenende die Position schliessen sollen.

Hier mein Einbau-Code, hab ich es so eingebaut wie du gemeint hast?
Code:
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=99999;
extern double TakeProfit=99999;
extern int TrailingStop=0;
extern int Slippage=3;
int timeframe; 
static datetime update = 0; 
int init() 
        { 
    timeframe = Period(); 
   
        return(0); 
        }
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{

if(update == 0 || TimeLocal() > update + Period() * 60) 
              { 

  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() 
         //&&
         //OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
              if((Close[0]<iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,0))) //here is your close buy rule
              {
                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }

 update = TimeLocal()- TimeLocal()%timeframe;  
            }
            

   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
Angehängte Grafiken
Dateityp: jpg closebuy-error.jpg (36,5 KB, 9x aufgerufen)
  #6 (permalink)  
Alt 01.04.13
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

1. Ich sehe im Chart keine Order, daher würde keine Order auch geschlossen werden oder?
2. Müsste der Code nicht wie folgt sein:
Close[0] < iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1)))

D.h. aktueller Close ist kleiner als iMA shift 1 und nicht 0.
shift - Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago).
Daher versuch das mal mit folgenden Code Snippet von dir was ich etwas leicht angepasst habe:
PHP-Code:
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=99999;
extern double TakeProfit=99999;
extern int TrailingStop=0;
extern int Slippage=3;
int timeframe
static 
datetime update 0
  
double MyPoint=Point;

int init() 
        { 
    
timeframe Period(); 
  if(
Digits==|| Digits==5MyPoint=Point*10;
   
        return(
0); 
        }
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{

if(
update == || TimeLocal() > update Period() * 60
              { 

  
  
double TheStopLoss=0;
  
double TheTakeProfit=0;
  if( 
TotalOrdersCount()==
  {
     
int result=0;
  }
  
  for(
int cnt=0;cnt<OrdersTotal();cnt++)
     {
      
OrderSelect(cntSELECT_BY_POSMODE_TRADES);
      if(
OrderType()<=OP_SELL &&   
         
OrderSymbol()==Symbol() 
         
//&&
         //OrderMagicNumber()==MagicNumber 
         
)  
        {
         if(
OrderType()==OP_BUY)  
           {
              if((
Close[0]<iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1))) //here is your close buy rule
              
{
                   
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(
TrailingStop>0)  
              {                 
               if(
Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(
OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(
0);
                    }
                 }
              }
           }
         else 
           {
            if(
TrailingStop>0)  
              {                 
               if((
OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((
OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(
0);
                    }
                 }
              }
           }
        }
     }

 
update TimeLocal()- TimeLocal()%timeframe;  
            }
            

   return(
0);
}

int TotalOrdersCount()
{
  
int result=0;
  for(
int i=0;i<OrdersTotal();i++)
  {
     
OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (
OrderMagicNumber()==MagicNumberresult++;

   }
  return (
result);

  #7 (permalink)  
Alt 02.04.13
Neues Mitglied
 
Registriert seit: Jan 2013
Beiträge: 18
bergaufbergab befindet sich auf einem aufstrebenden Ast
Standard

Hi,
das mit den Shifts hab ich noch nie so richtig kapiert...ich dachte, ich vergleiche den Schlusskurs der gerade beendeten Kerze mit dem gleitenden Durchschnitt bei der gerade beendeten Kerze. Der iMA hat ja als Parameter PRICE_CLOSE und "0" als Parameter, ist das nicht auch sowas wie close[0]?daher dachte ich, der holt sich dann auch einfach den letzten close-Wert des gleitenden Durchschnitts? Wo ist denn da dauernd mein Denkfehler?
Achso, hab grade in der mql-Doku beim iMA geschaut, der Parameter shift ist relativ vom AKTUELLEN Balken gemeint, und wenn der Schlusskurs feststeht, ist dieser Balken ja schon nichtmehr der aktuelle, verstehe ich das richtig?

Grüße
bergaufbergab

Geändert von bergaufbergab (02.04.13 um 08:09 Uhr)
  #8 (permalink)  
Alt 02.04.13
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bergaufbergab Beitrag anzeigen
Hi,
das mit den Shifts hab ich noch nie so richtig kapiert...ich dachte, ich vergleiche den Schlusskurs der gerade beendeten Kerze mit dem gleitenden Durchschnitt bei der gerade beendeten Kerze. Der iMA hat ja als Parameter PRICE_CLOSE und "0" als Parameter, ist das nicht auch sowas wie close[0]?daher dachte ich, der holt sich dann auch einfach den letzten close-Wert des gleitenden Durchschnitts? Wo ist denn da dauernd mein Denkfehler?
Achso, hab grade in der mql-Doku beim iMA geschaut, der Parameter shift ist relativ vom AKTUELLEN Balken gemeint, und wenn der Schlusskurs feststeht, ist dieser Balken ja schon nichtmehr der aktuelle, verstehe ich das richtig?

Grüße
bergaufbergab
Moin,

nur als Denkhilfe
was bedeutet für dich Close[0] oder Close[1], wenn du den Satz Schlusskurs,
der gerade beendeten Kerze schreibst?
Oder schreib ein kleines Programm, der die Close der aktuell beendeten Kerzen ausgibt. Ich hoffe, damit geholfen zu haben.

Der Shift ist nichts weiter als eine Zeitachse.
shift relative to the current bar the given amount of periods ago
Gruss,
Hoschie
  #9 (permalink)  
Alt 02.04.13
Mitglied
 
Registriert seit: Mar 2012
Ort: Wien
Beiträge: 191
Deepack befindet sich auf einem aufstrebenden Ast
Deepack eine Nachricht über Skype™ schicken
Standard

ich löse das immer mit

Code:
int sBars = 0;

init
if (sBars ==0) sBars = Bars;

start
if (sBars != Bars)
   {

        //code
    }

sBars = Bars;
ist ein bisschen weniger aufwendig
  #10 (permalink)  
Alt 02.04.13
Neues Mitglied
 
Registriert seit: Jan 2013
Beiträge: 18
bergaufbergab befindet sich auf einem aufstrebenden Ast
Standard

Hallo Zusammen,

ich habe jetzt den Shift 1 eingebaut, aber trotzdem reagiert er noch auf Tick statt auf den geschlossenen Balken. Ich hab euch mal den Screenshot angehängt, und hier die Auslösebedingung:
Code:
 if((Close[0]>iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1))) // here is your close sell rule
                {
                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
                }
warum klappt das immernoch nicht? also close[0] ist ja immer der close links von der aktuellen Kerze, also close[0]=1,2855. Und der close-Wert vom ema21 ist ja bei der linken Kerze(also mit Shift 1 beim ima) noch etwas über dem close[0], also hätte er da den Trade nicht schliessen dürfen.
Also ich habe bei diesem Versuch die Zusatzbedingungen von Hoschie diesmal nicht dringehabt, weil ich dachte, es reicht nun allein der Shift1 als Problemlösung. Aber warum sollte denn allein meine Bedingung jetzt mit Shift1 alleine nicht funktionieren? Die Bedingung konnte doch rein logisch so wie hier im Screenshot garnicht erfüllt sein, oder? Warum genau brauche ich da noch zusätzlich eure Snippets? Die wirken sich doch auf die Bedingung
Code:
if((Close[0]>iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1)))
garnicht aus, oder?

Grüße
Bergaufbergab
Angehängte Grafiken
Dateityp: jpg closebuy-error2.jpg (122,8 KB, 1x aufgerufen)
Thema geschlossen

Lesezeichen

Stichworte
close[0], ea, expert-advisor, mql4, programmierung, programmierung metatrader, tick


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 13:10 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.
-----------------------------------------------------------------------------------------------------------------------------