Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43253
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 678
Gesamt: 678
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 28.04.23
Neues Mitglied
 
Registriert seit: Apr 2023
Beiträge: 5
Lennox befindet sich auf einem aufstrebenden Ast
Standard 2 Fehlermeldungen bitte um Hilfe

Liebe Community,

ich bin neu hier und buchstäblich den ganzen Tag erfolglos damit verbracht, einen Code in MetaEditor zu hinterlegen. 2 Fehlermeldungen wollen einfach nicht weggehen und ich bin inzwischen echt mit meinem Latein am Ende.

Die Fehlermeldungen lauten wie folgt: '{' - unexpected end of program (Zeile 106 Spalte 48) '{' - unbalanced parentheses (Zeile 79 Spalte1).

Ich habe alles versucht, um diese Fehlermeldungen zu eliminieren, aber ich habe es einfach nicht geschafft.

Vielleicht hat hier der ein oder andere eine Idee, woran es liegen könnte.
Es handelt sich wirklich nur um 2 kleine Fehler. Ich bin mir sicher, dass jemand von Ihnen da draußen das Problem bereits gelöst hat und ich würde mich sehr freuen, wenn Sie Ihr Wissen mit mir teilen könnten.

Vielen Dank im Voraus für Ihre Hilfe!

//+------------------------------------------------------------------+
//| Indicators.mq4 |
//| Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window

//--- input parameters
input color Color=clrYellow;
input bool Input1=false;
input short Input2=800;
input ushort Input3=800;
input string Input4="(1/0)";

// Declare input parameters
extern double LotSize = 1.0;
extern int MovingAveragePeriod = 20;
extern double StopLossPips = 20.0;
extern double TakeProfitPips = 40.0;

// Declare global variables
double MovingAverageBuffer[];
double LastTradePrice;
int LastTradeDirection;
int LastTradeBar;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping

// Resize the moving average buffer
ArrayResize(MovingAverageBuffer, Bars - MovingAveragePeriod + 1);

// Calculate the moving average
for (int i = 0; i < Bars - MovingAveragePeriod + 1; i++)
{
double sum = 0.0;
for (int j = i; j < i + MovingAveragePeriod; j++)
{
sum += Close[j];
}
MovingAverageBuffer[i] = sum / MovingAveragePeriod;
}

return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---

//--- return value of prev_calculated for next call
return(rates_total);
}

//+------------------------------------------------------------------+
//| Handle the tick event |
//+------------------------------------------------------------------+
void OnTick()
{
// Get the current price
double currentPrice = Bid;

// Check if the last trade was a buy
if (LastTradeDirection == 1)
{
// Check if the price has crossed below the moving average
if (currentPrice < MovingAverageBuffer[LastTradeBar])
{
// Place a sell order at the current price
double stopLoss = currentPrice + StopLossPips * Point;
double takeProfit = currentPrice - TakeProfitPips * Point;
OrderSend(Symbol(), OP_SELL, LotSize, currentPrice, 0, stopLoss, takeProfit, "Sell order", 0, 0, Red);
LastTradeDirection = -1;
LastTradePrice = currentPrice;
LastTradeBar = Bars - 1;
}
}
// Check if the last trade was a sell
else if (LastTradeDirection == -1)
{
// Check if the price has crossed above the moving average
if (currentPrice > MovingAverageBuffer[LastTradeBar])
{
// Place a buy order at the current price
double stopLoss = currentPrice - StopLossPips * Point;
double takeProfit = currentPrice + Take
  #2 (permalink)  
Alt 28.04.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Soweit man den Code hier einsehen kann existieren in der Funktion void OnTick() 5 { und 3 } Klammern.
Die Anzahl beider Klammern muss!!! immer identisch sein.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 29.04.23
Neues Mitglied
 
Registriert seit: Apr 2023
Beiträge: 5
Lennox befindet sich auf einem aufstrebenden Ast
Standard Antwort

Hey Traderdoc,

erstmal vielen Dank für dein Feedback. Auf Basis deines Hinweises habe ich den Code angepasst. Nichtsdestotrotz erscheinen die selben Fehlermeldungen.

Ich hoffe es wäre nicht zu viel verlangt wenn du den entsprechenden Fehler kurz hier im Chat richtig angeben könntest. Bei mir will es einfach nicht klappen und ich wäre sehr gespannt ob es mit deiner Variante funktioniert oder hab es an einem Bug liegt.

Liebe Grüße

Lennox
  #4 (permalink)  
Alt 29.04.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Wenn ich nicht den gesamte Code sehe, kann ich Dir wieder nur insofern weiterhelfen (sollte diesselbe Fehlermeldung gekommen sein), dass innerhalb einer Funktion die beiden Klammern { } immer zahlenmäßig identisch sein müssen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 30.04.23
Neues Mitglied
 
Registriert seit: Apr 2023
Beiträge: 5
Lennox befindet sich auf einem aufstrebenden Ast
Standard Antwort

Hey hier ist nochmal der angepasste vollständige Code könntest du evtl die Klammern korrekt setzen das wäre klasse vielen Dank im Voraus

//+------------------------------------------------------------------+
//| MyStrategy.mq4|
//| Copyright 2023, MetaQuotes Ltd.|
//| https://www.mql5.com|
//+------------------------------------------------------------------+

#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window

//--- input parameters
input color Color=clrYellow;
input bool Input1=false;
input short Input2=800;
input ushort Input3=800;
input string Input4="(1/0)";

// Declare input parameters
extern double LotSize = 1.0;
extern int MovingAveragePeriod = 20;
extern double StopLossPips = 20.0;
extern double TakeProfitPips = 40.0;

// Declare global variables
double MovingAverageBuffer[];
double LastTradePrice;
int LastTradeDirection;
int LastTradeBar;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping

// Resize the moving average buffer
ArrayResize(MovingAverageBuffer, Bars - MovingAveragePeriod + 1);

// Calculate the moving average
for (int i = 0; i < Bars - MovingAveragePeriod + 1; i++)
{
double sum = 0.0;
for (int j = i; j < i + MovingAveragePeriod; j++)
{
sum += Close[j];
}
MovingAverageBuffer[i] = sum / MovingAveragePeriod;
}

return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---

//--- return value of prev_calculated for next call
return(rates_total);
}

//+------------------------------------------------------------------+
//| Handle the tick event |
//+------------------------------------------------------------------+
void OnTick()
{ // Get the current price
double currentPrice = Bid;

// Check if the last trade was a buy
if (LastTradeDirection == 1)
{
// Check if the price has crossed below the moving average
if (currentPrice < MovingAverageBuffer[LastTradeBar])
{
// Place a sell order at the current price
double stopLoss = currentPrice + StopLossPips * Point;
double takeProfit = currentPrice - TakeProfitPips * Point;
OrderSend(Symbol(), OP_SELL, LotSize, currentPrice, 0, stopLoss,
takeProfit, "Sell order", 0, 0, Red);
LastTradeDirection = -1;
LastTradePrice = currentPrice;
LastTradeBar = Bars - 1;
}
}
// Check if the last trade was a sell
else if (LastTradeDirection == -1)
{
// Check if the price has crossed above the moving average
if (currentPrice > MovingAverageBuffer[LastTradeBar])
{
// Place a buy order at the current price
double stopLoss = currentPrice - StopLossPips * Point;
double
  #6 (permalink)  
Alt 01.05.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Aus reinen Lernzwecken wirst du die Klammern alleine setzen.

Nochmal jede Funktion, if-Abfrage und for-Schleife ect. benötigt eine
{ und eine } Klammer.

So und nun schaust du dir deinen Code an, was alles innerhalb der Klammer geschrieben werden soll und wenn die Anzahl beider Klammern identisch ist, sollte das ok sein.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 04.05.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Und, @Lennox, kommst du voran, läuft das Programm nun?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 04.05.23
Neues Mitglied
 
Registriert seit: Apr 2023
Beiträge: 5
Lennox befindet sich auf einem aufstrebenden Ast
Standard Antwort

Hey vielen Dank für dein Engagement, muss man an der Stelle einfach mal sagen. Ich glaube mittlerweile dass es an einem Bug liegt denn ich habe immer noch die selbe Fehlermeldung.
  #9 (permalink)  
Alt 04.05.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Dann poste doch mal den gesamten Code. Wenn nicht öffentlich, dann über meine Mail-Adresse.
Ich kann wetten, dass es kein Bug ist.

Und nun zum letzten Mal, zähle die { Klammern aus, und wenn die Anzahl nicht exakt mit der Summe der } Klammern übereinstimmt, dann liegt es eindeutig an dir.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 04.05.23
Neues Mitglied
 
Registriert seit: Apr 2023
Beiträge: 5
Lennox befindet sich auf einem aufstrebenden Ast
Standard Antwort

Es gibt nun insgesamt 37 geöffnete und 37 geschlossene Klammern jetzt müsste es doch passen richtig?

//+------------------------------------------------------------------+
//| MyStrategy.mq4 |
//| Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window

//--- input parameters
input color Color=clrYellow;
input bool Input1=false;
input short Input2=800;
input ushort Input3=800;
input string Input4="(1/0)";

// Declare input parameters
extern double LotSize = 1.0;
extern int MovingAveragePeriod = 20;
extern double StopLossPips = 20.0;
extern double TakeProfitPips = 40.0;

// Declare global variables
double MovingAverageBuffer[];
double LastTradePrice;
int LastTradeDirection;
int LastTradeBar;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping

// Resize the moving average buffer
ArrayResize(MovingAverageBuffer, Bars - MovingAveragePeriod + 1);

// Calculate the moving average
for (int i = 0; i < Bars - MovingAveragePeriod + 1; i++)
{
double sum = 0.0;
for (int j = i; j < i + MovingAveragePeriod; j++)
{
sum += Close[j];
}
MovingAverageBuffer[i] = sum / MovingAveragePeriod;
}

return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---

//--- return value of prev_calculated for next call
return(rates_total);
}

//+------------------------------------------------------------------+
//| Handle the tick event |
//+------------------------------------------------------------------+
void OnTick()
{
// Get the current price
double currentPrice = Bid;

// Check if the last trade was a buy
if (LastTradeDirection == 1)
{
// Check if the price has crossed below the moving average
if (currentPrice < MovingAverageBuffer[LastTradeBar])
{
// Place a sell order at the current price
double stopLoss = currentPrice + StopLossPips * Point;
double takeProfit = currentPrice - TakeProfitPips * Point;
OrderSend(Symbol(), OP_SELL, LotSize, currentPrice, 0, stopLoss,
takeProfit, "Sell order", 0, 0, Red);
LastTradeDirection = -1;
LastTradePrice = currentPrice;
LastTradeBar = Bars - 1;
}
}
// Check if the last trade was a sell
else if (LastTradeDirection == -1)
{
// Check if the price has crossed above the moving average
if (currentPrice > MovingAverageBuffer[LastTradeBar])
{
// Place a buy order at the current price
double stopLoss = currentPrice
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------