EA tradet nicht

Einloggen oder registrieren, um einen Kommentar zu schreiben
Ingo Christ
245
Ingo Christ  

Hallo zusammen, 

ich brauche nochmal Eure Hilfe.

Ich habe angefangen FUnktionen in eigene Dateien auszulagern und mit enum zu arbeiten. Irgendwie bekomme ich damit aber keinen EA hin, der wirklich handelt. 
Hier ist der Code des Main-EA:


Und hier der ausgelagerte EntrySignal Code:

Danke im Voraus liebe Community.

Carl Schreiber
Moderator
8683
Carl Schreiber  
  1. Verwende den Code-Button </> (oder Alt-S), um Code zu präsentieren!
  2. Um solche Probleme zu lösen gibt es den Debugger (im Editor STRG+F5: mit hist. Daten) und dazu setzt man mit F9 Haltepunkte.
lippmaje
879
lippmaje  

Du hast Sachen im OnDeinit stehen die eigentlich ins OnInit gehören.

Wenn Du weißt, wieviele Elemente Du kopieren willst, mach das Array statisch: static double RSIArray[5], das spart etwas Rechenzeit. Und den Return-Wert von CopyBuffer sollte man abfragen, Fehlerbehandlung.
Ingo Christ
245
Ingo Christ  

Vielen Dank schonmal für die Hilfe. 

Code werde ich ab sofort mit der entsprechenden Funktion hier posten und ich habe den entsprechenden Code in die OnInit() verschoben. 

Das Debugging hat mich soweit gebracht, dass die Funtion EntrySignal einen Integer zurückgibt. Sie sollte ja eigentlich "Buy" oder "Sell" als String ausgeben. 

Wisst Ihr woran das liegen könnte? 

Carl Schreiber
Moderator
8683
Carl Schreiber  

Ingo Christ:

...

Das Debugging hat mich soweit gebracht, dass die Funtion EntrySignal einen Integer zurückgibt. Sie sollte ja eigentlich "Buy" oder "Sell" als String ausgeben. 

Wisst Ihr woran das liegen könnte? 

Solange niemand die Funktion EntrySignal kennt, kann niemand Dir eine Antwort geben!

Ingo Christ
245
Ingo Christ  
Carl Schreiber:

Solange niemand die Funktion EntrySignal kennt, kann niemand Dir eine Antwort geben!

string EntrySignal(int TradeSignal)
{
string Signal = "";
int InpSignal = TradeSignal;

if (TradeSignal==1)
{
double RSIArray[5];
//ArraySetAsSeries(RSIArray,true);
int RSIHandle = iRSI(_Symbol,_Period,14,PRICE_CLOSE);
CopyBuffer (RSIHandle,0,0,5,RSIArray);

if(RSIArray[0]>70) Signal="Buy";
if(RSIArray[0]<30) Signal="Sell";
}

if (TradeSignal==2)
{
double AlligatorJawsArray[5], AlligatorTeethArray[5], AlligatorLipsArray[5];
/*ArraySetAsSeries(AlligatorJawsArray,true);
ArraySetAsSeries(AlligatorTeethArray,true);
ArraySetAsSeries(AlligatorLipsArray,true);
*/
int AlligatorHandle = iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

CopyBuffer (AlligatorHandle,0,0,5,AlligatorJawsArray);
CopyBuffer (AlligatorHandle,1,0,5,AlligatorTeethArray);
CopyBuffer (AlligatorHandle,2,0,5,AlligatorLipsArray);

if(AlligatorLipsArray[0]>AlligatorTeethArray[0] && AlligatorTeethArray[0]>AlligatorJawsArray[0 ] && AlligatorJawsArray[1]<AlligatorTeethArray[1]) Signal="Buy";
if(AlligatorLipsArray[0]<AlligatorTeethArray[0] && AlligatorTeethArray[0]<AlligatorJawsArray[0] && AlligatorJawsArray[1]>AlligatorTeethArray[1]) Signal="Sell";
}

return (Signal);
}
Carl Schreiber
Moderator
8683
Carl Schreiber  

Also ich würde unbedingt die Compiler-Option

#property strict

eintragen!

Du verwendest offenbar  "EntrySignal" als ganz verschiedene Variablen - kein Wunder, dass Du Dich nicht auskennst!

amando
2017
amando  
Also die handle gehörn jedenfalls in die oninit, die muss man nicht jedes mal indizieren
Ingo Christ
245
Ingo Christ  

Danke nochmal. Habe Eure Tips umgesetzt.

Ich konnte den Fehler auch weiter eingrenzen. Es liegt am auslagern der EntrySignal Funktion in eine eigene Datei. 

Wenn ich die Funktion einfach in den Code des Hauptprogramms kopiere, geht es. 

Seltsam, oder?

Ingo Christ
245
Ingo Christ  
Ingo Christ:

Danke nochmal. Habe Eure Tips umgesetzt.

Ich konnte den Fehler auch weiter eingrenzen. Es liegt am auslagern der EntrySignal Funktion in eine eigene Datei. 

Wenn ich die Funktion einfach in den Code des Hauptprogramms kopiere, geht es. 

Seltsam, oder?

Yeah, ich konnte es lösen. Der Compiler hat mir im Hauptprogramm einen Fehler angezeigt. Es war eine Variable doppelt genutzt. Das konnte er aber nicht sehen, wenn die Funktion in eine eigene Datei ausgelagert war.

Danke für die guten Tipps!

Einloggen oder registrieren, um einen Kommentar zu schreiben