Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 16.04.19
Tox01 Tox01 ist offline
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 12
Tox01 befindet sich auf einem aufstrebenden Ast
Standard OpenRangeBreakOut funktioniert nicht

Hallo zusammen,

ich bin Anfänger in Sachen Programmierung und versuche mich Schritt für Schritt an die Materie einzuarbeiten.
Aktuell versuche ich mich an einem Expert Advisor, welcher allerdings nicht das tut, was er soll. Und ich komme einfach nicht darauf, an was es liegen könnte.

Was er tun soll:
- von 8-9 Uhr das höchste Hoch und das tiefste Tief erfassen
- ab 9 Uhr einen Trade eingehen, sobald der Kurs über oder unter das Hoch bzw. Tief steigt oder sinkt, welches er zwischen 8 und 9 Uhr erfasst hat.
- er soll nur 1 Trade am Tag eingehen

Was er tut:
- er erfasst von 8-9 Uhr das höchste Hoch und das tiefste Tief
- ab 9 Uhr geht er eine Vielzahl von Trades ein

Woran könnte das liegen? Über Hilfe wäre ich sehr dankbar.

Code:
string Anfangszeit_alsString = "08:00";
string Endzeit_alsString = "09:00";
string EndeDesTages_alsString = "21:00";
datetime CurrentTime;
datetime Anfangszeit_alsZeit;
datetime Endzeit_alsZeit;
datetime EndeDesTages_alsZeit;

extern int StartHour = 8;
extern int EndHour = 21;
extern int MagicNumber=12345;
double pips, ticksize;
extern double LotSize=0.1;
bool TimeShift=false;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ticksize = MarketInfo(Symbol(),MODE_TICKSIZE);
   if(ticksize==0.00001 || ticksize==0.001 || ticksize== 0.1)
   pips=ticksize*10;
   else pips=ticksize;

   return(INIT_SUCCEEDED);
//---

  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      Anfangszeit_alsZeit = StringToTime(Anfangszeit_alsString);
      Endzeit_alsZeit = StringToTime(Endzeit_alsString);
      EndeDesTages_alsZeit = StringToTime(EndeDesTages_alsString);
      
      double Hoechstkurs=0;
      double Tiefstkurs=0;
      
      if (TradingTime() == true)
      {    
         for (int i=0;i<60;i++)
         {
            datetime zeit =iTime(_Symbol,PERIOD_CURRENT,i);
         
            if(zeit <=Endzeit_alsZeit)
            {
               double hoch = iHigh(_Symbol,PERIOD_CURRENT,i);
            
               if(hoch>Hoechstkurs)Hoechstkurs=hoch;
            
               double tief = iLow(_Symbol,PERIOD_CURRENT,i);
            
               if(tief<Tiefstkurs||Tiefstkurs==0)Tiefstkurs=tief;
            }
      
            if(Anfangszeit_alsZeit==zeit)
            {
               Comment(Hoechstkurs," ", Tiefstkurs);
               break;
            }  
         }
      }
      else return;
      
      datetime aktuellerzeitstempel = iTime(_Symbol,PERIOD_CURRENT,0);
      
      if(aktuellerzeitstempel>Endzeit_alsZeit&&Hoechstkurs>0&&Tiefstkurs>0)
      {
         ObjectCreate("OpenRange "+TimeToString(TimeCurrent(),TIME_DATE),
                  OBJ_RECTANGLE,0,Anfangszeit_alsZeit,Tiefstkurs,
                  Endzeit_alsZeit, Hoechstkurs);
      }
      
      if(aktuellerzeitstempel>Endzeit_alsZeit&&Hoechstkurs>0&&Tiefstkurs>0&&iClose(NULL,0,0)>Hoechstkurs&&TimeShift==false)
      {
         OrderEntry(0);
      }
      if(aktuellerzeitstempel>Endzeit_alsZeit&&Hoechstkurs>0&&Tiefstkurs>0&&iClose(NULL,0,0)<Tiefstkurs&&TimeShift==false)
      {
         OrderEntry(2);
      }
  }
//+------------------------------------------------------------------+
//| TradingTime-Funktion                                             |
//+------------------------------------------------------------------+
bool TradingTime()
{
 CurrentTime = TimeHour(TimeCurrent());
 if (StartHour < EndHour)
    {
     if ((CurrentTime < StartHour) || (CurrentTime >= EndHour)) return(false);
    }      
 if (StartHour > EndHour)
    {
     if ((CurrentTime < StartHour) && (CurrentTime >= EndHour)) return(false);
    }
 return(true);
}
//+------------------------------------------------------------------+
//| Pair-FUnktion                                                    |
//+------------------------------------------------------------------+
int OpenOrdersThisPair(string pair)
{
   int total=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==pair)total++;
   }
   return(total);
}
//+------------------------------------------------------------------+
//| OrderEntrys                                                      |
//+------------------------------------------------------------------+
void OrderEntry(int direction)
{
   if(direction==0)
      if(OpenOrdersThisPair(Symbol())<=0)
         if(!OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-20,Ask+20,NULL,MagicNumber,0,Green))
            Print("Order #",IntegerToString(OrderTicket())," Error in Ordersend. Error code=",GetLastError());

   if(direction==2)
      if(OpenOrdersThisPair(Symbol())<=0)
         if(!OrderSend(Symbol(),OP_SELL,LotSize,Bid,3,Ask+20,Ask-20,NULL,MagicNumber,0,Red))            
            Print("Order #",IntegerToString(OrderTicket())," Error in Ordersend. Error code=",GetLastError());
}