EA tradet nicht

 

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.

 
  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.
 

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.
 

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? 

 

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!

 
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);
}
 

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!

 
Also die handle gehörn jedenfalls in die oninit, die muss man nicht jedes mal indizieren
 

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:

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!

Grund der Beschwerde: