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: 36909
Benutzer: 6.083
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: Wombat
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- Wombat
vor 19 Stunden
- idur
vor einem Tag
- DarthTrade...
vor einem Tag
- Eren
vor 2 Tagen
- Rene1504

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 44
Gesamt: 46
Team: 0
Team:  
Benutzer:  fxnoob, Stier
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 28.09.12
Neues Mitglied
 
Registriert seit: Sep 2012
Beiträge: 10
MarkusW befindet sich auf einem aufstrebenden Ast
Standard Simpler EA, aber mehrere Timeframes

Hi, habe mir einen simplen EA gebaut. Die Regeln sind:

Gehe Long, wenn: ((Close(1) > SMA(200) im 4h Chart) And ((Close(1) > SMA(200)im 1h Chart) And (EMA(5)im 15min Chart Crosses Above SMA(200) im 15min Chart)))


Gehe Short, wenn: ((Close(1) < SMA(200) im 4h Chart) And ((Close(1) < SMA(200)im 1h Chart) And (EMA(5)im 15min Chart Crosses below SMA(200) im 15min Chart)))


Dann gilt jeweils ein Take Profit von: AverageTrueRange(Periode 2) * einer Konstanten

und ein StopLoss von: AverageTrueRange(Periode 2) * einer Konstanten



Wie ihr vieleicht gemerkt habt benutzt der EA 3 verschiedene Timeframes nämlich: 4h, 1h und 15min.

Ich wollte den EA in Metatrader Testen, aber es kommen immer 0 Trades raus, egal auf welcher Zeitbasis ich simuliere - ist wohl klar - scheinbar kann man einen EA, der mehrere Zeitbasen verwendet nicht simulieren ?

Deshalb wollte ich euch mal fragen, ob ihr mal drübergucken könnt und mir sagen könnt ob er funktionieren kann. (Nur von der Funktion - nicht vom Profit )

Dann hab ich glaube ich noch ein Problem:

Bevor ich eine Order öffne, frage ich mit OrdersTotal() ab, ob schon eine Order existiert. Ich will damit erreichen, das nur immer eine Order pro Symbol offen ist. Ich will den EA auf vielen Symbolen gleichzeitig laufen lassen. Dann würde die Abfrage aber dazu führen das es immer nur insgesamt nur eine Order gibt oder ? Ich brauche es aber so das es pro Symbol nur eine Order geben kann ...

So hier kommt der Code, ist nich viel, währe euch dankbar für eure Hilfe

Code:
//+------------------------------------------------------------------+
//|                                                  My_First_EA.mq4 |
//|                                                             M.W. |
//|                                         |
//+------------------------------------------------------------------+
#property copyright "M.W."
#property link      ""

//--- input parameters
extern double    AtrPeriod=2;
extern double    ATR_Faktor_tp=4;
extern double    ATR_Faktor_sl=2;
extern double    Lots=0.1;




// interne Variablen

double    TakeProfit=0.0;
double    StopLoss=0.0;
double    atrValue=0.0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
 
  
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
      int cnt, ticket, total;
      if(Bars<100)
      {
         Print("bars less than 100");
         return(0);
      }


// LONG: ((Close(1) > SMA(200) im 4h Chart) And ((Close(1) > SMA(200)im 1h Chart) And (EMA(5)im 15min Chart Crosses Above SMA(200) im 15min Chart)))
   bool LongEntryCondition = ((Close[1] > iMA(NULL, PERIOD_H4, 200, 0, MODE_SMA, PRICE_CLOSE, 1)) && ((Close[1] > iMA(NULL, PERIOD_H1, 200, 0, MODE_SMA, PRICE_CLOSE, 1)) && ((iMA(NULL, PERIOD_M15, 5, 0, MODE_EMA, PRICE_CLOSE, 2) < iMA(NULL, PERIOD_M15, 200, 0, MODE_SMA, PRICE_CLOSE, 2)) && (iMA(NULL, PERIOD_M15, 5, 0, MODE_EMA, PRICE_CLOSE, 1) > iMA(NULL, PERIOD_M15, 200, 0, MODE_SMA, PRICE_CLOSE, 1)))));
   
