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: 4127
Beiträge: 38794
Benutzer: 6.415
Aktive Benutzer: 224
Links: 80
Wir begrüßen unseren neuesten Benutzer: Pedro2020
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 18:12).
Neue Benutzer:
vor 9 Stunden
- Pedro2020
vor 15 Stunden
- Code765
vor einem Tag
- trufx2895
vor einem Tag
- Ado
vor 2 Tagen
- Tradingfre...

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 76
Gesamt: 78
Team: 0
Team:  
Benutzer:  daybyter, MA-EA
Freunde anzeigen

Empfehlungen

Like Tree3Likes
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jan 2019
Beiträge: 11
dd2509 befindet sich auf einem aufstrebenden Ast
Smile Ausführen von Buy und Sell Order nacheinander

Hallo liebe Traderfreunde,
ich bin neu in der Welt des MQL 4 Programmierens. Ich möchte ein Programm schreiben, dass mir einfach nacheinander Buy und Sell Order ausführt. Wenn eine Buy Order ausgeführt ist dann möchte ich danach eine Sell Order ausführen. Leider führt der Code nur die Buy Orders in der richtigen Reihenfolge aus, sobald ich den OP_BUY Befehl durch OP_SELL ersetze funkt garnichts mehr
Was kann ich machen ?

extern int TP = 20;
extern int SL = 10;


void OnTick()
{
if(OpenPosCount(OP_BUY)==0){
OrderSend (Symbol(), OP_BUY,0.0, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue);
}
if(OpenPosCount(OP_BUY)==1){
OrderSend (Symbol(), OP_BUY,0.00, Price, 3, Price-SL*10*Point,Price1+TP*10*Point, "MarketOrder", 123456, 0, Blue);
}
if(OpenPosCount(OP_BUY)==2){
OrderSend (Symbol(), OP_BUY,0.00, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue);
}
}
int OpenPosCount(int Orderart)
{
int OffenePositionen=0;
for (int x=0;x<=OrdersTotal()-1;x++)
{
if (OrderSelect(x,SELECT_BY_POS)==true)
{

if(OrderSymbol()==Symbol()&&OrderType()==Orderart)
OffenePositionen++;}}
return(OffenePositionen);
}


Nette Grüße
dd
Mit Zitat antworten
  #2 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 715
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Beides öffnen, wenn gar nix offen ist. z.B.
Code:
for(i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol())bool Buy_Mark_inv=true;
    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol())bool Sel_Mark_inv=true; } }
Code:
if( ... Buy_Mark_inv==false && Sel_Mark_inv==false ) {

  if( Buy==true )OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_SL,Buy_TP,0,Buy_MN,0,MediumBlue);

  if( Sell==true )OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_SL,Sel_TP,0,Sell_MN,0,BurlyWood); }
dd2509 likes this.
Mit Zitat antworten
  #3 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jan 2019
Beiträge: 11
dd2509 befindet sich auf einem aufstrebenden Ast
Standard D

Ich verstehe gerad garnchts...

Ich möchte bei einem bestimmten Preis eine Buy Order öffnen, nur wenn diese geöffnet ist, möchte ich bei einem bestimmten Preis eine Sell Order öffnen... nicht beide gleichzeitig sondern nacheinander

gruß
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 715
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ach so. Dann probier Stop- oder Limit.


https://docs.mql4.com/trading/ordersend


https://docs.mql4.com/constants/trad...rderproperties
dd2509 likes this.
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 86
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dd2509 Beitrag anzeigen
..., sobald ich den OP_BUY Befehl durch OP_SELL ersetze funkt garnichts mehr
Was kann ich machen ?
Du mußt nicht nur OP_BUY durch OP_SELL ersetzen, sondern auch die SL und TP umkehren.
Und wenn direkt nach der 1. Buy Order eine 1. Sell Order rausgehen soll, mußt Du sehen, ob Dein OpenPosCount(OP_BUY)==1 ist und dann den 1. Verkauf senden. AVT
dd2509 likes this.
__________________
gibt nix mehr zu lachen
Mit Zitat antworten
  #6 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jan 2019
Beiträge: 11
dd2509 befindet sich auf einem aufstrebenden Ast
Standard

Super Danke...
Jetzt führt er mir die erste Sell Position nach der ersten Buy Position aus, leider dann aber die Sell Position mehrfach gleichzeitig... also nicht nur eine Sell Position

if(OpenPosCount(OP_BUY)==0){

OrderSend (Symbol(), OP_BUY,0.10, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue);

}
if(OpenPosCount(OP_BUY)==1){

OrderSend (Symbol(), OP_SELL,0.1, Price1, 3, Price1+SL*10*Point,Price1-TP*10*Point, "MarketOrder", 123456, 0, Red);

} if(OpenPosCount(OP_SELL)==1){

OrderSend (Symbol(), OP_BUY,0.1, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue);
Mit Zitat antworten
  #7 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 715
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Was soll das Ganze überhaupt werden? Willst Du ständig Orders offen haben? Dann öffne mehrere Stop-Orders, jeweils mit eigener MN, eigenem Price, usw.
Mit Zitat antworten
  #8 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.149
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Gut, dann will ich mal zwischengrätschen:
Als Erstes solltest Du Dir bitte angewöhnen, den Code über den Button # zu schreiben, damit man den besser lesen kann.

Wenn Du wirklich nur nach dem Öffnen der ersten! BuyOrder eine erste SellOrder öffnen willst, dann geht da ganz einfach so:
Code:
if (!OrderCheck()) {
   bool res = OrderSend (Symbol(), OP_BUY, 0.1, Ask, 3, NormalizeDouble(Ask-SL*10*Point, Digits), NormalizeDouble(Ask+TP*10*Point, Digits), "MarketOrder", 123456, 0, Blue);
   if (res) {
      OrderSend (Symbol(), OP_SELL, 0.1, Bid, 3, NormalizeDouble(Bid+SL*10*Point, Digits), NormalizeDouble(Bid-TP*10*Point, Digits), "MarketOrder", 123456, 0, Red);
   }
}

bool OrderCheck() {
   for (int x=0; x<=OrdersTotal()-1; x++) {
      if (OrderSelect(x, SELECT_BY_POS)) {
         if (OrderSymbol()== Symbol()) {
         return(true);
      }
   }
   return(false);
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #9 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jan 2019
Beiträge: 11
dd2509 befindet sich auf einem aufstrebenden Ast
Standard

ich glaube ich brauche 2 Zählschleifen, eine für die Buy und eine für die Sell Orders...
Mit Zitat antworten
  #10 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.149
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das hängt jetzt ganz davon ab, was Du eigentlich wirklich wolltest.
Ich habe die Erfahrung über meine jahrelange Auftragsprogrammierung gesammelt, dass sich sehr häufig die Kunden nicht exakt genug ausgedrückt haben und damit etwas anderes programmiert wurde als angedacht.

Daher nochmals mein Appell an alle Fragenden: Überlegt Euch im Vorfeld ganz, ganz genau, was Ihr tatsächlich erreichen wollt.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
order management


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 +2. Es ist jetzt 08:57 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 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.
-----------------------------------------------------------------------------------------------------------------------------