Jump to content


Photo

Trade erst nach x Kerzen


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
6 replies to this topic

#1 Gunner_Duck

Gunner_Duck

    Runners

  • Addict
  • PipPip
  • 48 posts
  • 126 thanks

Posted 19 January 2016 - 03:31 PM

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


  • 0

Thanked by 5 Members:
whipsaw , Kleinerbroker , Vola , WOGO , Rumpel

#2 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 19 January 2016 - 06:25 PM

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

  • 2
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 6 Members:
whipsaw , Gunner_Duck , Kleinerbroker , Vola , Rumpel , Bull68

#3 Gunner_Duck

Gunner_Duck

    Runners

  • Addict
  • PipPip
  • 48 posts
  • 126 thanks

Posted 19 January 2016 - 10:17 PM

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, 19 January 2016 - 10:30 PM.

  • 0

Thanked by 4 Members:
whipsaw , Vola , Kleinerbroker , WOGO

#4 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 19 January 2016 - 10:57 PM

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.


  • 0
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 4 Members:
whipsaw , Vola , Kleinerbroker , Gunner_Duck

#5 Gunner_Duck

Gunner_Duck

    Runners

  • Addict
  • PipPip
  • 48 posts
  • 126 thanks

Posted 19 January 2016 - 11:19 PM

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, 19 January 2016 - 11:34 PM.

  • 0

Thanked by 3 Members:
whipsaw , Vola , Kleinerbroker

#6 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 20 January 2016 - 07:30 AM

Meinst du in etwa so:

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


  • 0
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 6 Members:
Kleinerbroker , whipsaw , Bull68 , Vola , Mythos , Rumpel

#7 Gunner_Duck

Gunner_Duck

    Runners

  • Addict
  • PipPip
  • 48 posts
  • 126 thanks

Posted 20 January 2016 - 04:36 PM

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.


  • 0

Thanked by 3 Members:
Kleinerbroker , Vola , WOGO

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users