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: 3367
Beiträge: 33942
Benutzer: 5.356
Aktive Benutzer: 613
Links: 79
Wir begrüßen unseren neuesten Benutzer: Mogelbaum
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 18 Stunden
- Mogelbaum
vor einem Tag
- romahanove...
vor einem Tag
- thaiquocba...
vor einem Tag
- patte
vor 2 Tagen
- boomo

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 29
Gesamt: 31
Team: 0
Team:  
Benutzer:  SusanneH, traderdoc
Freunde anzeigen

Empfehlungen

Werbung

Like Tree5Likes
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #171 (permalink)  
Alt 16.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Kopfschmerzen sind fast weg.

Ich plane 2 Erweiterungen.

1. Orders öffnen nur zwischen angegebenen Zeiten, schließen möglich zu jeder Zeit

extern time Open_Orders_from:08:00
extern time Open_Orders_till:22:00

if(time >= Open_Orders_from && time <= Open_Orders_till "restliche Bedingungen" OP_BUY/OP_SELL je nach Signal der GDs und restlichen Bedingungen.

2. Automatisches RM/MM, bei dem er immer einstellbare %te des Gesamtkapitals riskiert. Das muss aber aktivierbar/deaktivierbar sein

extern bool Automatic_RM/MM: false/true
If true:double Lotsize = ""(double)% of Gesamtkapital

Hab keine Ahnung davon und es ist spät
Mit Zitat antworten
  #172 (permalink)  
Alt 16.03.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 193
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

@MA-EA findest Du alles hier im Forum, musst Du nur die Suchfunktion benutzen.
traderdoc hat ein paar schöne Codeschnipsel dazu veröffentlicht.

Zur Zeitsteuerung findest Du hier etwas:
http://www.expert-advisor.com/forum/...sschalten.html

Und zum Moneymanagemet hier:


http://www.expert-advisor.com/forum/...m-einsatz.html

Das Ein- und Ausschalten der Bedingungen solltest Du ja hinkriegen, oder?
Ich mach das über ne einfache Abfrage einer bool Variablen.

zb: extern bool MM=true;

und dann die Abfrage ab der entsprechenden Stelle im Code mit einer if Bedingung.

Ansonsten kann ich nur empfehlen die Sprache zu lernen und vielen anderen Code zu lesen. Du kommst viel schneller vorwärts als mit ständigen rumprobieren.
Mit Zitat antworten
  #173 (permalink)  
Alt 17.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Mahlzeit.

Jemand ne Idee, wie man die Einstiegs-Bedingungen abkürzen könnte, ohne das irgendwelche Bedingungen verloren gehn?

Code:
//GDs
//Bestaetigung GDs
double B1 = iMA(Symbol(), TimeFrame, Bestaetigung_Moving_Average_1, GD_Shift, GD_Type, PRICE_CLOSE, 1);//2 Auch Ausstieg
double B2 = iMA(Symbol(), TimeFrame, Bestaetigung_Moving_Average_2, GD_Shift, GD_Type, PRICE_CLOSE, 1);//4 Auch Ausstieg
double B3 = iMA(Symbol(), TimeFrame, Bestaetigung_Moving_Average_3, GD_Shift, GD_Type, PRICE_CLOSE, 1);//5 Bestaetigung

//Einstieg GDs
double E1 = iMA(Symbol(), TimeFrame, Einstieg_Moving_Average_1, GD_Shift, GD_Type, PRICE_CLOSE, 1);//3 Einstieg
double E2 = iMA(Symbol(), TimeFrame, Einstieg_Moving_Average_2, GD_Shift, GD_Type, PRICE_CLOSE, 1);//6 Einstieg
Code:
//Open Trade
if (!IsInvested){
if (Spread <= Max_Spread && LC>E1 && E1>E2 && LC>B1 && B1>B2 && B2>B3 && B1>E1 && B2>E2 && B3>E2 && C>LC) OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" + MagicNumber + ")", MagicNumber, 0, Blue);
if (Spread <= Max_Spread && LC<E1 && E1<E2 && LC<B1 && B1<B2 && B2<B3 && B1<E1 && B2<E2 && B3<E2 && C<LC) OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#" + MagicNumber + ")", MagicNumber, 0, Red);
}
Mit Zitat antworten
  #174 (permalink)  
Alt 17.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Anscheinend gar nicht. Ich weiß nicht, ob 5 GDs zu viel sind, 60M besser als 30M ist, und ob der Vergleich der Kerze 0 mit Kerze 1 Sinn macht.

Werd morgen mal im Demo mit 4 GDs probieren im 30M und mit
Vergleich Kerze 0 und Kerze 1.
Mit Zitat antworten
  #175 (permalink)  
Alt 18.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hab nen 4er geschrieben. Wenn das Teil
nicht wenigstens 60% Gewinn-Trades macht,
dann weiß ichs auch nicht.

Bin mir aber noch nicht ganz sicher beim Ausstieg.

2</>3

oder

2</>4

Da Verluste schneller kommen als Gewinne, wär 2</>3 wohl besser. Besser zu früh raus als zu spät. :wonder:

Code:
if (TimeFrame==0) TimeFrame=NULL;
double C=iClose(Symbol(), TimeFrame, 0);
double LC=iClose(Symbol(), TimeFrame, 1);

//GDs
double OF=iMA(Symbol(), TimeFrame, Open_Fast_Moving_Average, GD_Shift, GD_Type, PRICE_CLOSE, 1);//3 Open
double OS=iMA(Symbol(), TimeFrame, Open_Slow_Moving_Average, GD_Shift, GD_Type, PRICE_CLOSE, 1);//6 Open
double BCF=iMA(Symbol(), TimeFrame, Bestaetigung_Close_Fast_Moving_Average, GD_Shift, GD_Type, PRICE_CLOSE, 1);//2 Bestaetigung Close
double BCS=iMA(Symbol(), TimeFrame, Bestaetigung_Close_Slow_Moving_Average, GD_Shift, GD_Type, PRICE_CLOSE, 1);//4 Bestaetigung Close

//Check position
IsInvested=false;
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) IsInvested=true;}}

//Open Trade
if (!IsInvested){
if (Spread<=Max_Spread && LC>OF && OF>OS && BCF>BCS && BCF>OF && OF>BCS && C>LC) OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" + MagicNumber + ")", MagicNumber, 0, Blue);
if (Spread<=Max_Spread && LC<OF && OF<OS && BCS<BCS && BCF<OF && OF<BCS && C<LC) OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#" + MagicNumber + ")", MagicNumber, 0, Red);}

//Close Trade
if (IsInvested){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

if (OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){
if (LC<BCF && BCF<BCS) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, DarkBlue);}

if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){
if (LC>BCF && BCF>BCS) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, FireBrick);}}}}
Mit Zitat antworten
  #176 (permalink)  
Alt 20.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Was ist hier falsch?

Es geht nicht darum, den ganzen EA nur zu bestimmten Zeiten laufen zu lassen. Sondern nur darum, ihm das Öffnen von Orders zu bestimmten Tageszeiten zu verbieten, besser gesagt zu erlauben.

Code:
///Zeit/Open Von/Bis
extern datetime Time Open_Orders_From = 13:00;
extern datetime Time Open_Orders_Till = 17:00;
extern int TimeFrame = 30;
extern string TimeFrames= "Current:0;M1:1; M5:5; M15:15; M30:30; H1:60; H4:240; D1:1440";
//GDs
extern int Fast_GD = 3;
extern int Slow_GD = 6;
extern int GD_Type = 0;
extern string GD_Types = "SMA:0; EMA:1; SMMA;2; LWMA:3";
int GD_Shift = 0;
//Sonstige Globale Variablen
extern double Lots = 0.01;
int Slippage = 1000;
extern int Max_Spread = 40;
int Ticket, i;
double Spread, PointSet;
bool IsInvested, CloseTicket;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
    
