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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Like Tree3Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 14.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

...gut, danke für die Hausaufgaben ;-)
  #12 (permalink)  
Alt 15.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Mach Dir keine Sorgen, Adlerauge, das wird schon!

Allein um die Sache mit den Indikatoren herauszufinden, habe ich Tage gebraucht! Das kommt davon, wenn alles nur in Englisch und weit verstreut dokumentiert ist.

Als ich vor 20 Jahren das Programmieren mal mit dem vielgeschmähten Visual- bzw. Access-Basic angefangen habe, war das Alles viel einfacher!

Da konnte man solche Sachen noch mit ein paar Mausklicks machen, da gab es einen Editor, in dem jede Unterfunktion in einem separaten Fenster angezeigt werden konnte usw. usf.

Irgendwie sind wir wieder in der programmiertechnischen Steinzeit angekommen, aber was soll man machen?
  #13 (permalink)  
Alt 15.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Hi TLO,

ich habe früher mal ein bisschen HTML programmiert, mehr aber auch nicht.

Letztendlich muss man ja die Logik der Programmiersprache verstehen, um damit arbeiten zu können.....

Bei Deinem Code zu den wechselnden Trades ist mir noch nicht klar, welche der Parameter ich als Kriterium für die zu öffnenden Trades nehmen muss.

Ich habe es nun nochmal mit (LastTradeLong==false && LastTradeShort==true) versucht, funktioniert aber nicht (macht gar keinen Trade auf).
Wenn ich nur (LastTradeLong==false) als Kriterium nehme, scheint er sich um den Code zu den wechselnden Trades nicht weiter zu scheren und macht nach Belieben Buys hinter Buys und Sells hinter Sells auf.

Hier ist der aktuelle Stand:

extern double HandelsLots = 0.01;
extern double StopLoss = 50;
extern double TakeProfit = 50;

int MagicNumber = 1500001;
int Zaehler_History;

bool LastTradeShort;
bool LastTradeLong;
bool LongShortWechsel;

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

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
double iMom=iMomentum(NULL,5,14,0,0);

//Auf einen Long- folgt immer ein Short-Trade und umgekehrt
if (LongShortWechsel==true)
{
for(Zaehler_History=OrdersHistoryTotal();Zaehler_H istory>=0;Zaehler_History--)
{
OrderSelect(Zaehler_History,SELECT_BY_POS,MODE_HIS TORY);
// if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
// continue;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
LastTradeLong=true;
LastTradeShort=false;
break;
}
if(OrderType()==OP_SELL)
{
LastTradeLong=false;
LastTradeShort=true;
break;
}

}
}
}


if (OrdersTotal() == 0 && iMom > 100 && LastTradeLong==false)
{
OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,0,0,Green );
}

if (OrdersTotal() == 0 && iMom < 100 && LastTradeShort==false)
{
OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,Bid+S topLoss*Point,Bid-TakeProfit*Point,NULL,0,0,Red);
}


}

Was meinst Du?
  #14 (permalink)  
Alt 15.12.15
GoS GoS ist offline
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 73
GoS befindet sich auf einem aufstrebenden Ast
Standard

Hi Adlerauge,

benutze für Code bitte den Button oben in der Leiste, wo "php" draufsteht, dann kann man das ganze besser lesen. Versuch mal folgendes, habs nur kurz zusammengeschrieben, nicht getestet und nicht compiliert:
PHP-Code:
extern double HandelsLots 0.01;
extern double StopLoss 50.;
extern double TakeProfit 50.;

int OnInit(void) {return(INIT_SUCCEEDED);}

void OnTick(void) {
    static 
int si_mode 0;
    
double iMom iMomentum(NULL51400);
    if(
si_mode != && OrdersTotal() == && iMom 100)
        if(
OrderSend(Symbol(), OP_BUYHandelsLotsAsk2Ask StopLoss PointAsk TakeProfit PointNULL00Green) >= 0)
            
si_mode 1;
    if(
si_mode != -&& OrdersTotal() == && iMom 100)
        if(
OrderSend(Symbol(), OP_SELLHandelsLotsBid2Bid StopLoss PointBid TakeProfit PointNULL00Red) >= 0)
            
si_mode = -1;
    return; } 
  #15 (permalink)  
Alt 16.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Hi Adlerauge,
ich habe Deinen Code jetzt mal getestet, und ich muss sagen, ich
weiss auch nicht, wo der Fehler liegt. MQL4 ist einfach programmiertechnischer Schrott, da musst Du in die Glaskugel schauen, ob das klappt oder nicht.

Und glaub mir, ich weiss, wovon ich rede! Mein EA hat inzwischen 2500 Zeilen, und er läuft (meistens). Manchmal tut er auch wieder nicht, was gestern noch funktionierte.

Darum bin ich auch bei jeder noch so kleinsten Änderung äusserst vorsichtig, mache jedesmal eine Sicherungskopie des alten Codes und
teste erst wieder (was lange Zeit in Anspruch nimmt), ob das auch funktioniert.

Z.B. die Funktion void OnTick() hat bei mir noch nie gemacht, was
sie sollte, die ignoriert sämtliche Folgecodes.

Ich empfehle Dir, nicht soviel Zeit in dieses MQL zu investieren, es ist
unausgereift und im Grunde für Anwender völlig unzumutbar!
  #16 (permalink)  
Alt 16.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Hi GoS, hi TLO,

danke für Eure Antworten. Morgen teste ich weiter, dann kommt mein feedback. Irgendwie muss diese Geschichte ja zum Laufen zu kriegen sein......))
  #17 (permalink)  
Alt 16.12.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TLO Trader Beitrag anzeigen
Hi Adlerauge,
ich habe Deinen Code jetzt mal getestet, und ich muss sagen, ich
weiss auch nicht, wo der Fehler liegt. MQL4 ist einfach programmiertechnischer Schrott, da musst Du in die Glaskugel schauen, ob das klappt oder nicht.

Und glaub mir, ich weiss, wovon ich rede! Mein EA hat inzwischen 2500 Zeilen, und er läuft (meistens). Manchmal tut er auch wieder nicht, was gestern noch funktionierte.

Darum bin ich auch bei jeder noch so kleinsten Änderung äusserst vorsichtig, mache jedesmal eine Sicherungskopie des alten Codes und
teste erst wieder (was lange Zeit in Anspruch nimmt), ob das auch funktioniert.

Z.B. die Funktion void OnTick() hat bei mir noch nie gemacht, was
sie sollte, die ignoriert sämtliche Folgecodes.


Ich empfehle Dir, nicht soviel Zeit in dieses MQL zu investieren, es ist
unausgereift und im Grunde für Anwender völlig unzumutbar!
Wenn nach der OnTick()-Funktion alle Folgecodes ignoriert werden, wie läuft denn dann bei Dir überhaupt ein EA?
In der Regel sitzt der Fehler vor dem Monitor. Auch ich habe manchmal schon lange gesucht, aber bisher immer!!! den Fehler gefunden, der durch mich induziert wurde.
Deine Einschätzung über die Programmqualität ist maßlos übertrieben und ungerechtfertigt und reflektiert ein völlig falsches Bild. Sicherlich gibt es das Eine oder Andere zu verbessern. Aber wo ist das nicht der Fall.

Und ich!! weiss ganz genau, wovon ich hier rede.

traderdoc
asfranz and GoS like this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #18 (permalink)  
Alt 16.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Hi Adlerauge,
nachdem sich meine "Wut" wieder etwas gelegt hat, habe ich noch ein wenig probiert. Hier der lauffähige EA, ist nicht ausgefeilt und ich habe alle "Krücken" dringelassen, denn Du willst ja was lernen , aber er tut was er soll, immer einen Long- und dann einen Short-Trade eröffnen und umgekehrt.

Der EA arbeitet übrigens ohne OnTick(), bin ich so gewohnt und funktioniert auch. Verbesserungsvorschläge sind aber gerne willkommen.

P.S.: Ich habe festgestellt, dass hier beim Einfügen von Text manchmal Leerzeichen hinzugefügt werden, wo keine hingehören, da musst Du evtl. drauf achten. Diesmal scheint aber auf den ersten Blick alles o.k., wo ich die Funktion zum Codeeinfügen benutzt habe. Man ist ja lernfähig.


Code:
//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern string EAName = "Test";
extern double HandelsLots=0.01;
extern double StopLoss=50;
extern double TakeProfit=50;
bool LongShortWechsel=true;
extern int MagicNumber=1234;

int Zaehler_History;

