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)
-   -   Fehler bei Berechnung oder Send? (http://www.expert-advisor.com/forum/showthread.php?t=5385)

Ado1964 09.01.17 18:28

Fehler bei Berechnung oder Send?
 
Hi Leute, ich versuche schon seit stunden den Fehler zu finden. Der EA läuft an sich. Ziel ist, dass er byu-/send-Orders auslöst, wenn sich Main und Signal kreuzen, wobei die Variable Distance den Abstand zwischen Main und Signal darstellt. Solange kein neues Crossing von Main und signal stattfindet (inkl. der Distance) soll nix passieren, ansonsten soll er zB Sell schliessen und buy öffnen.

{


if(PositionOpen()) return(0);

crossedup = false;
crosseddown = false;

for(int i = 0;i < 3;i++)
{
mline[i] = iStochastic(NULL, Period(),K_Period, D_Period, Slowing, MA_Method, 0, MODE_MAIN, i);
sline[i] = iStochastic(NULL, Period(),K_Period, D_Period, Slowing, MA_Method, 0, MODE_SIGNAL, i);
}
if ((mline[1] < sline[1]) && (mline[2] -Distance> sline[2])) crosseddown = true;
else if ((mline[1] > sline[1]) && (mline[2]+Distance < sline[2])) crossedup = true;
else return(0);


if (crossedup) GoLong();
if (crosseddown) GoShort();


return(0);
}

.....

int GoLong()

{

longtkt = -1;
cnt = 0;
while((longtkt < 0) && (cnt < 20))
{
longtkt = OrderSend(Symbol(), OP_BUY, AdvancedMM(), Ask, 2, 0,0, NULL, MagicNumber, 0, Green);
cnt++;
}
if (longtkt>0)
{
OrderSelect(longtkt, SELECT_BY_TICKET);

OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStoppLoss,Digits),NormalizeDouble(TheT akeProfit,Digits),0,Green);
}


OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(), Slippage,Red);

return(longtkt);

}
...

bool PositionOpen()
{
t = OrdersTotal();
for(int z = 0;z < t;z++)
{
OrderSelect(z, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol()) return(true);
}
return(false);



Habe ich das Distance falsch gesetzt? Oder wortan kann es liegen?

Danke euch vielmals für die Zeit...

traderdoc 09.01.17 18:43

Na ja, ist eben immer wieder dasselbe. Bei einem unvollständigen Code wird man nie eine exakte Aussage treffen können.
Ich vermute! mal, dass es daran liegt, wiel Distance über die Anzahl Pips definiert wird und diese Pips nicht in eine tatsächliche Kursdifferenz umgerechnet wurde.

traderdoc

Ado1964 09.01.17 19:17

...sorry...
distance ist folgendermaßen definiert:

extern double Distance = 5.2; // Distance between Main / Signal

eine weitere Umrechnung o.ä. erfolgt nicht, nur eben die Definition

...danke

traderdoc 09.01.17 19:47

Ja nun, dann hast Du ja den Fehler!!

traderdoc

Ado1964 09.01.17 20:19

.hhmmm....

@ doc: könnte ich dir mal den gesamten Code zusenden zum Prüfen oder verbessern/modifizieren?...stehe momentan irgendwie auf dem Schlauch......wäre sehr nett.... :-) ....

MA-EA 09.01.17 21:51

Lad hoch. Gibts bestimmt schon irgendwo gratis. ;)

Sorry, fals ichs überlesen hab, aber was soll diese Distanz-Rechnung? :confused:

Ado1964 09.01.17 21:58

....die Distance soll eigentlich verhindern, dass der ea auch bei kleinen Abweichungen beim Crossing eine order auslöst..oder ist das ein logischer Fehler?...sinn des ganzen ea soll wie gesagt sein, dass bei aufwärts-crossing eine buy-order ausgelöst und eine evtl. bestehende sell-order geschlossen wird und umgekehrt

traderdoc 09.01.17 22:14

Ja nun mal langsam.
Probiere das hier aus:

Distance = Distance*Point;
(falls Du einen 5-DigitBroker hast und die 5,2 sollen tatsächlich reale 5,2 Pips sein, dann muss Distance = Distance*Point*10; genommen werden)

Damit solltest Du für Distance dann 0,00052 bekommen und dann sollte das auch mit
mline[2] -Distance> sline[2])
funktionieren.

traderdoc

Ado1964 10.01.17 16:56

...vielen Dank zunächst...
ich bin bisher davon ausgegangen, dass die Variablen mline und sline die jeweilige Position des Stoch zurückgeben, also einen Wert zwischen 0 und 100, so dass Distance eben den Abstand zwischen den Linien definiert, also eine Umrechnung in Pips o.ä. nmicht erforderlich ist

zB wenn M2=S2-Distance UND M2<S2 UND M2<M1
.... dann Sell-Order und schliessen einer offenen Buy-Order ( so das Ziel)


ich habe mal den Code angehängt

wäre euch für Tipps und Hinweise auf mögliche Fehler dankbar

Ado1964 10.01.17 17:01

Liste der Anhänge anzeigen (Anzahl: 1)
...hier die Datei


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:05 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