Trailing STOP - Programmstop BITTE UM HILFE

 

Guten Tag Zusammen

Ich versuche mich seit wenigen Tagen mit der EA-Programmierung einer TradingStrategie.

Nun habe ich folgendes Problem:


Das Programm kann inkl. Trailing Stop Fehlerlos kompiliert werden. Jedoch beleibt das Programm ab Programmzeile 88 stehen und die Strategie hängt sich im Strategietester auf.

Da ich für den Trailingstop gerne ein externen Indikator (Donchain Chanel) verwenden möchte, habe ich diesen über iCostum imporiert. Ich denke der Fehler liegt in der Wertedefinierung für den Indikator.

Auf eure hilfe würde ich mich freuen!




REDREED

Dateien:
 
  1. Poste Deinen Code bitte hier mittels (Alt+s oder das Symbol von der Editorleiste </>) als Code, nicht als Bild,
  2. Bei Vorfällen, wie Du sie beschreibst, gibt es immer eine Fehlermeldung im Log, Expert-Log oder Tester-Log,
  3. Außerdem gibt es den Debugger (aus dem Editor), wenn das Programm nicht so tut wie es soll,
  4. Unter Umständen kann man auch einmal die Funktion zB. iCustom nachlesen, dazu im Editor den Kursor 'draufstellen und F1 drücken.

Alls ist viel schneller, als eine Antwort hier!

Trotzdem viele Glück

 
Carl Schreiber:
  1. Poste Deinen Code bitte hier mittels (Alt+s oder das Symbol von der Editorleiste </>) als Code, nicht als Bild,
  2. Bei Vorfällen, wie Du sie beschreibst, gibt es immer eine Fehlermeldung im Log, Expert-Log oder Tester-Log,
  3. Außerdem gibt es den Debugger (aus dem Editor), wenn das Programm nicht so tut wie es soll,
  4. Unter Umständen kann man auch einmal die Funktion zB. iCustom nachlesen, dazu im Editor den Kursor 'draufstellen und F1 drücken.

Alls ist viel schneller, als eine Antwort hier!

Trotzdem viele Glück

Vielen Dank für deine Antwort.

1.

#import "AMBibliothek_001.ex5"
double   AktuellerAskPreis();
double   AktuellerBidPreis();
double   AktuellesGuthaben();
double   AktuelleKontopositionen();
double   AktuellerProfit();
#import

#include<Trade\Trade.mqh>

CTrade trade;

void OnTick()
{

Comment ("Aktueller AskPreis: ", AktuellerAskPreis(), "\n"
         "Aktueller BidPreis: ", AktuellerBidPreis(), "\n"
         "Aktuelles Guthaben: ", AktuellesGuthaben(), "\n"
         "Aktuelle Kontopositionen: ", AktuelleKontopositionen(), "\n"
         "Aktueller Profit: ", AktuellerProfit());
         
         
//Erstelle ein Array für Preisdaten
MqlRates Preisinformationen[];
   
// sortiere die Preise abwaerts von der aktuellen Kerze
ArraySetAsSeries (Preisinformationen, true);
 
// Kopieren Preisdaten in das Array
int Data=CopyRates(Symbol(),Period(),0,3,Preisinformationen);

// Erstelle Arrays für Indikatoren
double EMA1Array[];
double EMA2Array[];
double RSIArray[];
double SAKArray[];
double SADArray[];

// definiere die Eigenschaften der Moving Average 1
int EMA1Definition=iMA(_Symbol,_Period,5,0,MODE_EMA,PRICE_CLOSE);
ArraySetAsSeries(EMA1Array, true);
CopyBuffer(EMA1Definition,0,0,3,EMA1Array);
   
// definiere die Eigenschaften der Moving Average 2
int EMA2Definition=iMA(_Symbol,_Period,10,(0),MODE_EMA,PRICE_CLOSE);
ArraySetAsSeries(EMA2Array, true);
CopyBuffer(EMA2Definition,0,0,3,EMA2Array);

// definere die Eigeschaften für den RSI
int RSIDefinition=iRSI(_Symbol,_Period,14,PRICE_CLOSE);
ArraySetAsSeries(RSIArray, true);
CopyBuffer(RSIDefinition,0,0,3,RSIArray);
// berechne den RSI-Wert der aktuellen Kerze
double RSIWert=NormalizeDouble(RSIArray[0],2);  

// Sortieren von SA-Arrays abwärts
ArraySetAsSeries (SAKArray,true); 
ArraySetAsSeries (SADArray,true); 
int SADefinition=iStochastic(_Symbol,_Period,14,3,3,MODE_SMA,STO_LOWHIGH);
CopyBuffer(SADefinition,0,0,3,SAKArray);
CopyBuffer(SADefinition,1,0,3,SADArray);
double KWertaktuell=SAKArray[0];
double DWertaktuell=SADArray[0];
double KWertK1=SAKArray[1];
double DWertK1=SADArray[1];


// KAUF Position eröffnungen 
if ((PositionsTotal() < 1)&&(EMA1Array[1]<EMA2Array[1])&&(EMA1Array[0]>EMA2Array[0])&&(KWertaktuell>KWertK1)&&(DWertaktuell>DWertK1)&&(KWertaktuell<80)&&(DWertaktuell<80)&&(RSIWert>50))
trade.Buy(0.1,NULL,AktuellerAskPreis(),(AktuellerAskPreis()-100 * _Point),0,NULL);

// VERKAUF Position eröffnungen 
if ((PositionsTotal() < 1)&&(EMA1Array[1]>EMA2Array[1])&&(EMA1Array[0]<EMA2Array[0])&&(KWertaktuell<KWertK1)&&(DWertaktuell<DWertK1)&&(KWertaktuell>20)&&(DWertaktuell>20)&&(RSIWert<50))
trade.Sell(0.1,NULL,AktuellerBidPreis(),(AktuellerAskPreis()+100 * _Point),0,NULL);

//TrailingStop Check
CheckTrailingStop();
     
}


