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: 3824
Beiträge: 36908
Benutzer: 6.074
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: hmf44
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einem Tag
- hmf44
vor einem Tag
- Crossa
vor einem Tag
- snatshit
vor 2 Tagen
- Roerich
vor 2 Tagen
- John_Liver...

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 47
Gesamt: 49
Team: 0
Team:  
Benutzer:  Dennis605, jimydirektsaft
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 25.02.16
Neues Mitglied
 
Registriert seit: Dec 2011
Beiträge: 3
xman256 befindet sich auf einem aufstrebenden Ast
Standard Trailing Stop und Takeprofit

Hallo
Ich möchte durch einen EA im laufenden Betrieb den Stop und den Takeprofit ändern. Leider funktioniert mein Programm mit dem ModifyOrder nicht. Was habe ich falsch gemacht ? Wer hat eine Idee ?

ob = Open Buy Kurs
os = Open Sell Kurs
ab = Sollabstand zum Eröffnungskurs

void CheckForClose()
{ bool res;

//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;

//---- check order type
if(OrderType()==OP_BUY)
{
if ((Bid+ab*PointX())>ob)
{
ob=Bid+ab*PointX();
slb=Bid-ab*PointX();
res=OrderModify(OrderTicket(), OrderOpenPrice(), slb,ob,0,Blue);
}

}
}
if (OrderType()==OP_SELL)
{
if ((Ask-ab*PointX())<os)
{
os=Ask-ab*PointX();
sls=Ask+ab*PointX();
res=OrderModify(OrderTicket(), OrderOpenPrice(), sls,os, 0,Red);
}
}
}

Danke im vorraus
xman256
  #2 (permalink)  
Alt 25.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 135
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Hi, ich baue, wenn überhaupt, Trailingstopps direkt in den EA. Hier ist eine ältere Variante, die selbstständig läuft. Bitte zuerst unbedingt in einer Demo probieren!!" Achtung, das Teil ändert den TP nur, wenn der Trailingstopp erreicht wurde. Viel Spaß!

#property copyright "Peter"
#property link ""

#include <stdlib.mqh>
#include <WinUser32.mqh>

// exported variables
extern int MagicBuy;
extern int TrailingStopBuy = 30;
extern int NewTakeProfitBuy = 40;
extern int TrailingGapBuy = 20;
extern int MagicSell;
extern int TrailingStopSell = 30;
extern int NewTakeProfitSell = 40;
extern int TrailingGapSell = 20;

double PipValue=1;
bool Terminated = false;
string LF = "\n";
int NDigits = 4;
int ObjCount = 0;
int current = 0;

int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll();
Comment("");
return (0);
}

int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}

OnEveryTick();
return (0);
}

void OnEveryTick()
{
PipValue = 1;
if (NDigits == 3 || NDigits == 5) PipValue = 10;

IfOrderExistsBuy();
IfOrderExistsSell();

}

void IfOrderExistsBuy()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicBuy)
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}

if (exists)
{
TrailingStopBuy();

}
}

void TrailingStopBuy()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicBuy)
{
double takeprofit = OrderTakeProfit();

if (OrderType() == OP_BUY && Ask - OrderOpenPrice() > TrailingStopBuy*PipValue*Point)
{
if (OrderStopLoss() < Ask-(TrailingStopBuy+TrailingGapBuy)*PipValue*Point)
{
if (NewTakeProfitBuy != 0) takeprofit = Ask+(NewTakeProfitBuy + TrailingStopBuy)*PipValue*Point;
bool ret1 = OrderModify(OrderTicket(), OrderOpenPrice(), Ask-TrailingStopBuy*PipValue*Point, takeprofit, OrderExpiration(), Green);
if (ret1 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
if (OrderType() == OP_SELL && OrderOpenPrice() - Bid > TrailingStopBuy*PipValue*Point)
{
if (OrderStopLoss() > Bid+(TrailingStopBuy+TrailingGapBuy)*PipValue*Poin t)
{
if (NewTakeProfitBuy != 0) takeprofit = Bid-(NewTakeProfitBuy + TrailingStopBuy)*PipValue*Point;
bool ret2 = OrderModify(OrderTicket(), OrderOpenPrice(), Bid+TrailingStopBuy*PipValue*Point, takeprofit, OrderExpiration(), Green);
if (ret2 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
}
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));

}

void IfOrderExistsSell()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicSell)
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}

if (exists)
{
TrailingStopSell();

}
}

void TrailingStopSell()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicSell)
{
double takeprofit = OrderTakeProfit();

if (OrderType() == OP_BUY && Ask - OrderOpenPrice() > TrailingStopSell*PipValue*Point)
{
if (OrderStopLoss() < Ask-(TrailingStopSell+TrailingGapSell)*PipValue*Point)
{
if (NewTakeProfitSell != 0) takeprofit = Ask+(NewTakeProfitSell + TrailingStopSell)*PipValue*Point;
bool ret1 = OrderModify(OrderTicket(), OrderOpenPrice(), Ask-TrailingStopSell*PipValue*Point, takeprofit, OrderExpiration(), Green);
if (ret1 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
if (OrderType() == OP_SELL && OrderOpenPrice() - Bid > TrailingStopSell*PipValue*Point)
{
if (OrderStopLoss() > Bid+(TrailingStopSell+TrailingGapSell)*PipValue*Po int)
{
if (NewTakeProfitSell != 0) takeprofit = Bid-(NewTakeProfitSell + TrailingStopSell)*PipValue*Point;
bool ret2 = OrderModify(OrderTicket(), OrderOpenPrice(), Bid+TrailingStopSell*PipValue*Point, takeprofit, OrderExpiration(), Green);
if (ret2 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
}
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));

}

int deinit()
{
if (false) ObjectsDeleteAll();

return (0);
}
  #3 (permalink)  
Alt 28.03.16
Neues Mitglied
 
Registriert seit: Feb 2016
Beiträge: 19
Bööörni-breuser befindet sich auf einem aufstrebenden Ast
Standard EA mit Trailingstop

Hallo
Habe mal deinen EA mit Trailingstop ausprobiert handelt aber nicht auf EUR-USD
Dann habe ich etwas modefiziert auf zusätzliche Pending Order handelt aber auch nicht. Kanst du mir einen Tipp geben was falsch ist.
Programm anbei.
MfG
Bööörni-breuser http://www.expert-advisor.com/forum/...1&d=1459161918
Angehängte Dateien
Dateityp: mq4 Test TrailingStop neu.mq4 (9,3 KB, 9x aufgerufen)
  #4 (permalink)  
Alt 28.03.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 565
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Bin jetzt alles Andere als nen Profi, aber ich hab nirgendwo Befehle zur
Orderabgabe gefunden.

Ob das mit Hour/Min so hinhaut weiß ich auch nicht.
  #5 (permalink)  
Alt 28.03.16
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo Bööörni-breuse,

ich habe mal kurz in deinen angehängten EA geschaut.
Verwende bitte Tabulatoren oder Leerzeichen, um den Code leserlich zu machen.

Ein paar Punkte die mir aufgefallen sind:
1. TrailingStopBuy der Name wird als externe Variable und als Funktionsname verwendet.
2. Wenn du nur eine sell Order hast, wird die Funktion TrailingStopBuy nicht durchlaufen!
3.Der Kram mit dem (exists) wird nicht benötigt, du kannst die Funktion immer aufrufen, wenn keine passende Order gefunden wird, passiert auch nichts.
4,Konzentriere dich zuerst auf eine Funktion und arbeite dort so lange, bis sie funktioniert. Auch ich, trotz jahrelanger Erfahrung, kann nicht sofort den kompletten Code mit allen Varianten verstehen. Ich arbeite mich von Funktion zu Funktion vor, bis (hoffentlich) alles funktioniert.

Hier mal ein Code, ich habe ihn nicht getestet, allerdings sollte jetzt einiges klarer sein:
Code:
void TrailingStopBuy()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
{
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
   {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicBuy)
      {
         double takeprofit = OrderTakeProfit();
         double NewStopValue = Ask-TrailingStopBuy*PipValue*Point;
         if (OrderType() == OP_BUY && OrderStopLoss() < NewStopValue)
         {
            if (NewTakeProfitBuy != 0) 
               takeprofit = Ask+(NewTakeProfitBuy + TrailingStopBuy)*PipValue*Point;
            bool ret1 = OrderModify(OrderTicket(), OrderOpenPrice(), NewStopValue, takeprofit, OrderExpiration(), Green);
            if (ret1 == false)
               Print("OrderModify() error - ", ErrorDescription(GetLastError()));
            
         }
         
         NewStopValue = Bid+TrailingStopBuy*PipValue*Point;
         if (OrderType() == OP_SELL && OrderStopLoss() > NewStopValue)
         {
            if (NewTakeProfitBuy != 0) 
               takeprofit = Bid-(NewTakeProfitBuy + TrailingStopBuy)*PipValue*Point;
            bool ret2 = OrderModify(OrderTicket(), OrderOpenPrice(), Bid+TrailingStopBuy*PipValue*Point, takeprofit, OrderExpiration(), Green);
            if (ret2 == false)
               Print("OrderModify() error - ", ErrorDescription(GetLastError()));
         }
      }
   }
   else
      Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
   }
}

Gruß

yytrader
Thema geschlossen

Lesezeichen

Stichworte
mql4, programmierung, programmierung metatrader, takeprofit, trailing, trailingstop, trailingtakeprofit


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 16:29 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.
-----------------------------------------------------------------------------------------------------------------------------