Jump to content
Tom Next - Daytrading Community

Trade erst nach x Kerzen


Gunner_Duck

Recommended Posts

Hallo Metatrader,

 

ich habe folgenden Tradewunsch an den EA, den ich mir grade zusammen bastle.

 

Ich lese mir aus einem iCustom meine Long-/Shortsignale.

 

Diese Signale verwende ich aktuell direkt für die Trades, was ich aber ändern will.

Ich möchte, dass der EA erst tradet, wenn das entsprechende iCustom-Signal eine Anzahl x von Kerzen anhält.

Mir würden eigentlich schon zwei geschlossene Bars reichen.

 

Ich finde einfach nicht die richtige Funktion dafür.

 

Habe es schon mit einer einfachen If-Abfrage versucht:

    if (tradeTrigger == 2 && Close[1]>Close[2]) GoLong = true;
    if (tradeTrigger == 1 && Close[2]>Close[1]) GoShort = true;

Und auch eine for-Schleife hat nicht zum gewünschten Resultat gebracht. Die Trades werden einfach sofort gesetzt, sobald das entsprechende Indikatorsignal kommt.

    switch(tradeTrigger) {
       case 2 : {// BUY
          for(int LongCounter=0; LongCounter<Bars; LongCounter++) {
             if (LongCounter>=AnzahlKerzen) GoLong = true;
             else GoLong = false; 
            }break;
           }
       case 1 : {// SELL
          for(int ShortCounter=0; ShortCounter<Bars; ShortCounter++) {
             if (ShortCounter>=AnzahlKerzen) GoShort = true;
             else GoShort = false;
            } break;
           }
          }

Ich sehe einfach nicht mehr den Wald vor lauter Bäumen oder so und hoffe, dass mir hier endlich einer helfen kann.

BBBIIIIIITTTTEEEE........

Link to comment
Share on other sites

 



Ich sehe einfach nicht mehr den Wald vor lauter Bäumen oder so und hoffe, dass mir hier endlich einer helfen kann.

BBBIIIIIITTTTEEEE........

Du kannst bei iCustom einen Shift angeben. So ist es z.B. möglich, dass du in einer Schleife den Indikator über verschiedene Bars abfrägst und dann einfach zählst wie oft deine Bedingung erfüllt war.

Etwa so:

a=0;
cnt=0;
Break=false;
while (a<2 && !Break)
{
  IndiValue = iCustom(.....,a);
  if(IndiValue>SignalSchwelle)
  {
    cnt++;
  }
  else
  {
    cnt=0;
    Break=true;
  }
}
if(cnt==2) 
  GoLong=true;
...

  • Upvote 2
Link to comment
Share on other sites

Ja genau so einen Ansatz brauche ich. Vielen dank schon mal dafür.

Also mein Indikator liefert mir mit einem Switch den Wert "2" für Long und den Wert "1" für Short an den EA.

 

So - den Indi initialisiere ich mit dieser Funktion im EA:

//NAME, cmd (1 : OPEN BUY/SELL), shift (0)
int getTrendyIndiValue(string iTrendyIndi,int cmd,int shift) {
   double indiSignal = 0; // neutral
   int returnVal = 0;

   switch(cmd)  {
      case 1 : {// check for open
        indiSignal = iCustom(NULL,0,iTrendyIndi,0,shift); // custom indicator signals for BUY/SELL (buffer 0)
        if (indiSignal == 2) returnVal = 2; // BUY?
        else if (indiSignal == 1) returnVal = 1; // SELL?
       }     break;
      default: return(returnVal); // wrong parameter
     }
return(returnVal);
}

 

Und je nachdem welches Signal mir hieraus kommt, gehe ich Long oder Short:

int tradeTrigger = getTrendyIndiValue(iTrendyIndi,1,0); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT

 

So weit so gut.

Und jetzt - Wie integriere ich deinen Vorschlag hier rein?

int tradeTrigger = getTrendyIndiValue(iTrendyIndi,1,0); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT
        
    bool GoLong = false;
    bool GoShort = false;
    int AnzahlKerzen = 2;
    int LongCounter = 0;
    int ShortCounter = 0;
    int a=0;
    bool Break=false;

    while (a<AnzahlKerzen && !Break) {
      IndiValue = iCustom(.....,a);
      if(IndiValue>SignalSchwelle)  {
        LongCounter++;  
       }
      else {
        LongCounter=0;
        Break=true;  
        }
       }
      if(LongCounter==2)   GoLong=true;

Oder brauche ich die Indikator-Initialisierung damit nicht mehr?

Edited by Gunner_Duck
Link to comment
Share on other sites

 

int tradeTrigger = getTrendyIndiValue(iTrendyIndi,1,0); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT
        
    bool GoLong = false;
    bool GoShort = false;
    int AnzahlKerzen = 2;
    int LongCounter = 0;
    int ShortCounter = 0;
    int a=0;
    bool Break=false;

    while (a<AnzahlKerzen && !Break) {
      IndiValue = iCustom(.....,a);
      if(IndiValue>SignalSchwelle)  {
        LongCounter++;  
       }
      else {
        LongCounter=0;
        Break=true;  
        }
       }
      if(LongCounter==2)   GoLong=true;

Oder brauche ich die Indikator-Initialisierung damit nicht mehr?

Du brauchst diese Funktion nicht. Die ist überflüssig. Sie liefert dir ja nichts anderes zurück als die iCustom-Funktion auch schon (1 oder 2 bei einem Signal).

Am Ende der while-Schleife musst du "a" noch hochzählen. Hab ich in meinem Beispiel vergessen.

if(IndiValue>SignalSchwelle)...

ersetzt du mit einem Vergleich auf 1 bzw. 2 für Long und Short.

Link to comment
Share on other sites

Meinst du in etwa so:

    while (a<AnzahlKerzen && !Break) {
      int indiValue = iCustom(NULL,0,iTrendyIndi,0,a); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT
      if(indiValue == 2) {
         LongCounter++;  
      }  
      else  { 
         LongCounter=0;    
         Break=true;
         a++;
      }
    }
    if(LongCounter==AnzahlKerzen)   GoLong=true;
Edited by Gunner_Duck
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...