Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   RSI-Crossline Signal (Bitte um Hilfe) (http://www.expert-advisor.com/forum/showthread.php?t=4403)

trololotromberino 09.08.15 13:44

RSI-Crossline Signal (Bitte um Hilfe)
 
Hey Leute,

ich versuche gerade ein Liquidierungssignal für meinen EA zu erstellen und bin dabei aber auf erhebliche Probleme gestoßen.

Zitat:

if (OrdersTotal() > 0)
{

if (iRSI(NULL,0,14,PRICE_OPEN,0) > 70 > iRSI(NULL,0,14,PRICE_CLOSE,0)) //Erst schließen, wenn RSI von oben nach unten durch die 70er linie geht.
{

Alert ("Order closing now, because of RSI-Signal!");
Sleep(2000);

bool result;
result = OrderClose(OrderSelect(ticket, SELECT_BY_POS),OrderLots(),Bid,10); //Komisch: Wenn ich SELECT_BY_TICKET auswähle, funktioniert der Trailingstop nicht
if (result == true)
{
Alert ("Orderclosing succeeded");
}
else
{
Alert ("Orderclosing failed: #",GetLastError());
}


} else Print ("Fehler beim Positionsliquidieren!",GetLastError());
}
Der Sinn soll sein, dass die offene Long-Order geschlossen wird, wenn der RSI von oben nach unten durch die 70er Linie läuft.
Aber irgendwie kriege ich die if - Bedingung dafür nicht so ganz gebacken.

Würde mich riesig über Hilfe freuen, bin nämlich an diesem EA schon ne ganze Weile am verzweifeln.

LG
TrololoTromberino

traderdoc 09.08.15 22:59

Code:

if (OrdersTotal() > 0)
{

if (iRSI(NULL,0,14,PRICE_OPEN,0) > 70 > iRSI(NULL,0,14,PRICE_CLOSE,0)) //Erst schließen, wenn RSI von oben nach unten durch die 70er linie geht.
{

//besser wäre die Betrachtung auf geschlossenen Kerzen mittels
//if (iRSI(NULL, 0, 14, PRICE_CLOSE, 2) > 70 && iRSI(NULL, 0, 14, PRICE_CLOSE, 1) < 70)
//damit nicht bei jedem Tick diese Abfrage getätigt wird, sollte das über den Kerzenwechsel geregelt werden und damit eine einmalige Abfrage bei Öffnen der neuen Kerze erfolgen!

Alert ("Order closing now, because of RSI-Signal!");
// überflüssig! -> Sleep(2000);

bool result;
result = OrderClose(OrderSelect(ticket, SELECT_BY_POS),OrderLots(),Bid,10); //Komisch: Wenn ich SELECT_BY_TICKET auswähle, funktioniert der Trailingstop nicht

//ja woher auch, wenn der OrderClose-Funktion evtl. der Wert der Variablen ticket zugeordnet wird, obwohl dort die OrderPosition hingehört!

if (result == true)
{
Alert ("Orderclosing succeeded");
}
else
{
Alert ("Orderclosing failed: #",GetLastError());
}


} else Print ("Fehler beim Positionsliquidieren!",GetLastError());
}

traderdoc

trololotromberino 11.08.15 12:20

Code:

bool result;
result = OrderClose(OrderSelect(ticket, SELECT_BY_POS),OrderLots(),Bid,10); //Komisch: Wenn ich SELECT_BY_TICKET auswähle, funktioniert der Trailingstop nicht

//ja woher auch, wenn der OrderClose-Funktion evtl. der Wert der Variablen ticket zugeordnet wird, obwohl dort die OrderPosition hingehört!

Vielen, vielen Dank ersteinmal!
Ich habe noch eine Frage: Wieso meinst Du, dass es falsch wäre, die Variable aufzurufen? Ich meine, ich gebe ihr doch vorher die Position:
Code:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,sl,0, "My Order",16384,0,Green);
Eigentlich sollte er doch die Order aufnehmen und dann löschen. Aber leider will er immer noch keine Order beim RSI aus dem Markt nehmen.
Ich habe auch mal das hier versucht, klappt aber leider auch nicht:
Code:

result = OrderClose(OrderSelect(OrderTicket(), SELECT_BY_POS),OrderLots(),Bid,10);
Er erkennt leider die Position nicht.
Auch SELECT_BY_POS durch SELECT_BY_TICKET zu ersetzen hat leider keine Wirkung im gewünschten Sinne gezeigt.

Eine Idee?

LG
TrololoTromberino

PS: Eine Frage noch:
Code:

iRSI(NULL,0,14,PRICE_OPEN,0)
Folgerung aus deiner Antwort: 0 heißt jeder Tick, 1 heißt Open und 2 heißt Close, korrekt? Steht in der Hilfe leider nicht drin :(

traderdoc 11.08.15 19:12

Zitat:

Zitat von trololotromberino (Beitrag 30751)

...
Ich habe noch eine Frage: Wieso meinst Du, dass es falsch wäre, die Variable aufzurufen? Ich meine, ich gebe ihr doch vorher die Position:
Code:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,sl,0, "My Order",16384,0,Green);
Nein, das ist nicht die Position, sondern die Ticketnummer.

Eigentlich sollte er doch die Order aufnehmen und dann löschen. Aber leider will er immer noch keine Order beim RSI aus dem Markt nehmen.
Ich habe auch mal das hier versucht, klappt aber leider auch nicht:
Code:

result = OrderClose(OrderSelect(OrderTicket(), SELECT_BY_POS),OrderLots(),Bid,10);
OrderTicket() kann nur einen Wert enthalten, wenn vorher die entsprechende Order selektiert wurde (über die Position oder per Ticketnummer).

regeln über
for (int i = OrdersTotal()-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS)
//hier werden die Orders per Position aufgerufen


oder nur und direkter per
OrderSelect(ticket, SELECT_BY_TICKET)
also über die vorher abgespeicherte Ticketnummer


Er erkennt leider die Position nicht.
Auch SELECT_BY_POS durch SELECT_BY_TICKET zu ersetzen hat leider keine Wirkung im gewünschten Sinne gezeigt.

Wenn es dann per Ticket immer noch nicht gehen sollte, dann stimmt entweder die Variable "ticket" nicht oder im nachfolgenden Code ist ein Fehler.

Eine Idee?

LG
TrololoTromberino

PS: Eine Frage noch:
Code:

iRSI(NULL,0,14,PRICE_OPEN,0)
Folgerung aus deiner Antwort: 0 heißt jeder Tick, 1 heißt Open und 2 heißt Close, korrekt? Steht in der Hilfe leider nicht drin :(

Nein, kann so auch nicht drin stehen, weil:
die 0 am Ende bedeutet eine Indikatorberechnung auf der aktuellen Kerze, die 1 eine Berechnung auf der 1. geschlossenen Kerze und die 2 eine Berechnung auf der 2. geschlossenen Kerze. Wenn man nun in der Regel nicht repaintende Indikatorwerte möchte, sollte man nicht auf der aktuellen Kerze berechnen lassen. Und eine Kreuzung bedeutet immer die Berechnung zweier Werte vor und zweier Werte nach der Kreuzung


traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:23 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum