Wie programmiert man? - Seite 278

 

Ich habe einen Backtest von 20 Tagen gemacht und es sieht so aus, als würde ich Geld verlieren.

Ich werde ein Jahr lang backtesten, mal sehen

aber vor allem muss ich wissen, ob ich die Zeiten ändern kann, indem ich einfach den Wert in externem String begin und externem String end ändere?

 

Auch was ich bemerkt ist, dass EA macht Trades mehrere Male am Tag. So müssen wir EA sagen, nur einen Handel für den ersten Ausbruch aus dieser Min-Max -/+ 5 Pips Bereich zu machen. Außerdem müssen wir Trailing-Stop anstelle von nur Stop-Loss einbauen.

Auch Frage über Zahlen. Ist 300 nicht gleichbedeutend mit 300 Pips? Wir brauchen einen Stop von 30 Pips und einen Take Profit von 50 Pips. Auch was bedeutet magis = 123 bedeutet?

dieselbe Frage für dieses if(Bid<=(low-0.005)) 0.005 ist hier nicht 50 Pips?

ist nicht extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="02:00";

extern string Ende="10:00";

extern double distance = 80;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double niedrig;

double hoch;

extern double lots = 0.1;

int magic = 123;

int Schlupf = 1;

string kommentar = "";

int ticket;

 
Avasys:
Auch was ich bemerkte, ist, dass EA macht Trades mehrere Male am Tag. So müssen wir EA sagen, nur einen Handel für den ersten Ausbruch aus dieser Min-Max -/+ 5 Pips Bereich zu machen. Auch müssen wir Trailing-Stop anstelle von nur Stop-Loss zu integrieren.

Auch eine Frage zu den Zahlen. Ist nicht 300 gleich 300 Pips? Wir müssen stoppen, um 30 Pips und Take Profit 50 Pips sein. Auch was bedeutet magis = 123 bedeutet?

dieselbe Frage für dieses if(Bid<=(low-0.005)) 0.005 ist hier nicht 50 Pips?

ist nicht extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="02:00";

extern string Ende="10:00";

extern double distance = 80;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double niedrig;

double hoch;

extern double lots = 0.1;

int magic = 123;

int Schlupf = 1;

string comment = "";

int-Ticket;

[lang=pl]Sie haben Recht, es sollte 0,0005 statt 0,005 sein. 300 und 500 ist, weil ich fünf Ziffern Broker ist es bedeuten 300 poits so 30 Pips.

Bitte sagen Sie mir, welche Art von Trailing-Stop Sie brauchen? über magische Zahl. Wie Sie sehen können ich ändern Sie Magie, wenn Sie nicht wie 123 [/lang]

Dateien:
simple_ea.mq4  4 kb
 
g.pociejewski:
[lang=pl]Sie haben Recht, es sollte 0,0005 statt 0,005 sein. 300 und 500 ist, weil ich fünf Ziffern Broker ist es 300 poits so 30 Pips bedeuten. Bitte sagen Sie mir, welche Art von Trailing-Stop Sie brauchen? über magische Zahl. Wie Sie sehen können, ändere ich Sie magisch, wenn Sie nicht wie 123 [/lang]

Danke

so tut dies EA jetzt macht Geschäfte nur einmal am Tag, so Ausbruch aus den Ebenen kann einige Male durch Tag auftreten, aber es kann nur einmal handeln.

Auch in Bezug auf EURJPY, da es hohen Wert Währung ist, ich immer noch die gleiche Nummerierung verwenden oder ich 00 verschieben?

Und kann ich selbst die Zahlen für Stop Loss, Take Profit und Zeiten ändern?

in Bezug auf Trailing Stop. Ich möchte, wenn der Gewinn steigt 35 Pips Trailing-Stop muss folgen, um den Gewinn zu sperren.

Was also, wenn ich hier ändere:

extern double stopLoss = 300.0; (Ich benutze 4 Ziffern Broker so, sollte ich dies ändern?)

extern double takeProfit = 500.0;

extern string Begin="0:00"; (was passiert, wenn ich den Zeitbereich 22:00 des Vortages und 06:00 des aktuellen Tages festlegen möchte?)

extern string End="08:15";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double niedrig;

double hoch;

extern double lots = 0.1;

int magic = 123;

int Schlupf = 1;

string kommentar = "";

int ticket;

Und was passiert, wenn ich folgendes ändere

if(Bid<=(low-0.005))

Es darf die Funktionalität des Codes nicht beeinträchtigen, richtig?

Das einzige Problem, das ich beim Backtest habe, ist, dass es so aussieht, als ob der EA mehrere Trades an einem Tag ausführt, also kann man es im Code schaffen, nur einen Trade für ein Paar pro Tag auszuführen

 

Hallo nochmal

OK Ich habe herausgefunden, dass der Abstand nicht 80 für Paare wie GBPUSD sein muss, die einen niedrigeren Wert als JPY-Paare haben, so dass im Falle von JPY-Paaren der Abstand 10X als für Paare mit niedrigem Wert sein muss.

Und wieder konnte ich eine Sache nicht verstehen, wenn ich es im Ergebnis backtest, heißt es, als ob EA mehrere Male an einem Tag mit demselben Paar gehandelt hat.

Ist es also möglich, dass, wenn der EA eine Position eingegangen ist, diese Position an diesem Tag nur eine einzige sein muss?

Danke

Was bedeutet auch das Folgende:

int slippage= 1;

string comment = "";

int ticket;

und könnte ich auch ein Skript in den EA einfügen und wenn der Handel ausgeführt wird, wird es mir per SMS oder E-Mail zugeschickt?

Danke

 

StopTrading für heute, wenn eine Order in der Historie aufgeführt ist

Hallo,

vielleicht kann mich jemand anleiten, was zu tun ist:

- Ein Auftrag wird ausgeführt, mit Gewinn oder Verlust geschlossen und in der Historie aufgeführt.

- nun möchte ich den Handel deaktivieren/stoppen, neue Aufträge für dieses Paar (Symbol) für den ganzen Tag zu öffnen

- Am nächsten Tag kann eine neue Order ausgeführt werden.

Es ist wie eine "Max Trades Per Bar" Funktion, aber basierend auf der Historie.

Mehrere verschiedene getestete Codeschnipsel scheitern, da ich nicht über erweiterte Programmierkenntnisse verfüge

Beispiel:

1 2008.01.07 02:36 verkaufen 1 0.10 1.4730 0.0000 0.0000 0.00 10000.00

2 2008.01.07 03:14 Schließen 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 Verkaufen 2 0,10 1,4712 0,0000 0,0000 0,00 10016.00

4 2008.01.07 07:54 Schließen 2 0,10 1,4672 0,0000 0,0000 40,00 10056,00

5 2008.01.07 07:54 Verkaufen 3 0,10 1,4671 0,0000 0,0000 0,00 10056,00

6 2008.01.09 15:56 Schließen 3 0,10 1,4663 0,0000 0,0000 7,04 10063,04

7 2008.01.10 14:24 kaufen 4 0,10 1,4708 0,0000 0,0000 0,00 10063.04

8 2008.01.10 14:47 Schließen 4 0,10 1,4748 0,0000 0,0000 40,50 10103,54

Für jede Hilfe bin ich dankbar.

Mit freundlichen Grüßen

Michael

 
ixbone:
Hallo!

vielleicht kann mich jemand anleiten zu tun:

- Der Auftrag wird ausgeführt, mit Gewinn oder Verlust geschlossen und in der Historie aufgeführt.

- nun möchte ich den Handel deaktivieren/ keine neuen Aufträge für dieses Paar (Symbol) für den ganzen Tag eröffnen

- Am nächsten Tag kann eine neue Order ausgeführt werden.

Es ist wie eine "Max Trades Per Bar" Funktion, aber basierend auf der Historie.

Mehrere verschiedene getestete Codeschnipsel scheitern, weil ich nicht über erweiterte Programmierkenntnisse verfüge

Beispiel:

1 2008.01.07 02:36 verkaufen 1 0.10 1.4730 0.0000 0.0000 0.00 10000.00

2 2008.01.07 03:14 Schließen 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 Verkaufen 2 0,10 1,4712 0,0000 0,0000 0,00 10016.00

4 2008.01.07 07:54 Schließen 2 0,10 1,4672 0,0000 0,0000 40,00 10056,00

5 2008.01.07 07:54 Verkaufen 3 0,10 1,4671 0,0000 0,0000 0,00 10056,00

6 2008.01.09 15:56 Schließen 3 0,10 1,4663 0,0000 0,0000 7,04 10063,04

7 2008.01.10 14:24 kaufen 4 0,10 1,4708 0,0000 0,0000 0,00 10063,04

8 2008.01.10 14:47 Schließen 4 0,10 1,4748 0,0000 0,0000 40,50 10103,54

Für jede Hilfe bin ich dankbar.

Grüße

Michael

[lang=pl]Hallo Michael,

Eine Frage, müssen Sie stoppen neue Positionen zu öffnen, wenn eine Position im aktuellen Tag geschlossen ist, oder Sie nicht zulassen, dass zum Beispiel öffnen Short, wenn eine Short

Stop geschlossen wird? Gibt es ein Beispiel, wie man es im Fall von OP_BUY macht (für andere ist es ähnlich)

int Zeit;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lots = 0.1;

int orders = 0;

int magic = 123;

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

Print(countOrders(magic, OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(BestellMagicNumber()==oMagic) {

if(BestellSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return(0);

return(NormalizeDouble(w1, Digits));

}

//+------------------------------------------------------------------+

Ich hoffe, dass das klar ist. Falls Sie Fragen haben, kontaktieren Sie mich bitte.

Cheers,

Grzesiek[/lang]

 

Hallo Grzesiek,

ja, nur das Eröffnen neuer Positionen am aktuellen Tag wird gestoppt, egal ob Kauf, Verkauf, schwebend oder storniert:

- Wenn eine Order im Gewinn, Verlust, gecancelt oder pending gelöscht und in der Historie vermerkt wird, sind für dieses Symbol() am aktuellen Tag keine neuen Trades jeglicher Art erlaubt

- wenn es einen neuen Tag gibt, können alle Arten von neuen Aufträgen ausgeführt werden.

Was ich gemacht habe, funktioniert nicht:

extern bool Only1OrderPerDay=true;

if(Only1OrderPerDay==true){

CountHistoryOrders();

}

void CountHistoryOrders(){

for(int d=0;d<OrdersHistoryTotal();d++){

OrderSelect(d,SELECT_BY_POS,MODE_HISTORY);{

if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==0))d++;

Print("HistoryOrders "+DoubleToStr(d,0));

{

if(d>0 ....time?...){

zurück;

}}}}}

Danke für die Hilfe

Michael

g.pociejewski:
[lang=pl]Hallo Michael,

Eine Frage, müssen Sie stoppen neue Positionen zu öffnen, wenn eine Position im aktuellen Tag geschlossen ist, oder Sie nicht zulassen, zum Beispiel offen kurz, wenn eine kurze

Stop geschlossen wird? Gibt es ein Beispiel, wie man es im Fall von OP_BUY macht (für andere ist es ähnlich)

int Zeit;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lots = 0.1;

int orders = 0;

int magic = 123;

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

Print(countOrders(magic, OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(BestellMagicNumber()==oMagic) {

if(BestellSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return(0);

return(NormalizeDouble(w1, Digits));

}

//+------------------------------------------------------------------+

Ich hoffe, dass das klar ist. Falls Sie Fragen haben, kontaktieren Sie mich bitte.

Cheers,

Grzesiek[/lang]
 

Stop Loss ziehen und ablegen

Hallo

Ich habe Drag and Drop Stop Loss Skript, und eine Liebe, es zu benutzen. Aber mit meinem Broker Dosis nicht für 2 Aufträge in einem gleichen scart nur 1 Auftrag gesetzt. Ich möchte Stop Loss für 2 Orders an der gleichen Stelle setzen.

Was ist das Problem? Bei anderen Brokern funktioniert es einwandfrei.

Bitte um Hilfe

int start()

{

//----

int Ziffern = MarketInfo(Symbol(),MODE_DIGITS);

double Wert = NormalizeDouble(WindowPriceOnDropped(),Ziffern);

for(int i=OrdersTotal()-1;i>=0;i--)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

weiter;

if(BestellSymbol()!=Symbol())

fortfahren;

RefreshRates();

if(OrderType()==OP_BUY)

if(Wert<Gebot)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if(OrderType()==OP_SELL)

if(Wert>Ask)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_BUYSTOP) || (OrderType()==OP_BUYLIMIT))

if(Wert<OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_SELLSTOP) || (OrderType()==OP_SELLLIMIT))

if(Wert>OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

}

return(0);

}

//+------------------------------------------------------------------+

 

Wie kann ich die X-Y-Koordinatenposition von zwei unterschiedlichen Indikatoren in einem EA finden, um zu kaufen und zu verkaufen, wenn sich

z.B. ein Macd und ein anderer Indikator im selben Unterfenster?

Grund der Beschwerde: