Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Trade erst nach x Kerzen

Geschrieben

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........

Featured Replies

Geschrieben

 



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;
...

Geschrieben
  • Autor

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?

Bearbeitet von Gunner_Duck

Geschrieben

 

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.

Geschrieben
  • Autor

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;

Bearbeitet von Gunner_Duck

Geschrieben

Meinst du in etwa so:

Fast. Das a++ muss noch ausserhalb der else-Klammer aber sonst sollte es passen.

Geschrieben
  • Autor

Ach mist, hatte das a++ zuerst auch dahin gesetzt blush.png

 

Super, vielen dank, es scheint jetzt zu gehen.

Fehlt zwar noch eine Kontrollfunktion, aber ich versuch es erstmal selber.

Einen schönen Abend noch.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.