Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   warte x Bars bevor neue Order öffnet (http://www.expert-advisor.com/forum/showthread.php?t=6925)

derumuro 28.02.21 16:46

warte x Bars bevor neue Order öffnet
 
Hi,

nachdem eine Order geschlossen wurde, soll die Nächste erst nach x Bars eröffnet werden.
Wie programmiert man das ?

Danke schon mal im voraus!

traderdoc 28.02.21 18:26

Code:

if (iBarShift(NULL, Period(), OpenCloseTime()) > x_Bars) {
  //Action!
}

traderdoc

derumuro 01.03.21 18:02

traderdoc danke!

Dein Code funktioniert !

Ich habe aber noch Probleme mit folgendem Code:

Code:

datetime findlastorder()
{
  static int total    = OrdersHistoryTotal();
  static datetime timeclose = 0;
  datetime lastTime    = 0;
  int      lastTicket  = -1; // None open.
       
  if(OrdersHistoryTotal() == total) return(0);
  else
  total = OrdersHistoryTotal();
 
 
  for(int pos = OrdersHistoryTotal()-1; pos >= 0 ; pos--)
    {
      if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY) == true)
      {             
        if(OrderMagicNumber()    == magic       
          &&  OrderSymbol()      == Symbol()             
          &&  OrderOpenTime()    >  lastTime
          &&  OrderTicket()      >  lastTicket)
          {
            lastTime  = OrderOpenTime();
            lastTicket = OrderTicket();
            timeclose  = OrderCloseTime();   
            }
        }
      else
        {
            int err = GetLastError();
            checkErr("selct closed Order failed ",err);
            if(!Errors(err)) break;
        }               
    }
  return(timeclose);
}

1. ich bekomme den Fehler : Error - selct closed Order failed (4202) object does not exist
2. iBarShift hat werte von über 1000

Was ist falsch?

traderdoc 01.03.21 18:25

Da der Fehler über ein false der Zeile if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY) == true)
generiert wird und ich in der Schreibweise keinen Fehler sehe, auch nicht in der vorhergehenden for-Schleife, kann ich nicht abschließend beurteilen, warum der Fehler 4202 auftritt.

iBarShift hat damit überhaupt nichts zu tun.

Tritt die Zeile checkErr("selct closed Order failed ",err); nochmals auf?

traderdoc

RalphD 02.03.21 14:52

Hallo,

ich habe das Problem etwas anderes gelöst und wollte sowieso mal fragen, ob etwas gegen meine Variante spricht. Ich habe die Bars verwendet.
Unter den Variablen habe ich

int bar=Bars;

definiert.

Bevor er nun in die Entrybedingungen geht, habe ich die Abfrage gesetzt und am Ende der Schleife um 1 erhöht.

if (bar==Bars) {
// action
bar=Bars+1;
}

So kann die Schleife erst wieder durchlaufen werden, wenn Bars der aktuellen Kerze entspricht. Damit erziele ich den gewünschten Effekt.

Spricht etwas dagegen?

Danke
Ralph

HTML-Code:

//+------------------------------------------------------------------+
//|  Bedingungen für den Entry                                      |
//+------------------------------------------------------------------+

      if(bar==Bars){
 
     
//--- Bedingungen Buy Order
        if((sV1S1==EMPTY_VALUE)&&(mV1S1==EMPTY_VALUE)&&(fV1S1==EMPTY_VALUE)){                           

        if (Alarm!=OFF)Alert(Symbol()+" Buy Signal "+TimeToStr(TimeLocal()));                         
        if (Playsound!=OFF) PlaySound("alert.wav");                         
        if (Push!=OFF)SendNotification(Symbol()+" Buy Signal "+TimeToStr(TimeLocal()));                         
            CloseBuyStopPositions();
            {signal="Kaufen";}
        }
//--- Bedingungen Sell Order
        if((sV1S1!=EMPTY_VALUE)&&(mV1S1!=EMPTY_VALUE)&&(fV1S1!=EMPTY_VALUE)){                           

        if (Alarm!=OFF)Alert(Symbol()+" Sell Signal "+TimeToStr(TimeLocal()));                         
        if (Playsound!=OFF) PlaySound("alert.wav");                         
        if (Push!=OFF)SendNotification(Symbol()+" Sell Signal "+TimeToStr(TimeLocal()));                         
            CloseSellStopPositions();
            {signal="Verkaufen";}
        }
        bar=Bars+1;
      }


derumuro 02.03.21 16:42

Zitat:

Zitat von traderdoc (Beitrag 45143)
Da der Fehler über ein false der Zeile if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY) == true)
generiert wird und ich in der Schreibweise keinen Fehler sehe, auch nicht in der vorhergehenden for-Schleife, kann ich nicht abschließend beurteilen, warum der Fehler 4202 auftritt.

iBarShift hat damit überhaupt nichts zu tun.

Tritt die Zeile checkErr("selct closed Order failed ",err); nochmals auf?

traderdoc

Ich hatte schon eine andere Variante von FindLastOrder probiert welche die if == true Abfrage nicht hat und da hat es funktioniert, Dein Verdacht scheint also richtig zu sein.

Der Fehler checkErr("selct closed Order failed ",err); kommt ab und zu wieder vor. Würde eine Abfrage über isNewbar() abhilfe schaffen?

derumuro

traderdoc 02.03.21 18:23

Ich habe in meinen ganzen 12 Jahren Programmiertätigkeit diesen Fehler noch nicht ein einziges Mal erlebt. Und nein das würde nicht helfen.

Nochmal, die Funktion
if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY) == true)
ist eigentlich immer true, denn es werden die gesamten historischen Orders gescannt. Und weil die Orders mit dem Index 0 beginnen und dem Index OrdersHistoryTotal() - 1 enden und nicht zwischendurch eine historische Order abhanden kommen kann, verstehe ich auch diesen Fehler an dieser Stelle!! nicht.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:44 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum