Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43262
Benutzer: 7.223
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 5 Tagen
- Sundaytrad...
vor 5 Tagen
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 430
Gesamt: 430
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree4Likes
  • 1 Post By SusanneH
  • 2 Post By traderdoc
  • 1 Post By SusanneH
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 07.02.17
JEB JEB ist offline
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 13
JEB befindet sich auf einem aufstrebenden Ast
Standard Stop Loss /Trailing Stop an Indikator

Hallo,

ich beschäftige mich seit einigen Tagen intensiver mit dem Programmieren eines EA´s für MT4.

Nun steh ich allerdings voll auf dem Schlauch:
Ich will, dass der Stopp meiner bereits ausgefürten Orders immer dem Bollinger Band nachgezogen wird. Egal ob mit OrderClose oder OrderModify funktioniert es nicht. Das Problem ist, dass die Funktion einmalig ausgeführt wird und dann dort bleibt. Ich hatte die Idee es mit einer Schleife zu versuchen in die ich ein "sleep" mit 15 min verzögerung setze, damit nicht Jede Sekunde der Stop angepasst wird. Hat aber auch nicht wikrlich funktioniert.

Über einen kurzen Code-Schnipsel oder einen Lösungsansatz würde ich mich sehr freuen.

Falls ein solches Thema schon exisitieren sollte würde ich mich über einen kurzen link freuen und möchte mich dafür entschuldigen. Allerdings kam ich mit der Such-Funktion nicht zum Ziel

Lg,
Jakob

ps. so siehts bisher aus:

extern double Ordervol;
extern double StopLoss;
extern double TakeProfit;



void OnTick()
{
int BrokerSpread=MarketInfo (NULL,MODE_SPREAD) ;
double BuySwap=MarketInfo (Symbol (), MODE_SWAPLONG);
double SellSwap=MarketInfo (Symbol (), MODE_SWAPSHORT);

Comment("Kontostand: ",AccountBalance(), "\n",
"Verfügbares Kapital: ",AccountEquity(), "\n",
"Spread: ",BrokerSpread, "\n",
"BuySwap: ",BuySwap, "\n",
"SellSwap: ",SellSwap, "\n");

double BBlow=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_LOW ER,0) ;
double BBhigh=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_UP PER,0) ;

if (Ask>BBhigh)
if (OrdersTotal()==0)
{ Kaufen();}

}


void Kaufen()
{
double BBlow=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_LOW ER,0) ;
OrderSend(Symbol(), OP_BUY,Ordervol,Ask,3,BBlow,(Ask+1.0010),NULL,1,0, Green);

}
  #2 (permalink)  
Alt 08.02.17
Mitglied
 
Registriert seit: Mar 2016
Beiträge: 68
SusanneH befindet sich auf einem aufstrebenden Ast
Standard

Nur kurz und rudimentär:

dein EA läuft per onTick(), also musst du wenn du deine SL/Trail-Funktion (die ich in deinem Code unten niergends sehe) nur alle 15mins aufrufen willst, z.B.: einen Zeitfilter einbauen der dir anspringt wenn 15 mins abgelaufen sind.
(oder du lässt den EA auf M15 laufen und reagierst auf das newBar-Event.

Global: (wird zugewiesen z.B.: wenn du den Trade eröffnest)
datetime lastrail;

onTick:
if ( lasttrail<TimeCurrent()-(60*15) )
{
Trailen();
lasttrail=TimeCurrent();
}
JEB likes this.
  #3 (permalink)  
Alt 08.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das löst man am Besten, unabhängig vom TimeFrame, über einen Timer.
Code:
void OnInit() {
...
EventSetTimer(15*60);  //Klammerausdruck in Sekunden
}

void OnDeinit(const int reason) {
...
EventKillTimer();
}

void OnTimer() {
   SetSL();
}
Diese drei Funktionen müssen so "befüllt" werden, wobei natürlich die aufzurufende Funktion SetSL() natürlich auch einen anderen Namen haben kann.

Somit wäre erst einmal gewährleistet, dass die Funktion, die den SL zu bearbeiten hat, in diesem Fall nach regelmäßig 15 Minuten, aufgerufen wird.

traderdoc
SusanneH and JEB like this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 08.02.17
JEB JEB ist offline
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 13
JEB befindet sich auf einem aufstrebenden Ast
Standard

Ich hab das jetzt mal so umgesetzt. Allerdings wurde im Backtesting nur die erste Order bearbeitet. Alle zukünfitge sind einfach direkt ins SL.
Könnt ihr mir sagen wo mein Fehlern liegt?
Die onTick Funktion sagt doch, dass er den nachfolgenden Code bei jedem Tick abarbeiten soll. Das müsste doch bedeuten dass er jedes mal schauen muss ob die 15 min schon vergangen sind und dann dementsprechend den Stopp nachziehen.

Vielen Dank schonmal!



extern double Ordervol;
extern double StopLoss;
extern double TakeProfit;
datetime lastrail;



void OnTick()
{
int BrokerSpread=MarketInfo (NULL,MODE_SPREAD) ;
double BuySwap=MarketInfo (Symbol (), MODE_SWAPLONG);
double SellSwap=MarketInfo (Symbol (), MODE_SWAPSHORT);

Comment("Kontostand: ",AccountBalance(), "\n",
"Verfügbares Kapital: ",AccountEquity(), "\n",
"Spread: ",BrokerSpread, "\n",
"BuySwap: ",BuySwap, "\n",
"SellSwap: ",SellSwap, "\n");

double BBlow=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_LOW ER,0) ;
double BBhigh=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_UP PER,0) ;



if (Ask>BBhigh)
if (OrdersTotal()==0)
{ Kaufen();}

if (lastrail<TimeCurrent()-(60*15))
{Trailing();
lastrail=TimeCurrent();}
}

void Kaufen()
{
double BBlow=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_LOW ER,0) ;
OrderSend(Symbol(), OP_BUY,Ordervol,Ask,3,BBlow,(Ask+1.0010),NULL,1,0, Green);

}

void Trailing ()
{
double BBlow=iBands(NULL,15,55,0.2,0,PRICE_CLOSE,MODE_LOW ER,0) ;
OrderModify(1,Ordervol,BBlow,(Ask+1),0,Red);

}
  #5 (permalink)  
Alt 08.02.17
Mitglied
 
Registriert seit: Mar 2016
Beiträge: 68
SusanneH befindet sich auf einem aufstrebenden Ast
Standard

...mit OrderModify(1,...) wendest du das Ganze auch nur auf deine erste Order mit der Nr.1 an.

OrderModify(OrderTicket(),...) wäre korrekt in der Annahme das du vorher mit OrderSelect() deine Order ausgewählt hast.

Ansonsten wenn du nur mit max. 1 gleichzeitigen Order hantierst/handelst kannst du dir auch die TicketNr. in einer Variable merken (bei der Order Eröffnung) und diese dann verwenden.

Übrigends solltest du dann in deiner Trailfunktion auch noch überprüfen ob OrderStoploss()<BBlow ect. ist, da du ansonsten laute Fehlermeldungen bekommst von der OrderModify-Funktion.

...und an deiner OrderModify-Syntax arbeiten:
bool OrderModify(
int ticket, // ticket
double price, // price
double stoploss, // stop loss
double takeprofit, // take profit
datetime expiration, // expiration
color arrow_color // color
);
JEB likes this.
Thema geschlossen

Lesezeichen

Stichworte
indicator, programmierung, programmierung metatrader, programmierung mql4, sl, sl trailing, stoploss, stopploss, trailing, update


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 10:45 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------