Autor Thema: Erste MQL4 Versuch...  (Gelesen 2466 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

  • Buchstabensortierer
  • ***
    • Beiträge: 19
    • Karma: +0/-0
    • Mitglied seit:
      30 Nov 2010

  • Stop
Erste MQL4 Versuch...
« am: Dezember 04, 2010, 16:02:09 pm »
Hi, ich hab angefangen in MQL4 herumzuschreiben und mit einem "Paar-Zeilen-Buy-Bot" angefangen. Dieser EA soll eigentlich nur Long gehen, wenn nix offen ist und  beim TP/SL die Position schließen. Dann gleich wieder Long gehen. Da gerade Wochenende ist und der Markt leider zu, hab ichs den Strategietester testen lassen, doch irgendwas scheint nicht zu stimmen, da keine einzige Position gekauft wird.
Hier der Code:

//---- input parameters
extern double    TP=1.0;
extern double    Sl=3.0;

int start()
  {
//----
   int total, ticket;
   
   total = OrdersTotal();
   if (total<1)
      {
      ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask+Sl*Point,Ask+TP*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);
         }
   else return(0);
   
//----
   return(0);
  }


Für Hilfe wär ich sehr dankbar.


  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #1 am: Dezember 04, 2010, 16:51:40 pm »
Ich tippe auf einen 130er? Dieser Fehler heißt, das TP und SL falsch / zu dicht / etc. gewählt sind...
Chleudere den Purchen zu Poden!

  • Gehört zum Inventar
  • ***
    • Beiträge: 1084
    • Karma: +429/-4
    • Mitglied seit:
      31 Dec 2008
  • Broker: RBS

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #2 am: Dezember 04, 2010, 18:49:27 pm »
Und ich tippe zusätzlich noch dazu: bei manchem Broker (z.B. ActivTrades) muß die Order ohne SL und TP gesendet werden. Im zweiten Schritt muß dann über OrderModify() der SL und TP übermittelt werden.

Aber wie nightyhawk schon richtig tippt: der Spread wird vorallem am Wochende weit über deinen Angaben liegen. Also einfach mal zum Ausprobieren SL und TP über Spread angeben. Wenn dann immer noch kein Trade, dann die Version der getrennten Ordereingaben.

Viel Erfolg!

traderdoc
Pokerregel: "Auch bei dem Anschein eines sicheren Gewinnes, muss man ablassen können."

  • Ist Forum süchtig
  • ****
    • Beiträge: 1567
    • Karma: +431/-289
    • Mitglied seit:
      16 Jun 2009

  • Vintage Carbon Backgammon Spinning Bubbles Air Traffic Chief 4 Wheels Madness
    Cryptraider Skidwrx Formula Fun
  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #3 am: Dezember 04, 2010, 21:37:34 pm »
ich kenne einige broker die bei der berechnung von sl und tp schon fertige 5 stellige werte benötigen, sonst setzt er die order nicht

also würde ich diese zeile so schreiben

ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Normalizedouble(Ask+Sl*Point,Digits),NormalizeDouble(Ask+TP*Point,Digits),"My EA",12345,0,Green)

ausserdem ist "ticket =" eine völlig unnötige phrase, funktioniert genauso ohne
The biggest drawdown is ahead of you. (from Joel R.)

aktueller Tetris Rekordhalter!!!!!!!!!!!!!!!!

warum ist mein karma positiv??????? bitte immer auf ein minus mehr als plus

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #4 am: Dezember 04, 2010, 21:57:03 pm »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
ausserdem ist "ticket =" eine völlig unnötige phrase, funktioniert genauso ohne
Wie soll diese Zeile:
Zitat
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
denn funktionieren, ohne sich den return der OrderSend zu merken???
Chleudere den Purchen zu Poden!

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
    • Beiträge: 1635
    • Karma: +424/-12
    • Mitglied seit:
      25 Jul 2008

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #5 am: Dezember 04, 2010, 22:04:48 pm »
Ich lass mir das Ticket auch immer ausgeben ist sicherer und schadet nicht. Vorallem wenn man
beim Erfolgreichen absenden des Trades seine OpenTrades hochzählen will oder sowas.

Wie gesagt darauf achten das es 4 und 5 Digits Broker gibt. Bei letzterem würde eine TP angabe von 30 ein OrderSend Error ausgeben weil 3 Pips (5 Digit) zu nah am Markt ist. Am besten einfach mit "Point" abeiten das gibt bei 4 Digits 0.0001 zurück bzw. 0.00001 bei 5 Digits damit dividiert kriegt man an auch das Richtige "Pip Format" was du dann z.B. auf Bid drauf addieren oder abziehen kannst um ein gültigen TP oder SL zuhaben.

  • Ist Forum süchtig
  • ****
    • Beiträge: 1567
    • Karma: +431/-289
    • Mitglied seit:
      16 Jun 2009

  • Vintage Carbon Backgammon Spinning Bubbles Air Traffic Chief 4 Wheels Madness
    Cryptraider Skidwrx Formula Fun
  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #6 am: Dezember 04, 2010, 23:04:43 pm »
Zitat
Wie soll diese Zeile:
Zitat

    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))


denn funktionieren, ohne sich den return der OrderSend zu merken???

ja du hast recht
aber "ticket" ist nur eine integer die sich nur durch die for schleiche hochzählt

ich würde das sowieso anders schreiben
weil den print für die gesetzte order würde ich gleich dranhängen, und wenn ein error kommt würde ich den unten weiterlaufen lassen

ich selektiere hier ja eine order die ich gerade aufgemacht habe

The biggest drawdown is ahead of you. (from Joel R.)

aktueller Tetris Rekordhalter!!!!!!!!!!!!!!!!

warum ist mein karma positiv??????? bitte immer auf ein minus mehr als plus

  • Buchstabensortierer
  • ***
    • Beiträge: 19
    • Karma: +0/-0
    • Mitglied seit:
      30 Nov 2010

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #7 am: Dezember 04, 2010, 23:12:20 pm »
Also ja, es ist der Fehler 130.
Jetzt hab ich TP und Sl erhöht:

//---- input parameters
extern double    TP=24.0;
extern double    Sl=22.0;

und habe weiters OrderSend() und OrderModify() verändert:

ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"My EA",12345,0,Green);
OrderModify(ticket,0,NormalizeDouble(Ask+Sl*Point,Digits),NormalizeDouble(Ask+TP*Point,Digits),0,Green);

Und eine Buy Position geht der EA jetzt auch ein ("mit gleichbleibenden TPSL"), aber halt nur die eine. Bringt dann einen Fehler bei der OrderModify() und bringt dann "Tester: order#1 is closed."
Also ist OrderModify() ja wohl schonmal nicht nötig?!

Wie wichtig sind denn überhaupt die "Regeln" des Brokers, wenn ich doch so wie so nur Backteste?
Wie wird da überhaupt entschieden, welche Spreads gelten, wenn man über einen langen Zeitraum backtestet? Wie schon zuvor gepostet wurde, verändern die sich zum Wochenende hin.
Und wieso kann ich bei "Experteneigenschaften" auswählen, ob es meine TP/SL überhaupt geben soll (zumindest würd ichs so mal intereptieren, da "Haken setzen"). Und Werte können dort an TPSL auch übergeben werden. Werden meine im Code angegeben Werte dann mit denen ersetzt?

Hoffentlich waren das jetzt nicht zu viel Fragen :)

  • Buchstabensortierer
  • ***
    • Beiträge: 19
    • Karma: +0/-0
    • Mitglied seit:
      30 Nov 2010

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #8 am: Dezember 04, 2010, 23:14:03 pm »
Ach und grad fällt mir auf, dass die Position nur geschlossen wurde, weil der TestZeitraum zuende war. Also TPOrder hat nicht geklappt aber das muss am OrderModify() Error liegen.

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
    • Beiträge: 1502
    • Karma: +733/-4
    • Mitglied seit:
      14 Jul 2008
  • Broker: IBFX AU, IBFX US

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #9 am: Dezember 05, 2010, 01:59:29 am »
hier die lösung, da es sich ja um eine BUY order handelt muss also der SL wo sein? natürlich unterhalb des einstiegspreises.
kleiner vorzeichenfehler beo ordersend. anstatt :

ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask+Sl*Point,Ask+TP*Point,"My EA",12345,0,Green);

muss rein:

ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-Sl*Point,Ask+TP*Point,"My EA",12345,0,Green);
Copyright © 2008-2012
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen

  • Gelegenheitsschreiber
  • *
    • Beiträge: 35
    • Karma: +5/-0
    • Mitglied seit:
      10 Mar 2010
  • Broker: Alpari

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #10 am: Dezember 05, 2010, 10:37:42 am »
**lol**

das sollte wohl ein Test sein? Ich hab mich schon gewundert dass es so viele Antworten gab ohne den offensichtlichen Fehler zu bemerken.

PriNova hat auf jeden Fall bestanden  ;D

 ;) marc

  • Gehört zum Inventar
  • ***
    • Beiträge: 1084
    • Karma: +429/-4
    • Mitglied seit:
      31 Dec 2008
  • Broker: RBS

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #11 am: Dezember 05, 2010, 18:32:20 pm »
Völlig ok. Aber Fehler hin, Fehler her. Mit diesem Fehler gehts natürlich sicherlich nicht, aber auch nicht ohne

1. ausreichenden Abstand des SL und TP zum Spread
2. falls nötig der Berücksichtigung der Ordersend-Spezifitäten (Einbau des OrderModify()-Befehls)
3. der Berücksichtigung der 4- oder 5-Digit-Broker.

Also könnte der "totsichere" Code unter Berücksichtigung von Punkt 2. und 3. (für 1. muß jeder selber sorgen!) etwa so aussehen:

nach dem #property -Teil
sollte dann #include <stdlib.mqh>
folgen, um die Errrors der Ordersendung und -bearbeitung anzeigen zu können!

in die Init()-Routine:
iDigit = 10 * (Digits == 3 || Digits == 5) + (Digits == 2 || Digits == 4);                                  //Feststellung: 4- oder 5-Punkt-Broker

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
int ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"My EA",12345,0,Green);
if(ticket < 0) {
   string ErrorText = ": BuyOrder failed!";
   int err = GetLastError();
   Alert(Symbol(), ErrorText, " Error(", err,"): ", ErrorDescription(err));
   return;
}
for(int icnt = 0; icnt < OrdersTotal(); icnt++) {
   if (OrderSelect(icnt, SELECT_BY_POS, MODE_TRADES) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == 12345) {
         if (OrderType() == OP_BUY) {
            if (OrderStopLoss() == 0 && OrderTakeProfit() == 0) {
               bool Ans = OrderModify(OrderTicket(), OrderOpenPrice(), Normalizedouble(OrderOpenPrice()-Sl*Point*iDigit,Digits), NormalizeDouble(OrderOpenPrice()+TP*Point*iDigit,Digits), 0, 0);
               if(!Ans) {
                  ErrorText = ": Modify-BuyOrder failed!";
                  err = GetLastError();
                  Alert(Symbol(), ErrorText, " Error(", err,"): ", ErrorDescription(err));
                  return;
               }
            }   
         }           
      }
   }
}

Nun könnte man zur Codevereinfachung und Verallgemeinerung die Fehlerroutine noch auslagern und der Lotzahl, Slippage und MagicNumber als Variable definieren.

Viel Erfolg!

traderdoc
« Letzte Änderung: Dezember 05, 2010, 19:20:33 pm von traderdoc »
Pokerregel: "Auch bei dem Anschein eines sicheren Gewinnes, muss man ablassen können."

  • Ist Forum süchtig
  • ****
    • Beiträge: 1567
    • Karma: +431/-289
    • Mitglied seit:
      16 Jun 2009

  • Vintage Carbon Backgammon Spinning Bubbles Air Traffic Chief 4 Wheels Madness
    Cryptraider Skidwrx Formula Fun
  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #12 am: Dezember 05, 2010, 18:39:58 pm »
also mal ehrlich
ich würde den SL AUF ALLE FÄLLE, UNTER KEINEN UMSTÄNDEN ANDERS, mit dem ordersend(xxx) setzten,
wenn der broker das nicht unterstsützt, dann such ich mir einen anderen broker

keiner kann mir garantieren, dass die verbindung, oder die modify noch ausgeführt wird wenn die order erst mal drin ist
The biggest drawdown is ahead of you. (from Joel R.)

aktueller Tetris Rekordhalter!!!!!!!!!!!!!!!!

warum ist mein karma positiv??????? bitte immer auf ein minus mehr als plus

  • Gehört zum Inventar
  • ***
    • Beiträge: 1084
    • Karma: +429/-4
    • Mitglied seit:
      31 Dec 2008
  • Broker: RBS

  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #13 am: Dezember 05, 2010, 18:47:23 pm »
dann fallen für dich so einige Broker aus der Liste raus.
Pokerregel: "Auch bei dem Anschein eines sicheren Gewinnes, muss man ablassen können."

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Antw:Erste MQL4 Versuch...
« Antwort #14 am: Dezember 05, 2010, 20:58:09 pm »
Mag sein dass einige Broker rausfallen, aber hier gebe ich forexeler eindeutig Recht! Das grenzt von seiten der Broker auch schon an ....
Chleudere den Purchen zu Poden!



 

Ähnliche Themen

  Betreff / Begonnen von Antworten Letzter Beitrag
15 Antworten
4224 Aufrufe
Letzter Beitrag Juni 19, 2011, 00:43:25 am
von Egetuerk
92 Antworten
10848 Aufrufe
Letzter Beitrag September 21, 2011, 13:38:37 pm
von Stevywin
39 Antworten
7255 Aufrufe
Letzter Beitrag Oktober 10, 2011, 15:26:31 pm
von Covolt
1 Antworten
880 Aufrufe
Letzter Beitrag Mai 08, 2011, 07:46:48 am
von fxdaytrader
3 Antworten
313 Aufrufe
Letzter Beitrag Juli 28, 2011, 18:41:05 pm
von Millionar
12 Antworten
639 Aufrufe
Letzter Beitrag August 18, 2011, 16:23:56 pm
von UP49
24 Antworten
687 Aufrufe
Letzter Beitrag Dezember 18, 2011, 17:06:23 pm
von blutkehlchen
2 Antworten
179 Aufrufe
Letzter Beitrag April 24, 2012, 09:58:46 am
von Shrike


ChartTec´s World Topsites