if (Digits <= 3) PointSet = 0.01; else PointSet = 0.0001;
if (Digits <= 1) PointSet = 1;
Spread=Ask-Bid;
Lots = MathMax(MathMin(Lots, MarketInfo(Symbol(),MODE_MAXLOT)),MarketInfo(Symbol(),MODE_MINLOT));

//Define Vars
if (TimeFrame==0) TimeFrame=NULL;
double C=iClose(Symbol(), TimeFrame, 0);
double LC = iClose(Symbol(), TimeFrame, 1);
double GD1c = iMA(Symbol(), TimeFrame, Fast_GD, GD_Shift, GD_Type, PRICE_CLOSE, 1);
double GD2c = iMA(Symbol(), TimeFrame, Slow_GD, GD_Shift, GD_Type, PRICE_CLOSE, 1);

datetime TC = TimeCurrent;
datetime F = Time, (Open_Orders_From);
datetime T = Time, (Open_Orders_Till);

//Check position
IsInvested = false;
for (i=OrdersTotal()-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderType()==OP_SELL || OrderType()==OP_BUY) &&  OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())  IsInvested=true;
}
} 

//Open Trade
if (!IsInvested){
if (TC>=F && TC<=T && Spread <= Max_Spread  && LC>GD1c && GD1c>GD2c && C>LC)  OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" +  MagicNumber + ")", MagicNumber, 0, Blue);
if (TC>=F && TC<=T && Spread <= Max_Spread  && LC<GD1c && GD1c<GD2c && C<LC)  OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#"  + MagicNumber + ")", MagicNumber, 0, Red);
}
Mit Zitat antworten
  #177 (permalink)  
Alt 20.03.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 193
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

Wenn Du nur das Order öffnen über die Zeitsteuerung laufen lassen willst, dann pack nur den Code dazu zwischen die geschweiften Klammern für die Zeitsteuerungsabfrage. Den Rest des Codes läßt Du außerhalb so dass er auch nach Open_Orders_Till ausgeführt wird.
Die Links hierzu hatte ich ja bereits gepostet.

In deinem Code-Rätsel "was ist hier falsch" sind wieder mehrere Dinge enthalten, deren Sinn sich mir nicht erschließt.
Die Fehlermeldungen sollte der Compiler auswerfen.
Was bezweckst Du mit diesen Zeilen hier:

datetime TC = TimeCurrent;
datetime F = Time, (Open_Orders_From);
datetime T = Time, (Open_Orders_Till);
Mit Zitat antworten
  #178 (permalink)  
Alt 20.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Sorry, versteh nur Bahnhof. Weshalb so einige Sachen wohl keinen Sinn ergeben.

Edit:Jetzt sinds nur noch 5 Fehler.

Code:
//Globale Variablen
///Zeit/Open Orders Von/Bis
extern datetime Time Open_Orders_From = 13:00:00;
extern datetime Time Open_Orders_Till = 17:00:00;
extern int TimeFrame = 30;
extern string TimeFrames= "Current:0;M1:1; M5:5; M15:15; M30:30; H1:60; H4:240; D1:1440";

//GDs
extern int Fast_GD = 3;
extern int Slow_GD = 6;
extern int GD_Type = 0;
extern string GD_Types = "SMA:0; EMA:1; SMMA;2; LWMA:3";
int GD_Shift = 0;