bool LastTradeShort= false;
bool LastTradeLong = false;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int Init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int start()
  {
   double iMom=iMomentum(NULL,0,14,0,0);
   int OffeneTrades=CountTrades();
      //Alert(iMom + "  " + OffeneTrades);
//Auf einen Long- folgt immer ein Short-Trade und umgekehrt
   if(LongShortWechsel==true)
     {
      for(Zaehler_History=OrdersHistoryTotal();Zaehler_History>=0;Zaehler_History--)
        {
         OrderSelect(Zaehler_History,SELECT_BY_POS,MODE_HISTORY);
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
            continue;

         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY)
              {
               LastTradeLong=true;
               LastTradeShort=false;
               break;
              }
            else if(OrderType()==OP_SELL)
              {
               LastTradeLong=false;
               LastTradeShort=true;
               break;
              }

           }
        }
         //Alert("LastTradeLong " + LastTradeLong);
         //Alert("LastTradeShort " + LastTradeShort);
     }

   if(OffeneTrades==0 && iMom>100 && LastTradeLong==false)
        {
         Alert(OffeneTrades + " LastTradeLong " + LastTradeLong);
         OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName,MagicNumber,0,Green);
        }

      if(OffeneTrades==0 && iMom<100 && LastTradeShort==false)
        {
         Alert(OffeneTrades + " LastTradeShort " + LastTradeShort);
         OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,Bid+StopLoss*Point,Bid-TakeProfit*Point,EAName,MagicNumber,0,Red);
        }
return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   int trade;
   for(trade=OrdersTotal()-1;trade>=0;trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
         continue;

      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         if(OrderType()==OP_SELL || OrderType()==OP_BUY)
            count++;
     }//for
   return(count);
  }
//+------------------------------------------------------------------+
  #19 (permalink)  
Alt 16.12.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja gut, dann hast Du die alte Struktur genommen mit start().

Diese Zeile sollte dann doch besser so lauten:
for(Zaehler_History=OrdersHistoryTotal()-1;Zaehler_History>=0;Zaehler_History--)

und hier steckt ein typisches Fehlerchen drin:

OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName,MagicNumber,0,Green);

adäquat hier:

OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,Bid+StopLoss*Point,Bid-TakeProfit*Point,EAName,MagicNumber,0,Red);

Wenn da nicht vorher unter init() entschieden wird, ob es sich um einen 4-oder 5-Digitbroker handelt, dann würden jetzt bei 5-Digitbroker aus den 50 Pips StopLoss in den Variablen plötzlich 5 Pips werden, was verdammt knapp sein kann. (und aus der Slippage 0,2 Pips)

Daher sollte immer in init() stehen:

Code:
Slippage = 2;
M = 1;
if (MarketInfo(Symbol(), MODE_PROFITCALCMODE) == 0) { // gilt nur für Währungspaare 
   if (Digits == 3 || Digits == 5) M = 10;
}
Pt = M*Point;
Slippage *= M;
und dann entsprechend:

OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,Slippage ,NormalizeDouble(Ask-StopLoss*Pt, Digits),NormalizeDouble(Ask+TakeProfit*Pt, Digits),EAName,MagicNumber,0,Green);

Zusätzlich Slippage angepaßt und die SL- und TP-Werte zur Sicherheit auf entsprechende Kommastellen normiert (da kann sonst einiges in die Hose gehen und den berühmten Fehler 130 produzieren).

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #20 (permalink)  
Alt 17.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Hi Gos, hi TLO,

eure Wechsel-Trade Codes funktionieren beide..... ich bin begeistert!!..)))

Damit kann man arbeiten ;-)

GoS, danke für den php - Tipp!

TLO, ein bisschen über die "Maschine" zu fluchen ist schon ok.... wenn man nicht zwischendurch mal Dampf abläst, kommt es einem wahrscheinlich früher oder später zu den Ohren raus ;-)..... und dem Computer tut es ja nicht weh, wenn er mal beschipft wird ...

hi traderdoc,

danke für den wertvollen Tip. Ich legs mir mal in die (virtuelle) Schublade. Ich habe zwar keinen vier-stelligen Broker und habe auch nicht vor, einen zu haben.... aber man weiss ja nie ;-)
Thema geschlossen

Lesezeichen

Stichworte
2 verlust trades, bedingung verlust trades, mql4, programmierung, programmierung metatrader, verlust

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 17:10 Uhr.





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