Gunner_Duck Posted January 19, 2016 Report Share Posted January 19, 2016 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........ Quote Link to comment Share on other sites More sharing options...
WOGO Posted January 19, 2016 Report Share Posted January 19, 2016 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 Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted January 19, 2016 Author Report Share Posted January 19, 2016 (edited) 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 January 19, 2016 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
WOGO Posted January 19, 2016 Report Share Posted January 19, 2016 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. Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted January 19, 2016 Author Report Share Posted January 19, 2016 (edited) 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 January 19, 2016 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
WOGO Posted January 20, 2016 Report Share Posted January 20, 2016 Meinst du in etwa so:Fast. Das a++ muss noch ausserhalb der else-Klammer aber sonst sollte es passen. Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted January 20, 2016 Author Report Share Posted January 20, 2016 Ach mist, hatte das a++ zuerst auch dahin gesetzt Super, vielen dank, es scheint jetzt zu gehen.Fehlt zwar noch eine Kontrollfunktion, aber ich versuch es erstmal selber.Einen schönen Abend noch. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.