Wie bekomme ich den Indikator dazu, zu filtern, anstatt zu alarmieren? - Seite 4

 
Aaragorn:
Ich habe es auf diesen Punkt gebracht...aber halt...

wenn dabei nur der einfache gleitende Durchschnitt dieses einen Balkens multipliziert mit 3,5 verwendet wird, um einen Hochpunkt zu finden. Wie ist es möglich, dass der Punkt jemals diesen Punkt erreichen könnte? wird der Wert der Linie nicht von demselben Balken berechnet, der ihn berühren müsste, um ein Signal zu geben? Wenn der Balken ansteigt, steigt auch die Randlinie?

Dergleitende Durchschnitt wird aus mehr als einem Balken berechnet , so dass die Linie einen Wert und der Preis einen anderen haben kann.

 
elihayun:
Wenn Sie wissen möchten, ob die obere Linie nahe am Preis liegt, können Sie dies herausfinden, indem Sie den Unterschied zwischen den beiden Linien klein halten (sagen wir 2 Punkte).

Mir ist es egal (was keine gute Idee ist), ob der Preis unter oder über der Linie liegt. Für mich 2 Punkte Abstand ist alles, was es nehmen. so der Unterschied ist

upper - High gibt die Differenz an, aber nicht in Punkten (es ist etwas wie 0.0004 oder -0.0004). Um sicherzustellen, dass der Unterschied positiv ist, verwenden wir die Funktion MathAbs, die den absoluten (positiven) Wert zurückgibt. Nun müssen wir prüfen, ob der Unterschied weniger als 2 Punkte beträgt. Das reservierte Wort Point gibt den Wert zurück, wenn der Kurs um 1 Pip steigt. Das ist bei jedem Paar anders.

Fügen Sie alles zusammen

if (MathAbs(upper - High) < 2*Point) bedeutet, dass der Unterschied weniger als 2 Pips beträgt, was für uns nahe genug ist.

Eigentlich ist es nicht gut, High zu verwenden, weil das High vielleicht darüber liegt, aber der aktuelle Kurs weit davon entfernt ist. Wir müssen Ask anstelle von High verwenden (im Indikator müssen wir Close[x] verwenden)

Um sicherzustellen, dass der Preis über der Linie liegt, können wir Folgendes tun

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

Sie sind sehr gut darin, so viele meiner Fragen zu beantworten, ich hoffe, dass ich Sie nicht überanstrenge Ich bin sehr lernbegierig.

Ich verstehe den absoluten Wert. Ich frage mich, was sich ändern würde, wenn man den ask anstelle des close verwenden würde? wäre es nicht gut, den close zu verwenden? oder würde das einen großen Unterschied machen? die einzige Sache, die mich noch verwirrt, ist die 2 * Punkt Seite der zweiten Bedingung. Sollte der Punkt nicht mit 2 multipliziert werden? Interpretiere ich das "*"-Symbol falsch oder ist das das Multiplikationssymbol?

Ich sehe, dass ask-upper die Differenz zwischen der oberen Linie und dem aktuellen Kurswert angibt, aber den Punkt mit 2 multiplizieren? Ich bin mir nicht sicher, was dabei herauskommen würde, das zum Vergleich herangezogen werden könnte.

Könnte ich dies tun, um nur Käufe zuzulassen, wenn das Signal unter meiner gefilterten Kauftoleranz liegt?

[php]

extern double longrange = 25; //--der erlaubte Abstand zur oberen Bandlinie, bevor Käufe untersagt werden

extern double shortrange = 20; //--die erlaubte Annäherung an die untere Bandlinie, bevor Verkäufe verboten werden

// EINGANG

if(total < 2 || isNewSumbol(Symbol())) //Ich habe die if-Bedingung auch geändert: es war total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //berechnet die Lots für die abgesicherte Position

if(isCrossed == 1 && Ask < upper-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

sonst

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Fehler beim Öffnen der BUY-Bestellung : ",GetLastError());
 

Sie übersehen eine Sache. Um den Punkt zu verstehen, stellen Sie sich folgendes vor

im USDJPY ist der Preis 114.95 und im EURUSD ist der Preis 1.2773

also in USDJPY Ask - upper wird sein wie : 114.95 - 114.93 = 0.02

und in EURUSD wird der Preis 1,2773 - 1,2771 = 0,0002 sein.

Beides sind 2 Punkte, aber mit unterschiedlicher Genauigkeit, so dass wir in USDJPY 2 mit 0,01 und in EURUSD mit 0,0001 multiplizieren müssen, und in jedem Paar ist dies genau das, was Punkt gleich ist.

 
elihayun:
Der gleitende Durchschnitt wird aus mehr als einem Balken berechnet , so dass die Linie ein Wert und der Preis ein anderer sein kann

Genau! Wie kann es ein Durchschnitt von nur einem Balken sein?

//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
Du übersiehst eine Sache. Um den Punkt zu verstehen, stellen Sie sich Folgendes vor

in USDJPY ist der Preis 114,95 und in EURUSD ist der Preis 1,2773

In USDJPY Ask - upper wird also wie folgt sein: 114.95 - 114.93 = 0.02

und in EURUSD wird der Preis 1,2773 - 1,2771 = 0,0002 sein

Beides sind 2 Punkte, aber mit unterschiedlicher Genauigkeit, so dass wir bei USDJPY 2 mit 0,01 und bei EURUSD mit 0,0001 multiplizieren müssen, und das ist bei jedem Paar genau das, was Point ausmacht.

Ok, ich sehe das Problem... was ich tun möchte, ist eine Barriere zu schaffen , die auf der Nähe zu den oberen und unteren Linien basiert, über die hinaus keine Trades erlaubt sind.

-Also ermittle ich zunächst den aktuellen Wert der Linie.

-dann addiere oder subtrahiere ich den Abstand, den ich als nicht tolerierbar für den Handel definieren möchte, als ganze Zahl, die ich als 1=1 Pip-Bewegung betrachte.

-dann muss ich den Wert des Kurses für jeden Tick ermitteln, um die Vergleichsbedingung zu erfüllen

Sollte diese Zeile also etwas anderes als "price_Typical" sein?

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

Ich bin mir nicht sicher, wie ich verhindern kann, dass die unterschiedlichen Genauigkeiten ein Problem verursachen. Alles, was ich tun möchte, ist die Bewegung des Preises in Bezug auf die Bewegung der Linie zu vergleichen, die angeben wird, 'don't trade long über diesem Niveau' oder 'don't trade short unter diesem Niveau'...

Ich bin bereit für eine Pause, mein Gehirn ist zu Brei geworden.

 

PRICE_TYPICAL hat nichts damit zu tun. Sie können es in der MQL4-Hilfe nachlesen.

Alles was Sie tun müssen, um den Unterschied zwischen dem Preis und der Linie herauszufinden, ist das eine vom anderen zu subtrahieren. Wie ich schon sagte, ist das Problem, dass Sie manchmal 0,0006 und manchmal 0,06 erhalten und dies der Punkt löst.

(Ich muss jetzt schließen. Wir können morgen weitermachen)

 
elihayun:
Sie übersehen eine Sache. Um das Point-Zeug zu verstehen, stellen Sie sich folgendes vor

in USDJPY ist der Preis 114,95 und in EURUSD ist der Preis 1,2773

In USDJPY Ask - upper wird also wie folgt sein: 114.95 - 114.93 = 0.02

und in EURUSD wird der Preis 1,2773 - 1,2771 = 0,0002 sein

Beides sind 2 Punkte, aber mit unterschiedlicher Genauigkeit, so dass wir bei USDJPY 2 mit 0,01 und bei EURUSD mit 0,0001 multiplizieren müssen, und das ist in jedem Paar genau das, was Point ausmacht.

so Punkt ist wie Tracking Pip Bewegung in jedem Paar unabhängig von der unterschiedlichen Präzision erforderlich?

 
elihayun:
PRICE_TYPICAL hat nichts damit zu tun. Sie können darüber in der MQL4-Hilfe lesen

Alles, was Sie tun müssen, um den Unterschied zwischen dem Preis und der Linie herauszufinden, ist eine von der anderen zu subtrahieren. Wie ich schon sagte, besteht das Problem darin, dass man manchmal 0,0006 und manchmal 0,06 erhält, und das ist der Punkt, den es zu lösen gilt.

(Ich muss jetzt schließen. Wir können morgen weitermachen)

Vielen Dank für Ihre Geduld und Ermutigung

 

Das habe ich getan....

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v2", back, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel + shortrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

Der Bericht zeigt, dass er die Einstellungen erhalten hat, aber leer ist....

Offensichtlich verbietet es den Handel, aber ALLE von ihnen? Ich finde das schwer zu glauben, wenn ich nur die langen und kurzen Bereiche auf 1 gesetzt habe! Sicherlich gab es einige Handelssignale innerhalb dieses Bereichs? Ich glaube nicht, dass dies das tut, was ich beabsichtigt habe.

Dateien:
mac5.htm  5 kb
 

Ich habe den Trendband-Indikator geändert, damit er flexibler ist.

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

upper[x] = middle2 + (factor*avg);

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

Danach habe ich die Bandbreite auf 20 verschoben, so dass die Bänder nicht mehr berührt werden... aber ich erhalte immer noch die Fehlermeldung "error opening 131".

ERR_INVALID_TRADE_VOLUME 131 Ungültiges Handelsvolumen.

Was ist da los?

Grund der Beschwerde: