Wie programmiert man? - Seite 63

 

WIE eröffne ich eine Order nur am Anfang eines Taktes?

Hallo,

Ich implementiere einen EA, in dem ich eine Order nur dann öffnen möchte, wenn ein Indikator ein bestimmtes Niveau zwischen dem zweiten und dem vorhergehenden Balken gekreuzt hat.

Zum Beispiel, auf dem Tages-Chart, wenn es ein Kreuz zwischen dem 18. Januar und dem 19. Januar, möchte ich eine Bestellung am 20. Januar zu öffnen.

Ich habe das folgendermaßen gemacht:

Wenn ich eine Order eröffne, notiere ich den Zeitpunkt der Ordereröffnung.

Dann führe ich den folgenden Test durch: Ist (CurrentTime() - LastOrderOpenTime) < Period()?

Wenn ja, bedeutet dies, dass der aktuelle Balken noch nicht beendet ist, und ich sollte keine neue Order eröffnen. Und auch, wenn diese Bedingung falsch wird, sollte ich auf dem nächsten Balken des Charts sein, und das Kreuz geschah vor dem letzten Balken und keine Bestellung sollte bis zum nächsten Signal geöffnet werden.

Das Problem ist, dass beim Anhängen an einen Chart immer wieder neue Aufträge erstellt werden, bis der Balken zu Ende ist. Kann mir jemand sagen, was ich falsch gemacht habe?

 
dvarrin:
Hi,

Ich implementiere einen EA, in dem ich eine Order nur dann öffnen möchte, wenn ein Indikator ein bestimmtes Niveau zwischen dem zweiten und dem vorhergehenden Balken gekreuzt hat.

Zum Beispiel, auf dem Tages-Chart, Wenn es ein Kreuz zwischen dem 18. Januar und dem 19. Januar, möchte ich eine Bestellung am 20. Januar zu öffnen.

Ich habe das folgendermaßen gemacht:

Wenn ich eine Order eröffne, notiere ich den Zeitpunkt der Ordereröffnung.

Dann führe ich den folgenden Test durch: Ist (CurrentTime() - LastOrderOpenTime) < Period()?

Wenn ja, bedeutet dies, dass der aktuelle Balken noch nicht beendet ist, und ich sollte keine neue Order eröffnen. Und auch, wenn diese Bedingung falsch wird, sollte ich auf dem nächsten Balken des Charts sein, und das Kreuz geschah vor dem letzten Balken und keine Bestellung sollte bis zum nächsten Signal geöffnet werden.

Das Problem ist, dass beim Anhängen an ein Diagramm immer wieder neue Aufträge erstellt werden, bis der Balken zu Ende ist. Kann mir jemand sagen, was ich falsch gemacht habe?

Ich bin mir nicht sicher, aber hier ist, was jemand vor einiger Zeit für mich aufgeschrieben hat. Ich müsste es googeln, um dem ursprünglichen Schreiber die gebührende Anerkennung zu zollen.

Es hilft festzustellen, ob Sie auf die Eröffnung eines neuen Bar oder nicht.

int newbar()

{

double g;

int m,s,k;

m=Time[0]+Period()*60-TimeCurrent();

g=m/60.0;

s=m%60;

m=(m-m%60)/60;

return(m);

}[/CODE]

And I use it like this:

[CODE]if (newbar()==Period())

Hoffentlich hilft das.

 
dvarrin:
Hallo,

Ich implementiere einen EA, in dem ich eine Order nur dann öffnen möchte, wenn ein Indikator ein bestimmtes Niveau zwischen dem zweiten und dem vorhergehenden Balken gekreuzt hat.

Zum Beispiel, auf dem Tages-Chart, Wenn es ein Kreuz zwischen dem 18. Januar und dem 19. Januar, möchte ich eine Bestellung am 20. Januar zu öffnen.

Ich habe das folgendermaßen gemacht:

Wenn ich eine Order eröffne, notiere ich den Zeitpunkt der Ordereröffnung.

Dann führe ich den folgenden Test durch: Ist (CurrentTime() - LastOrderOpenTime) < Period()?

Wenn ja, bedeutet dies, dass der aktuelle Balken noch nicht beendet ist, und ich sollte keine neue Order eröffnen. Und auch, wenn diese Bedingung falsch wird, sollte ich auf dem nächsten Balken des Charts sein, und das Kreuz geschah vor dem letzten Balken und keine Bestellung sollte bis zum nächsten Signal geöffnet werden.

Das Problem ist, dass beim Anhängen an ein Diagramm immer wieder neue Aufträge erstellt werden, bis der Balken zu Ende ist. Kann mir jemand sagen, was ich falsch gemacht habe?

Dann führe ich den folgenden Test durch: Ist (CurrentTime() - LastOrderOpenTime) < Period()??

Sie können // return (0) hinzufügen;

ODER

das könnte helfen.. fügen Sie den Code ein..

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;

if(OrderSymbol()== Symbol () && OrderMagicNumber()== MN)

{

if( OrderOpenTime() >= iTime(0, PERIOD_D1, 0) samebar++;

}

}

Sie können zwischen den 2. wählen.

if ( samebar > 0 ) return (0);

ODER

if (samebar < 1) {Ihre Bestellcodes;}

Ich bin nicht gut in der Codierung, so könnte jemand versuchen zu überprüfen, ob ich die richtigen Codes platzieren.

 
dvarrin:
Hallo,

Ich implementiere einen EA, in dem ich eine Order nur dann öffnen möchte, wenn ein Indikator ein bestimmtes Niveau zwischen dem zweiten und dem vorhergehenden Balken gekreuzt hat.

Zum Beispiel, auf dem Tages-Chart, Wenn es ein Kreuz zwischen dem 18. Januar und dem 19. Januar, möchte ich eine Bestellung am 20. Januar zu öffnen.

Ich habe das folgendermaßen gemacht:

Wenn ich eine Order eröffne, notiere ich den Zeitpunkt der Ordereröffnung.

Dann führe ich den folgenden Test durch: Ist (CurrentTime() - LastOrderOpenTime) < Period()?

Wenn ja, bedeutet dies, dass der aktuelle Balken noch nicht beendet ist, und ich sollte keine neue Order eröffnen. Und wenn diese Bedingung falsch wird, sollte ich mich auf dem nächsten Balken des Charts befinden, und das Kreuz ist vor dem letzten Balken passiert, und es sollte keine Order bis zum nächsten Signal geöffnet werden.

Das Problem ist, dass beim Anhängen an ein Diagramm immer wieder neue Aufträge erstellt werden, bis der Balken zu Ende ist. Kann mir jemand sagen, was ich falsch gemacht habe?

Hmmm ...

if(iOpen(Symbol(),0,0)==iClose(Symbol(),0,0)&&iLow(Symbol(),0,0)==iHigh(Symbol(),0,0))

{

//A new bar has happend.

}
 

Wie erfahre ich den Gewinn des letzten Handels? Und die Lots, und die Seite?

 
Dan7974:
Wie erfahre ich den Gewinn des vorherigen Handels? Und die Lots, und die Seite?

Verwenden Sie OrdersHistoryTotal() anstelle von OrdersTotal(). Verwenden Sie dann OrderProfit(), OrderLots() usw. Sie müssen sicherstellen, dass die historischen Kurse für den Zeitraum, an dem Sie interessiert sind, geladen werden, und ich glaube, Sie können dies nur manuell tun - klicken Sie mit der rechten Maustaste auf die Registerkarte 'Orders History' und wählen Sie 'All History'.

Ich hätte hinzufügen sollen, dass Sie 'MODE_HISTORY' mit OrderSelect() verwenden müssen...

 
omelette:
Verwenden Sie OrdersHistoryTotal() anstelle von OrdersTotal(). Verwenden Sie dann OrderProfit(), OrderLots() usw. Sie müssen sicherstellen, dass die historischen Kurse für den Zeitraum, an dem Sie interessiert sind, geladen werden, und ich glaube, Sie können dies nur manuell tun - klicken Sie mit der rechten Maustaste auf die Registerkarte 'Orders History' und wählen Sie 'All History'. Ich hätte hinzufügen sollen, dass Sie 'MODE_HISTORY' mit OrderSelect() verwenden müssen...

Hallo Omelette,

Wusstest du, dass BT ein Problem bei der Suche in der Historie hat: es wird die echte Historie gesucht, nicht die von BT. Ich habe Metaquote vor einigen Monaten auf diesen Fehler angesprochen, aber sie hatten keine Antwort .... Vielleicht ist er jetzt behoben...

 

Hallo

Wie codieren Sie einen Zinserhöhungszyklus für eine Währung und einen Zinssenkungszyklus für eine andere Währung?

Kann EA die aktuellen Swaps und die historischen Swapsätze betrachten?

OILFXPRO

 
Dateien: