Programmierfehler wer kann helfen ?

 

//+------------------------------------------------------------------+
//|                                                        Gerd2.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//Globale Externe Variable
extern int MA_lang =200;
extern int MA_kurz = 50;
extern double TradeLots=0.1;
extern double SL_prozent =0.5;
extern double TP_prozent =1.5;

extern int MagicNummer=12345;

//Globale Variable
datetime PeriodenStartZeit;
bool NeuePeriodeBegonnen,LongSignal,ShortSignal;
int LongOrder,ShortOrder;
//+--
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   PeriodenStartZeit=Time[0];
//---
   return(0);

  }
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)

//---
// EXPERT START FUNKTION

  {

   void OnTick()
43     {

      //Überprüfen ob neuer Periodenbeginn vorliegt
      if(PeriodenStartZeit!=Time[0])
        {
         NeuePeriodeBegonnen=true;
         PeriodenStartZeit=Time[0];
        }
      else NeuePeriodeBegonnen=false;

      //Marktdaten ermitteln
      double MAlang=iMA(NULL,0,MA_lang,0,MODE_SMA,PRICE_CLOSE,1);
      double MAlangVorperiode=iMA(NULL,0,MA_lang,0,MODE_SMA,PRICE_CLOSE,2);
      double MAkurz=iMA(NULL,0,MA_kurz,0,MODE_SMA,PRICE_CLOSE,1);
      double MAkurzVorperiode=iMA(NULL,0,MA_lang,0,MODE_SMA,PRICE_CLOSE,2);

      //Handelssignale ermitteln
      if(NeuePeriodeBegonnen==true)
        {
         //Buy Signal
         if(MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode)
           {
            LongSignal=true;
           }
         else LongSignal=false;
         //Sell Signal
         if(MAkurz<MAlang && MAkurzVorperiode>=MAlangVorperiode)
           {
            ShortSignal=true;
           }
         else ShortSignal=false;
        }
      else
        {
         LongSignal=false;
         ShortSignal=false;
        }
      // Long Signale umsetzen
      if(LongSignal==true)
        {
         //Evtl. Short Order schliessen
         if(ShortOrder>0)
           {
            OrderSelect(ShortOrder,SELECT_BY_TICKET;
                        bool ShortOrderGeclosed=OrderClose(ShortOrder,OrderLots(),Ask,10,Blue);
                        if(ShortOrderGeclosed==true) ShortOrder=0;
                        }
         //Long Order eröffnen
         while(LongOrder<=0)
           {
            LongOrder=OrderSend(Symbol(),OP_BUY,TradeLots,Ask,10,0,0,"MAXing Long",MagicNummer,0,Green);
           }
        }
      // Short Signale umsetzen
      if(ShortSignal==true)
        {
         //Evtl. Long Order schliessen
         if(LongOrder>0)
           {
            OrderSelect(LongOrder,SELECT_BY_TICKET;
                        bool LongOrderGeclosed=OrderClose(LongOrder,OrderLots,Bid,10,Blue);
                        if(LongOrderGeclosed==true) LongOrder=0;

                        //Short Order eröffnen
                        while(ShortOrder<=0)
              {
               ShortOrder=OrderSend(Symbol(),OP_SELLBUY,TradeLots,Bid,10,0,0,"MAXing Short",MagicNummer,0,Red);
              }
           }

         //SL Long DEALS SETZEN
         IF(OrderSelect(LongOrder,SELECT_BY_TICKET==true)
           {
            if(OrderCloseTime()==0 && OrderStopLoss()==0)
              {
               double StoppLoss=NormalizeDoubleOrderOpenPrice()/(1+(SL_prozent/100),Digits);
               bool OrderAngepasst=OrderModify,(OrderTicket()),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow;
              }
           }
         //SL Short DEALS SETZEN
         IF(OrderSelect(ShortOrder,SELECT_BY_TICKET==true)
           {
            if(OrderCloseTime()==0 && OrderStopLoss()==0)
              {
               StoppLoss=NormalizeDouble(OrderOpenPrice()*(1+(SL_prozent/100),Digits);
                                         OrderAngepasst=OrderModify,(OrderTicket()),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow;
                                         }

           }

         //TP Long DEALS SETZEN
         IF(OrderSelect(LongOrder,SELECT_BY_TICKET==true)
           {
            if(OrderCloseTime()==0 && OrderTakeProfit()==0)
              {
               double TakeProfit=NormalizeDouble(OrderOpenPrice())*(1+(TP_prozent/100),Digits);
               OrderAngepasst=OrderModify,(OrderTicket()),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange;
              }
           }
         //TP SHORT DEALS SETZEN
         IF(OrderSelect(ShortOrder,SELECT_BY_TICKET==true)
           {
            if(OrderCloseTime()==0 && OrderTakeProfit()==0)
              {
               TakeProfit=NormalizeDouble(OrderOpenPrice())/(1+(TP_prozent/100),Digits);
               OrderAngepasst=OrderModify,(OrderTicket()),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange;
              }
           }


         // Ticketnummen nach Closing auf 0 zurücksetzen.
         if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
           {
            if(OrderTicker()>0 && OrderCloseTime()>=) LongOrder=0;
           }
         if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
           {
            if(OrderTicker()>0 && OrderCloseTime()>=) ShortOrder=0;
           }
         //---
         return(0)}
 167       }

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



'}' - unexpected end of program    Gerd2 Moving.mq4    167    10
'{' - unbalanced parentheses    Gerd2 Moving.mq4    43    3




ich habe mal die zeilen davor geschrieben es ist zum verrückt werden, seit 4 Tagen versuche ich den fehler zu finden, wer kann mir helfen ?

der eine fehler tritt direkt auf nach der OnTick funktion


der andere ist programm ende

Entdecken Sie neue Möglichkeiten des MetaTrader 5 mit MQL5 Gemeinschaft und Services
Entdecken Sie neue Möglichkeiten des MetaTrader 5 mit MQL5 Gemeinschaft und Services
  • www.mql5.com
Stellen Sie Fragen zur technischen Analyse, diskutieren Sie über Handelssysteme und verbessern Sie Ihre Kenntnisse im Programmieren von Handelsstrategien in der MQL5 Programmiersprache. Tauschen Sie sich mit anderen Händlern aus der ganzen Welt aus und helfen Sie den Anfängern — unsere Community entwickelt sich mit Ihrer Hilfe. Expert Advisor...
 
GerdBirkenkamp:

...

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

'}' - unexpected end of program    Gerd2 Moving.mq4    167    10

'{' - unbalanced parentheses    Gerd2 Moving.mq4    43    3


ich habe mal die zeilen davor geschrieben es ist zum verrückt werden, seit 4 Tagen versuche ich den fehler zu finden, wer kann mir helfen ?

der eine fehler tritt direkt auf nach der OnTick funktion

der andere ist programm ende

  1. Herzlich willkommen hier :)
  2. Wenn Du Code postest, nimm bitte den Modus dafür: Alt+s oder das Icon </>
  3. Der Editor für MQ4/5 hat mit unpaarigen () und/oder {} so seine Probleme!
    Ich kopiere dann alles in Notepad++ und lass zählen die '(', die ')' und die '{' und '}'
    Notepad++ kann dann auch die funktionierenden {} einklappen (ausblenden) - kann auch helfen!
  4. Da stellte ich dann oft fest, dass der MQL-Editor für die {} einen Fehler ausgibt, tatsächlich fehlte aber irgendwo ein '(' oder ')'!
  5. Zum Schluss noch ein Tipp:
    Erst suchen! Es gibt fast nix, was nicht schon für Mt4/5 programmiert wurde!
    Warum das Rad neu erfinden, wenn es in der CodeBase liegt, bereit zum abkupfern?
    Such mal (oben rechts die Lupe) nach "MA cross" und dann konzentriere Dich auf Artikel und CodeBase
Viel Erfolg!
 

Leider sind da keine Zeilennummern dabei.

Der OnDeInit() fehlt eine schließende Klammer, so daß die OnTick() innerhalb dieser definiert ist.

Und vieles mehr........

Schmeiss die OnDeinit() raus. Die wird nur gebraucht wenn du die Comment() Funktion verwendest.

Und verwende den MT5 BITTE!!!

Die Handelsfunktionen sind alle in der

#include <Trade\Trade.mqh> 

definiert.