//Sonstige Globale Variablen
extern double Lots = 0.01;
int Slippage = 1000;
extern int Max_Spread = 40;
int Ticket, i;
double Spread, PointSet;
bool IsInvested, CloseTicket;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
return(0);}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit(){
return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start(){
if (Digits <= 3) PointSet = 0.01; else PointSet = 0.0001;
if (Digits <= 1) PointSet = 1;
Spread=Ask-Bid;
Lots = MathMax(MathMin(Lots, MarketInfo(Symbol(),MODE_MAXLOT)),MarketInfo(Symbol(),MODE_MINLOT));

//Define Vars
if (TimeFrame==0) TimeFrame=NULL;
double C=iClose(Symbol(), TimeFrame, 0);
double LC = iClose(Symbol(), TimeFrame, 1);
double GD1c = iMA(Symbol(), TimeFrame, Fast_GD, GD_Shift, GD_Type, PRICE_CLOSE, 1);
double GD2c = iMA(Symbol(), TimeFrame, Slow_GD, GD_Shift, GD_Type, PRICE_CLOSE, 1);
datetime F = TimeCurrent,(Open_Orders_From);
datetime T = TimeCurrent,(Open_Orders_Till);

//Check position
IsInvested = false;
for (i=OrdersTotal()-1; i>=0; i--);{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES));{
if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) IsInvested=true;
}
} 

//Open Trade
if (!IsInvested){
if (Spread <= Max_Spread && LC>GD1c && GD1c>GD2c && C>LC) OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" + MagicNumber + ")", MagicNumber, 0, Blue);
if (Spread <= Max_Spread && LC<GD1c && GD1c<GD2c && C<LC) OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#" + MagicNumber + ")", MagicNumber, 0, Red);
}

//Close Trade
if (IsInvested) {
for (i=OrdersTotal()-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {
if(LC<GD1c && GD1c<GD2c) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, DarkBlue);
}
if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {
if(LC>GD1c && GD1c>GD2c) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, FireBrick);
} 
}
}    
}

Geändert von MA-EA (20.03.16 um 19:28 Uhr)
Mit Zitat antworten
  #179 (permalink)  
Alt 20.03.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 193
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

Jo genau, wenn ich deinen Code lese verstehe ich auch nur Bahnhof.
TimeCurrent() liefert dir die Serverzeit als Ergebnis. Bei Dir fehlen da die Klammern hinter TimeCurrent. Du kannst die Funktion aber so nicht verwenden um dem EA beizubringen wann er handeln soll. Bei Dir steht hinter TimeCurrent ein Komma, danach folgen Klammern in denen Variablen stehen. Warum stehen die Variablen da?
Time ist ein reserviertes Wort und erfordert eckige Klammern. Time[0] z.B liefert Dir die Zeit des aktuellen Bars.
wenn Du jetzt die Klammern setzt, den Code hinter den Kommas weglässt bleiben nur noch zwei Fehler übrig aber der Code ist sinnlos.
Warum lernst du nicht erstmal die Sprache in den Grundzügen?
Mit Zitat antworten
  #180 (permalink)  
Alt 22.03.16
Premium Mitglied
 
Registriert seit: Sep 2015
Beiträge: 412
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ist das alles richtig? Kapiert er so, was er machen soll?

Code:
extern int High_GD = 6;
extern int Close_GD = 3;
extern int Low_GD = 6;
Code:
extern int Max_Spread = 35;
Code:
double O = iOpen(Symbol(), TimeFrame, 0);
double LC = iClose(Symbol(), TimeFrame, 1);
double H = iMA(Symbol(), TimeFrame, High_GD, GD_Shift, GD_Type, PRICE_HIGH, 1);
double C = iMA(Symbol(), TimeFrame, Close_GD, GD_Shift, GD_Type, PRICE_CLOSE, 1);
double L = iMA(Symbol(), TimeFrame, Low_GD, GD_Shift, GD_Type, PRICE_LOW, 1);
Code:
//Open Trade
if (!IsInvested){
if (Spread <= Max_Spread && O>H && LC>H) OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" + MagicNumber + ")", MagicNumber, 0, Blue);
if (Spread <= Max_Spread && O<L && LC<L) OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#" + MagicNumber + ")", MagicNumber, 0, Red);}

//Close Trade
if (IsInvested){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

if (OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){
if(LC<H && LC<C) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, DarkBlue);}

if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){
if(LC>L && LC>C) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, FireBrick);}}}}
return(0);}
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
auftrag, biete, ea, expert advisor, gleitender durchschnitt, kleinanzeigen, suche


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 18:21 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.
-----------------------------------------------------------------------------------------------------------------------------