// SHORT: ((Close(1) < SMA(200) im 4h Chart) And ((Close(1) < SMA(200)im 1h Chart) And (EMA(5)im 15min Chart Crosses below SMA(200) im 15min Chart)))
   bool ShortEntryCondition = ((Close[1] < iMA(NULL, PERIOD_H4, 200, 0, MODE_SMA, PRICE_CLOSE, 1)) && ((Close[1] < iMA(NULL, PERIOD_H1, 200, 0, MODE_SMA, PRICE_CLOSE, 1)) && ((iMA(NULL, PERIOD_M15, 5, 0, MODE_EMA, PRICE_CLOSE, 2) > iMA(NULL, PERIOD_M15, 200, 0, MODE_SMA, PRICE_CLOSE, 2)) && (iMA(NULL, PERIOD_M15, 5, 0, MODE_EMA, PRICE_CLOSE, 1) < iMA(NULL, PERIOD_M15, 200, 0, MODE_SMA, PRICE_CLOSE, 1)))));

      

      
      total = OrdersTotal();
      if(total < 1)
      {

         if(LongEntryCondition == 1)   ///  Long Position
         {
            // StopLoss und Take Profit berechnen
            atrValue = iATR(NULL, PERIOD_M15, AtrPeriod, 1);
            StopLoss=atrValue*ATR_Faktor_sl;
            TakeProfit=atrValue*ATR_Faktor_tp;
            //
            
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My EA",12345,0,Green);
            if(ticket>0)
            {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY order opened : ",OrderOpenPrice());
            }
            else Print("Error opening BUY order : ",GetLastError());
            return(0);
         }
         

         
         if(LongEntryCondition == 1)   /// Fast MA kreuzt slow MA von oben nach unten -> Short Position
         {
         
            // StopLoss und Take Profit berechnen
            atrValue = iATR(NULL, PERIOD_M15, AtrPeriod, 1);
            StopLoss=atrValue*ATR_Faktor_sl;
            TakeProfit=atrValue*ATR_Faktor_tp;
            // 
           ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"My EA",12345,0,Red);
           if(ticket>0)
           { 
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("SELL order opened : ", OrderOpenPrice());
           }
           else Print("Error opening SELL order : ",GetLastError());
           return(0);
         }
      }

  }  
    
   
//+------------------------------------------------------------------+
   
   

//+------------------------------------------------------------------+
  #2 (permalink)  
Alt 29.09.12
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

Hi,

1. Bau eine Routine ein, wo es mit der Fertigstellung der Kerze je nach Timeframe das Programm beginnt zu traden. Anstatt mit bars<100 etc. Ich hatte ein Code-Bsp hier mal veroeffentlicht.
2. Das mit total <0 entfernst du umgehend, sondern pruefst nur, wenn dein EA eine Order offen hat kein weiteres mehr oeffnet. Stichwort MagicNr.
3. Beim Shortteil ist ein Fehler in deinem Cod, du meinst wohl if( ShortEntryCondition==1)


Dann pruef ob die Boolean-Param jemals true zurueckliefern.

Gruss,
Hoschie
  #3 (permalink)  
Alt 01.10.12
Neues Mitglied
 
Registriert seit: Sep 2012
Beiträge: 10
MarkusW befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Antwort, hab die Kontrolle nach den offenen Orders jetzt mal geändert:

Code:
int buys=0,sells=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICNR)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
      
      
      if(buys==0 && sells==0)
      {
Wenn Symbol() wirklich das Symbol zurückgibt bei dem der EA gerade läuft (auch wenn er bei vielen symbolen gleichzeitig läuft) sollte es gehen denk ich ...
Thema geschlossen

Lesezeichen

Stichworte
ea, einfacher ea, einfacher expert-advisor, expert-advisor, mql4, programmierung, programmierung metatrader, simpler ea, simpler expert-advisor


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:55 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.
-----------------------------------------------------------------------------------------------------------------------------