An dieser Stelle wurde es etwas knifflig: Ich habe diesen Code genommen (Dank an Alekseu Fedotov):
//+----------------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара закрытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) t=OrderCloseTime(); } } } } } } return(iBarShift(sy, tf, t, True)); }
Und jetzt stelle ich den Scheck aus:
if(УСЛОВИЕ && NumberOfBarCloseLastPos()>0)
Und hier liegt der Haken, denn zunächst wird NumberOfBarCloseLastPos auf "-1" gesetzt. Folglich wird die erste Bestellung nie geöffnet.
Was können wir in dieser Situation tun? Oder habe ich etwas missverstanden?
In dieser Situation könnten wir versuchen,if(CONTROL && NumberOfBarCloseLastPos()>-2), oder denken
Hier ist eine kleine Nuance: Ich habe diesen Code (dank Alekseu Fedotov):
//+----------------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара закрытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { ... return(iBarShift(sy, tf, t, True)); }
An dieser Stelle wurde es etwas knifflig: Ich habe diesen Code genommen (Dank an Alekseu Fedotov):
//+----------------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара закрытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) t=OrderCloseTime(); } } } } } } return(iBarShift(sy, tf, t, True)); }
Und jetzt stelle ich den Scheck aus:
if(УСЛОВИЕ && NumberOfBarCloseLastPos()>0)
Und hier liegt der Haken, denn zunächst wird NumberOfBarCloseLastPos auf "-1" gesetzt. Folglich wird die erste Bestellung nie geöffnet.
Was kann in dieser Situation getan werden? Oder habe ich etwas missverstanden?
Nun, das würde ich auch tun:
//+------------------------------------------------------------------+ int BarCloseLastPos(string symbol_name, ENUM_TIMEFRAMES timeframe, int type, int magic_number) { datetime time=0; int j=-1; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()!=magic_number) continue; if(OrderSymbol()!=symbol_name) continue; if(OrderType()!=type) continue; if(OrderCloseTime()>time) { time=OrderCloseTime(); j=i; } } } if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)) return(iBarShift(symbol_name,timeframe,time)); return(EMPTY); } //+------------------------------------------------------------------+
... und prüfen:
if(BarCloseLastPos(Symbol(),PERIOD_CURRENT,OP_BUY,Magic)>0) { // Последняя позиция Buy была закрыта не на текущем баре }
Алексей Тарабанов: Nun, was wäre, wenn es heimlich auf der aktuellen Bar geschlossen?
Das ist genau das, was man vermissen muss. Es ist nicht notwendig, eine Position zu eröffnen, wenn die vorherige auf diesem Balken geschlossen wurde - auf Null.
Und wenn wir die Bedingung prüfen müssen, dass die Position auf dem aktuellen Balken geschlossen wurde, müssen wir Null prüfen:
if(BarCloseLastPos(Symbol(),PERIOD_CURRENT,OP_BUY,Magic)==0) { // Последняя позиция Buy была закрыта на текущем баре }
An dieser Stelle wurde es etwas knifflig: Ich habe diesen Code genommen (Dank an Alekseu Fedotov):
//+----------------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара закрытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) t=OrderCloseTime(); } } } } } } return(iBarShift(sy, tf, t, True)); }
Und jetzt stelle ich den Scheck aus:
if(УСЛОВИЕ && NumberOfBarCloseLastPos()>0)
Und hier liegt der Haken, denn zunächst wird NumberOfBarCloseLastPos auf "-1" gesetzt. Folglich wird die erste Bestellung nie geöffnet.
Was können wir in dieser Situation tun? Oder habe ich etwas missverstanden?
Guten Morgen, MT4-Forum-Benutzer! Ich stand vor einem Problem, und ich denke, entweder ich weiß nicht, wie zu berechnen und eine Menge von Rechnern oder mt4 Compiler hat seine eigene Art und Weise. Ich schreibe den Code print((1.1145-1.1123-0.0020)/0.0001) sollte 2 erhalten.Ich habe versucht zu drucken((OrdArr[i].buy-Ord[1,3]-PipStep)/Point) pinstep ist gleich 0,0020 alle Variablen double Ergebnis druckt ein Zehntel weniger als es sein sollte. Vielleicht weiß jemand, was das Problem ist! SPS.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
An dieser Stelle wurde es etwas knifflig: Ich habe diesen Code genommen (Dank an Alekseu Fedotov):
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает номер бара закрытия последней позиции или -1. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True));
}
Und jetzt stelle ich den Scheck aus:
Und hier liegt der Haken, denn zunächst wird NumberOfBarCloseLastPos auf "-1" gesetzt. Folglich wird die erste Bestellung nie geöffnet.
Was können wir in dieser Situation tun? Oder habe ich etwas missverstanden?
Hier ist eine kleine Nuance: Ich habe diesen Code (dank Alekseu Fedotov):
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает номер бара закрытия последней позиции или -1. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
...
return(iBarShift(sy, tf, t, True));
}
In dieser Situation könnten Sie versuchen,if(CONDITION && NumberOfBarCloseLastPos()>-2), oder denken
An dieser Stelle wurde es etwas knifflig: Ich habe diesen Code genommen (Dank an Alekseu Fedotov):
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает номер бара закрытия последней позиции или -1. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True));
}
Und jetzt stelle ich den Scheck aus:
Und hier liegt der Haken, denn zunächst wird NumberOfBarCloseLastPos auf "-1" gesetzt. Folglich wird die erste Bestellung nie geöffnet.
Was kann in dieser Situation getan werden? Oder habe ich etwas missverstanden?
Nun, das würde ich auch tun:
int BarCloseLastPos(string symbol_name, ENUM_TIMEFRAMES timeframe, int type, int magic_number) {
datetime time=0;
int j=-1;
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
if(OrderMagicNumber()!=magic_number) continue;
if(OrderSymbol()!=symbol_name) continue;
if(OrderType()!=type) continue;
if(OrderCloseTime()>time) {
time=OrderCloseTime();
j=i;
}
}
}
if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)) return(iBarShift(symbol_name,timeframe,time));
return(EMPTY);
}
//+------------------------------------------------------------------+
... und prüfen:
// Последняя позиция Buy была закрыта не на текущем баре
}
Nun, das würde ich auch tun:
int BarCloseLastPos(string symbol_name, ENUM_TIMEFRAMES timeframe, int type, int magic_number) {
datetime time=0;
int j=-1;
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
if(OrderMagicNumber()!=magic_number) continue;
if(OrderSymbol()!=symbol_name) continue;
if(OrderType()!=type) continue;
if(OrderCloseTime()>time) {
time=OrderCloseTime();
j=i;
}
}
}
if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)) return(iBarShift(symbol_name,timeframe,time));
return(EMPTY);
}
//+------------------------------------------------------------------+
... und prüfen:
// Последняя позиция Buy была закрыта не на текущем баре
}
Nun, was wäre, wenn es heimlich auf der aktuellen Bar geschlossen?
Das ist genau das, was man vermissen muss. Es ist nicht notwendig, eine Position zu eröffnen, wenn die vorherige auf diesem Balken geschlossen wurde - auf Null.
Und wenn wir die Bedingung prüfen müssen, dass die Position auf dem aktuellen Balken geschlossen wurde, müssen wir Null prüfen:
// Последняя позиция Buy была закрыта на текущем баре
}
An dieser Stelle wurde es etwas knifflig: Ich habe diesen Code genommen (Dank an Alekseu Fedotov):
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает номер бара закрытия последней позиции или -1. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True));
}
Und jetzt stelle ich den Scheck aus:
Und hier liegt der Haken, denn zunächst wird NumberOfBarCloseLastPos auf "-1" gesetzt. Folglich wird die erste Bestellung nie geöffnet.
Was können wir in dieser Situation tun? Oder habe ich etwas missverstanden?