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

 

Die Aufträge werden zu nahe am aktuellen Geld-/Briefkurs platziert. Die Aufträge müssen einen bestimmten Abstand zum aktuellen Kurs haben. Verwenden Sie die Funktion Marketinfo mit dem Parameter stop_level, um diese Informationen zu extrahieren, und vergewissern Sie sich, dass Ihre Orders so weit von der Geld-/Briefmarke entfernt sind.

Ich hoffe, das hilft Ihnen.

 
Maji:
Die Orders werden zu nahe am aktuellen Bid/Ask platziert. Die Orders müssen einen gewissen Abstand zum aktuellen Kurs haben. Verwenden Sie die Funktion Marketinfo mit dem Parameter stop_level, um diese Informationen zu extrahieren, und stellen Sie sicher, dass Ihre Orders so weit von der Geld-/Briefmarke entfernt sind. Ich hoffe, das hilft.

ummm....

Tut mir leid, aber ich kann Ihnen nicht folgen...

Kann ich nicht einfach einen Auftrag auf dem "aktuellen" Niveau platzieren? Das meiste, was ich bisher getan habe, war, Aufträge am Ende des Zeitraums auszuführen. Kann man das tun?

Ich muss erst lernen, was der Parameter stop_level und die marketinfo-Funktionen sind.

Danke für den Hinweis

Was auch immer es wert sein mag, hier ist das Update, das ich für den Trendband-Indikator gemacht habe, das war ziemlich lustig

ok hier ist es...

Marktinformations-Identifikatoren, die mit der Funktion MarketInfo() verwendet werden.

Es kann einer der folgenden Werte sein:

MODE_STOPLEVEL 14 Stop-Level in Punkten.

Ich nehme also an, es ist...

MarktInfo(14)

Wo muss ich das eintragen?

oder ist das...

MarketInfo(NULL,MODE_STOPLEVEL);

oder...

double bid =MarketInfo(NULL,MODE_BID);

double ask =MarketInfo(NULL,MODE_ASK);

double point =MarketInfo(NULL,MODE_POINT);

Ich schätze, ich verstehe nicht wirklich, wie man das benutzt...können Sie mir ein Beispiel zeigen?

Hier ist das, womit ich in diesem Fall arbeite... Ich frage mich, warum dieser EA vorher keine Probleme hatte, Aufträge zu platzieren, und jetzt hat er welche? Es hat funktioniert, bevor ich den Filter hinzugefügt habe?

//----------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);

// 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)

{

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)

{

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

}

}

//+------------------------------------------------------------------+
Dateien:
 

Sie sollten MarketInfo(NULL,MODE_STOPLEVEL) verwenden, um zu bestimmen, wie weit Ihre Stop-Orders vom aktuellen Kurs entfernt sein sollten. Denken Sie daran, dass der Wert in Pips zurückgegeben wird.

Sie können den Wert jedoch auch in Punkte umrechnen, indem Sie etwas wie folgt verwenden:

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

Stellen Sie nun sicher, dass Ihre Stop-Orders mindestens so weit vom aktuellen Marktpreis entfernt sind. Übrigens, durch die Verwendung von NormalizeDouble und Digits konvertieren Sie den Pip-Wert in die entsprechenden Nachkommastellen (4 oder 2). Das ist eine sehr schöne Sache in MT4.

Hoffentlich hilft das.

Maji

 
Maji:
Sie sollten MarketInfo(NULL,MODE_STOPLEVEL) verwenden, um zu bestimmen, wie weit Ihre Stop-Orders vom aktuellen Kurs entfernt sein sollten. Denken Sie daran, dass der Wert in Pips zurückgegeben wird.

Sie können jedoch in Punkte umrechnen, indem Sie etwas wie folgt verwenden:

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

Stellen Sie nun sicher, dass Ihre Stop-Orders mindestens so weit vom aktuellen Marktpreis entfernt sind. Übrigens, durch die Verwendung von NormalizeDouble und Digits konvertieren Sie den Pip-Wert in die entsprechenden Nachkommastellen (4 oder 2). Das ist eine sehr schöne Sache in MT4.

Hoffentlich hilft das.

Maji

Was ich nicht verstehe, ist, warum das Hinzufügen des Indikators als Filter die Art und Weise, wie er Aufträge oder Stops platziert, durcheinander bringt. Es hat sich nichts geändert, soweit ich das beurteilen kann. Warum also ändert das Verbot von Trades oberhalb der Linie die Art und Weise, wie er seine Stop-Orders platziert?

 

Wenn es Ihnen nichts ausmacht, schicken Sie mir den aktuellen Code per E-Mail. Ich werde versuchen, am Wochenende einen Blick darauf zu werfen. Ich kann nicht versprechen, dass ich das Problem beheben kann, aber ich werde es ehrlich versuchen.

 

Hier ist Ihr Problem, das Sie sich zuerst ansehen sollten

if(isCrossed == 1 && Ask < upLevel-longrange)[/PHP]

Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points

the corrected code is like that

[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)
 

Nun, das ist ausnahmsweise mal eine einfache Lösung ...

nur...

... die Sache ist, dass ich es geändert habe, seit ich diesen Beitrag geschrieben habe. ...Ich habe den Indikator mit einem Parameter modifiziert, um die Bänder breiter oder schmaler zu machen und den Teil des EAs herausgenommen, der eine nahe Grenze zur Linie bildet. Ich dachte mir, wenn ich nur die Handelsbänder selbst schmaler oder breiter machen könnte, würde das die gleiche Funktion bieten, ohne so komplex zu sein, und für mich war es einfacher, den geistigen Überblick zu behalten....so...

derzeit ist es so...

//----------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);

// 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)

{

if(UseStopLoss)

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

else

sowohl ask als auch uplevel sind beide im Preis, nicht wahr? das ist der Code, der immer noch den Fehler erzeugt. da muss noch mehr los sein.

 

bisher sehe ich kein Problem (codeorientiert)

Aber logisch betrachtet, sieht es so aus

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

Sie prüfen nicht, ob sie nahe beieinander liegen, sondern nur, ob der Preis unter der Linie liegt

 

Ich wusste, dass ich es habe!!!

Ich Tests genau das, was u wollte zu bekommen, und meine previuos Beitrag habe ich nur die falsche EA.

Dieser EA kann bis zu 4 TF zu überprüfen, ob alle von ihnen bekommen den Rand zur gleichen Zeit. U kann nur eine auswählen, wenn u wollen.

Sie können es als ein Beispiel verwenden, wie man die Logik aus einem Indikator zu bekommen, und wie man mehrere TF zusammen zu kombinieren

Mit freundlichen Grüßen

Eli

Dateien:
tbs.mq4  7 kb
 
elihayun:
Ich wusste, dass ich es habe!!!

Ich testet genau das, was u wollte zu bekommen, und meine previuos Beitrag habe ich gerade die falsche EA.

Dieser EA kann bis zu 4 TF überprüfen, um zu prüfen, ob alle von ihnen den Rand zur gleichen Zeit erhalten. U kann nur eine auswählen, wenn u wollen.

Sie können es als Beispiel verwenden, wie man die Logik aus einem Indikator herausholen kann und wie man mehrere TF miteinander kombiniert.

Mit freundlichen Grüßen

Eli

Das ist faszinierend Ich habe mich noch nicht wirklich mit Multi-TF-Indikatoren befasst, aber ich glaube, dass sie ihre Berechtigung haben.