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: 3820
Beiträge: 36899
Benutzer: 6.067
Aktive Benutzer: 491
Links: 80
Wir begrüßen unseren neuesten Benutzer: POCJonah7
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 6 Stunden
- POCJonah7
vor 13 Stunden
- flowi88
vor 13 Stunden
- dealtycoon
vor 17 Stunden
- VicenteWuc
vor 20 Stunden
- sazaron

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 78
Gesamt: 80
Team: 0
Team:  
Benutzer:  Domke01, mahnwache
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 22.11.12
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 4
bengaagneb befindet sich auf einem aufstrebenden Ast
Standard EA is not trading alone

Hallo,

ich bin noch neu und fange gerade an mich mit eas und der programmierung zu beschäftigen

Ich habe mit erst mal einen einfach mit dem ExpertAdvisorBuilder gebastelt und versuche den nun zu verstehen und am Code zu verändern.

Dabei habe ich sofort ein Problem festgestellt. Mein EA handelt nicht alleine, ich kann AKS manuell bestätigen, aber sobald ich ihn alleine handeln lassen möchte, macht er garnichts mehr. Ich vermute der Fehler liegt irgendwo in dem folgenden Code, aber ich verstehe den nicht:

Zitat:
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("Risiko ist zu hoch! ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
Ich würde mich freuen, wenn mir jemand weiter helfen kann.

VG Benga
  #2 (permalink)  
Alt 23.11.12
Mitglied
 
Registriert seit: Mar 2012
Beiträge: 131
Trabo befindet sich auf einem aufstrebenden Ast
Standard

Vielelicht hast du ja unter der option nciht alle hacken gesetzt.. Sodass er nur trades eingeht die du auch manuell bestätigts...
  #3 (permalink)  
Alt 23.11.12
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 4
bengaagneb befindet sich auf einem aufstrebenden Ast
Standard

Ne, ich habe 4 andere EAs am laufen. nur der macht so ein unsinn. Wenn ich manuell bestätigen anmache, dann tradet er (ich muss es halt nur manuell bestätigen). Er soll das aber alleine machen. und wenn ich die manuell trading option weg mache, die live trading aber anlasse, dann macht er garnichts mehr. außer meine manuell gemachten trades einfach zu schließen ^^
  #4 (permalink)  
Alt 24.11.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

hast du einen ECN Broker?
Dann must du eine Order erst ohne SL und TP setzen und anschließend per OrderModify hinzufügen.

z.B.
Code:
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
OrderModify(ticket,OrderOpenPrice(),StopLossLevel,TakeProfitLevel,0,0);
Gruß
naranjoe
  #5 (permalink)  
Alt 24.11.12
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 4
bengaagneb befindet sich auf einem aufstrebenden Ast
Standard

DANKE!

Ich habe einen ECN Broker, aber ich dachte er ignorierte die SL und TP einfach, dass er dann die Punkte einfach nur nicht einträgt.
  #6 (permalink)  
Alt 30.11.12
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von naranjoe Beitrag anzeigen
Hallo,

hast du einen ECN Broker?
Dann must du eine Order erst ohne SL und TP setzen und anschließend per OrderModify hinzufügen.

z.B.
Code:
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
OrderModify(ticket,OrderOpenPrice(),StopLossLevel,TakeProfitLevel,0,0);
Gruß
naranjoe
Kann ich diese Modifikation auch dann machen wenn ich keinen ECN Broker habe oder geht das nur in dieser Kombination?

VG und Danke Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #7 (permalink)  
Alt 30.11.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Das sollte so mit jedem Broker funktionieren.

Gruß
naranjoe
  #8 (permalink)  
Alt 28.11.13
Neues Mitglied
 
Registriert seit: Nov 2013
Beiträge: 2
Mizu13 befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen

Das Thema scheint zwar schon etwas älter zu sein, aber ich denke mein Probem passt hier am besten hinein:

Ich bin gerade dabei mich ein wenig in mql4 ein zu arbeiten und habe mal versucht einen EA zu programmieren, der (der einfachheit halber bei der Initialisierung) einen Kaufbefehl ausführt.
nach langem herumbasteln und durch miteinbeziehen der Info dieses Threads hab ich jetzt folgenden Code:

Code:
extern double    lot=0.1;
extern int    takeprofit=40;
extern int    stoploss=40;
extern int    magic=12331;
int             ticket=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Alert("EA erfolgreich geladen!");
   openbuy();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+





void openbuy()
{
   ticket=OrderSend(Symbol(), OP_BUY, lot, Ask, 3, NULL, NULL, NULL, magic, Blue);
   OrderModify(ticket, OrderOpenPrice(), Ask-stoploss*Point, Ask+takeprofit*Point,0, Blue);
   OrderPrint();
}
Leider musste ich beim testen feststellen, dass der SL und der TP nicht angepasst werden :/
Kann mir vieleicht jemand sagen, was ich falsch gemacht habe?

Liebe Grüsse Mizu


PS: Das Konto ist überigens ein Demokonto von easy-forex, falls das eine Rolle spielen sollte...
  #9 (permalink)  
Alt 28.11.13
Premium Mitglied
 
Registriert seit: Mar 2013
Beiträge: 332
feelfree befindet sich auf einem aufstrebenden Ast
Standard

Moin Mizu,

der Aufruf openbuy() gehört in die int start() Sektion.

int init() wird nur ein Mal bei der Initialisierung aufgerufen und dann nicht mehr.
Der OrderModify Befehl wird vermutlich nicht ausgeführt weil er erstens unmittelbar auf OrderSend folgt aber die Bestätigung/Rückmeldung deines Brokers noch nicht erfolgt ist.
Und zweitens du die Ticketnummer gar nicht kennen kannst weil sie von deinem Broker vergeben wird.

Für den zweiten Versuch musst du also erst die gültige Ticketnummer ermitteln bevor du sie an die OrderModify Funktion übergibst und dann klappt's auch mit der Änderung.

Ich würde die Funktionen sauber trennen.
Grob skizziert:
if Order < 1 {OpenBuy()}
if Order > 0 {OrderModifiy()}

Grüße
Dan
  #10 (permalink)  
Alt 29.11.13
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

@feelfree

ticket=OrderSend(...)
gibt natürlich erstmal die Tickernummer zurück.
Alles läuft beim MQL der Reihe nach, also sequenziell ab.
ticket ist dann mit der vergebenen Ticketnummer belegt.

Allerdings sollte man vor einem OrderModify(...)
zuerst OrderSelect(ticket,...) benutzen.
Wenn der OrderSelect positiv ist, dann erst sollte man OrderModify(...) aufrufen.

Gruß Joe
Thema geschlossen

Lesezeichen

Stichworte
ea, ea handelt nicht, expert-advisor, expert-advisor handelt nicht, expertadvisorbuilder, mql4, programmierng, programmierung metatrader


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 08:53 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.
-----------------------------------------------------------------------------------------------------------------------------