Jump to content
Tom Next - Daytrading Community

Recommended Posts

Posted (edited)

Hallo Zusammen,

 

seit ein paar Tagen beschäftige ich mich mit dem Metatrader und will ein Script für den automatischen Handel schreiben.

 

Leider ist die einzige Programmiersprache die ich beherrsche „AmigaBasic“, Vielleicht kennt´s noch jemand!:)

 

Wenn ich einen bestimmten Intervall erzeugen möchte, wie muss das Script aussehen?

 

Das Script soll jede Stunde, unabhängig vom Kurs usw. einen Trade mit einer bestimmten lot Anzahl „Short“ kaufen.

z.B. alle 60 Minuten, 1lot short auf dem DowJones.

 

Das wars schon

vielen Dank im Voraus

Edited by ronner
Titel angepasst
Posted
Wenn ich einen bestimmten Intervall erzeugen möchte, wie muss das Script aussehen?

 

Das Script soll jede Stunde, unabhängig vom Kurs usw. einen Trade mit einer bestimmten lot Anzahl „Short“ kaufen.

z.B. alle 60 Minuten, 1lot short auf dem DowJones.

 

Du startest es dann einfach auf dem Timeframe den du möchtest (in dem Fall H1).

 

Dann nimmst du so ein Gerüst:

 

static int prevtime = 0;

int init()
 {
  return(0);
 }

int deinit()
 {
  return(0);
 }

int start()
 {

  if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun
   return(0);
  
  // hier kommt dein Code rein, der einmal pro Bar ausgeführt wird

  prevtime = Time[0];
  return(0);
 }

 

Die Variable mit static wird über die einzelnen Aufrufe bei jedem Tick gemerkt, deshalb funktioniert das.

 

HTH

 

Lutz

Posted

Hallo Lutz,

 

danke für die Prompte Hilfe.

 

Wie sieht der Code aus der einmal pro Bar ausgeführt wird, wenn die Order z.B. wie folgt ist:

 

Instrument: DowJones

Einheiten: 1lot

Richtung: short

Limit: 50

Stop: 50

Posted
Wie sieht der Code aus der einmal pro Bar ausgeführt wird, wenn die Order z.B. wie folgt ist:

...

 

Das geht mit dem Befehl OrderSend, Details musst du dir raussuchen. Hilfe kommt über F1 wenn der Cursor auf OrderSend steht.

 

Lutz

Posted

aja danke. Ich habe mich mal dran versucht:

 

if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun

return(0);

 

OrderSend(string symbol, OP_SELL cmd, 1 volume, Ask price, int slippage,

50 stoploss, 50 takeprofit, string comment=NULL, int magic=0,

datetime expiration=0, color arrow_color=Red)

 

prevtime = Time[0];

return(0);

 

Bekomme beim Kompilieren jede Menge fehlermedlungen wie variable not defined, variable expected

Posted

sollte wohl eher so aussehen ;)

 

  if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun
      return(0);
      
  OrderSend(Symbol(), OP_SELL, 1, Ask, 3,  50 , 50 );
 
  prevtime = Time[0];
  return(0);

 

hth

Posted
  OrderSend(Symbol(), OP_SELL, 1, Ask, 3,  50 , 50 );

 

Ich glaube bei SL und TP müssen direkt die Preise rein. also in dem Fall von OP_SELL Ask+0.002 und Ask-0.005

 

Lutz

Posted
Ich glaube bei SL und TP müssen direkt die Preise rein. also in dem Fall von OP_SELL Ask+0.002 und Ask-0.005

 

Natürlich, mein Fehler :news: (kommt davon wenn man nur die eigenen Funktionen verwendet wo das automatisch umgerechnet wird :news: )

 

EDIT: zusätzlich wird ja nicht am Ask verkauft... geändert auf Bid

 

also wirklich korrekt wäre:

 

if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun
      return(0);
      
  OrderSend(Symbol(), OP_SELL, 1, Bid, 3,  Bid+50*Point , Bid-50*Point);
 
  prevtime = Time[0];
  return(0);

Posted (edited)

Hallo Zusammen und vielen Dank für eure Hilfe.

 

Der Code sieht im Moment folgendermaßen aus:

static int prevtime = 0;

int init()
 {
  return(0);
 }

int deinit()
 {
  return(0);
 }

int start()
 {


if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun
return(0);

OrderSend(Symbol(), OP_SELL, 1, Bid, 3, Bid+50*Point , Bid-50*Point);

prevtime = Time[0];
return(0);


 }

Wenn ich das jetzt im backtest (XTB-Trader(Periode "Daily", Modell "Jedes Ticksignal")) laufen lasse, erhalte ich kein Ergebnis?

Sollte er jetzt nicht jede Stunde einen Trade platzieren?

Edited by Mythos
Code tags eingefügt. Bitte Sourcecode immer in Codetags einbetten
Posted

ja, habe schon öfters backtests gemacht. Lasse es auf dem EURUSD laufen, die Daten sind alle gedownloaded.

 

Was mir an dem pdf aufgefallen ist, verschiedene Menüs wie "imput" im Experten Eigenschaften und "Bericht" im backtestprogramm fehlen bei mir, naja ob das jetzt relevant ist!?

 

Habs nochmal durchlaufen lassen, er macht den test, dauert ca. 16 Sekunden, im Ergebnis hat er keinen Trade gesetzt?

Posted

Da werden dir andere bessere Antworten geben können, MQL ist nicht mein Ding,

hatte dir das PDF nur verlinkt weil die Frage heute schon mal in einem anderen Thread aufgekommen ist.

Posted
Habs nochmal durchlaufen lassen, er macht den test, dauert ca. 16 Sekunden, im Ergebnis hat er keinen Trade gesetzt?

 

Ich vermute das Volumen ist mit 1 Lot zu gross, setze mal 0.1 oder 0.01 ein.

 

Fehlermeldungen zum BT stehen auch im Journal.

 

Lutz

Posted
hab ich gemacht, im Journal steht:

 

- There were 1 passes done during optimization, 1 results have been discarded as insignificant

- optimization stopped

 

Du hast Optimierung angehackt. Dann rechnet er eine Optimierung und zeigt dir standardmäßig nur ergebnisse die positiv sind.

Mögliche Lösungen:

1. Optimierung nicht mehr anhacken

2. im Reiter "Ergebnisse der Optimierung" : Rechte Maustaste und "Nutzlose Resultate überspringen" nicht anhacken.

 

PS sourcecode bitte in tags einbetten für die lesbarkeit. (Button über dem Texteditor "In Code Tag einbetten")

Posted

jawohl, dass hat geklappt. Er stetzt zwar immernoch keine Trades, bringt aber jetzt andere Fehlermeldungen:

 

- OrderSend error 131

- OrderSend error 4107

- invalid price 1,36765000 for OrderSend function

 

und das ca. 50mal

 

Ich füge den kompletten Code nochmal bei!:)

 

static int prevtime = 0;

int init()
 {
  return(0);
 }

int deinit()
 {
  return(0);
 }

int start()
 {


if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun
return(0);

OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, Bid+50*Point , Bid-50*Point);

prevtime = Time[0];
return(0);


 }

Posted

Die MQL Hilfe hilft:

ERR_INVALID_TRADE_VOLUME 131 Invalid trade volume.

Vermutlich sind MicroLots nicht erlaubt, versuchs mal mit 0.1

 

ERR_INVALID_PRICE_PARAM 4107 Invalid price.

 

Du verwendest vermutlich die Datenhistory von MetaQuotes, die ist 5 stellig, dein Broker kann vermutlich aber nur 4 stellig jammert also wenn du diese Daten direkt verwendest.

 

Nimm am besten statt dem Bid sowas:

double myBid= NormalizeDouble(Bid,Digits);
OrderSend(Symbol(), OP_SELL, 0.1, myBid, 3, myBid+50*Point , myBid-50*Point);

Posted

Als überwiegend Silent Reader reichen mir für meine Klicktätigkeiten 5 % auf 10 Jahre.

Nur die Gewinne, ist wohl klar :wink:

Posted

wenn ich einen backtest hinbekomme, der 20 Jahre übersteht!:)

 

Ich dachte, wenn ich das Script jetzt long anwenden will, muss ich nur aus „OP_SELL“ - „OP_BUY“ machen?

Posted
Ich dachte, wenn ich das Script jetzt long anwenden will, muss ich nur aus „OP_SELL“ - „OP_BUY“ machen?

 

würde stimmen, wenn bei einer Kauforder der Stoploss über dem Kurs und der TP unter dem Kurs stehen würde ;)

Diese Werte musst du auch anpassen. Und natürlich Bid/Ask wieder tauschen.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...