void CheckTrailingStop()
{

double DCobenArray[];
double DCuntenArray[];

int DCDefinition=iCustom(_Symbol,_Period,"Indicators\\Admiral Donchian.ex5");
ArraySetAsSeries(DCobenArray, true);
ArraySetAsSeries(DCuntenArray, true);
CopyBuffer(DCDefinition,0,0,3,DCobenArray);
CopyBuffer(DCDefinition,1,0,3,DCuntenArray);
double DCobenWertK1=DCobenArray[1];
double DCuntenWertK1=DCuntenArray[1];

double SLKauf=DCuntenWertK1;
double SLVerkauf=DCobenWertK1;

for (int i=PositionsTotal()-1; i>=0; i--)
{
   string symbol= PositionGetSymbol(i);//Positionssymbol ermitteln
   if ((_Symbol==symbol)&&(PositionGetDouble(POSITION_SL)<PositionGetDouble(POSITION_TP))) //Wenn Chartsymbol mit offenen Positionssymbol überreint stimmt
   {
      //Ticketnummer ermitteln
      ulong PositionsTicket = PositionGetInteger(POSITION_TICKET);
         
     //Aktuellen Stoploss ermitteln
     double AkSTL = PositionGetDouble(POSITION_SL);
     
     if (AkSTL<SLKauf)
     {
         
         trade.PositionModify(PositionsTicket,DCuntenWertK1,0);
     
     }
     
     
     
   }
   
   
   if ((_Symbol==symbol)&&(PositionGetDouble(POSITION_SL)>PositionGetDouble(POSITION_TP))) //Wenn Chartsymbol mit offenen Positionssymbol überreint stimmt
   {
      //Ticketnummer ermitteln
      ulong PositionsTicket = PositionGetInteger(POSITION_TICKET);
         
     //Aktuellen Stoploss ermitteln
     double AkSTL = PositionGetDouble(POSITION_SL);
     
     if (AkSTL<SLVerkauf)
     {
         
         trade.PositionModify(PositionsTicket,DCobenWertK1,0);
     
     }
     
     
     
   }


}
}

2. Leider gibt es keine Fehlermeldung. Der Code kann sogar durch den Strategietester gestartet werden. Leider kann die Geschwindigkeits nicht erhöht werden, das der Code bei Zeile 88 stehen bleibt.

3. Konnte mich leider noch nicht vertraut machen mit dem Debugger. Vielen Dank für den Tipp, werde mich mal schlau machen.

4. Habe ich gemacht, hatt mir leider nicht weiter geholfen. Meiner Auffassung nach, sollte es funktionieren.


Vielen Dank für die Tipps. Hoffe jemand kann mir tortzdem weiterhelfen.


REDREED

 

add. 4: Tja, erst lesen dann schreiben!

iCustom() sucht in: "MQL5/Indicators/", ergo "\\Indicators\\" darfst Du nur angeben, wenn im Ordner "MQL5/Indicators/" noch ein Verzeichnis Indicators existiert: "MQL5/Indicators/Indicators/".

 
Carl Schreiber:

add. 4: Tja, erst lesen dann schreiben!

iCustom() sucht in: "MQL5/Indicators/", ergo "\\Indicators\\" darfst Du nur angeben, wenn im Ordner "MQL5/Indicators/" noch ein Verzeichnis Indicators existiert: "MQL5/Indicators/Indicators/".

Super Danke! Hatt funktioniert. Dann ist das Beispiel echt doof gewählt in der Hilfestellung.


Der DonChain-Chanell wurde nun aufgerufen und kann verwendet werden, leider habe ich noch das selbe probel wie vorher, das der Code irgenwo stecken beleibt, da ich im Strategietester die Zeit auf max beschleunige, und der Chartablauf bleibt bewegt sich nicht. :S


REDREED

 
Verwenden Comment() mit relevanten Daten (Zeit, ema, ema-Differenzen, ..), um zu sehen, ob er stehen bleibt oder halt nicht handelt!
Grund der Beschwerde: