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: 4037
Beiträge: 38381
Benutzer: 6.346
Aktive Benutzer: 279
Links: 80
Wir begrüßen unseren neuesten Benutzer: sanjay_floyd
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einer Stunde
- sanjay_flo...
vor 2 Tagen
- ekman
vor 2 Tagen
- SaxTrade
vor 3 Tagen
- Matthias...
vor 3 Tagen
- wren

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 70
Gesamt: 71
Team: 0
Team:  
Benutzer:  ehonk
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2018
Beiträge: 12
Blancomi befindet sich auf einem aufstrebenden Ast
Standard automatische Anpassung der Positionsgröße

Hallo Zusammen,

Ich bräuchte mal wieder Hilfe von einem Profi bitte.

Gerne will ich die Positionsgröße, abhängig vom Kontostand anpassen lassen.

Leider bekomme ich folgende Fehlermeldung:

'LotsOptimized' - function call missing, open parenthesis expected

Anbei der Code
Code:
#property strict


input int SLPoints = 500;
input int TPPoints = 500;
input int TSLPoints = 500;
input double Lots = 0.1;
input double MaximumRisk =0.02;



input ENUM_TIMEFRAMES Timeframe = PERIOD_H1;
input int PeriodsMAFast = 50;
input int PeriodsMASlow = 200;
input ENUM_MA_METHOD MethodMAFast = MODE_SMA;
input ENUM_MA_METHOD MethodMASlow = MODE_SMA;
input ENUM_TIMEFRAMES TimeframeCCI = PERIOD_H1;

input string Commentary = "Dies ist ein Kommentar";
input int Magic = 111;

//globale Variable
datetime timestamp;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   
  }

void OnTick()
  
 
  {
 
  
  trailingStop();
  
  if(timestamp == iTime(Symbol(),Timeframe,0)) return;
  timestamp = iTime(Symbol(),Timeframe,0);
 
  
  double maFast = iMA(Symbol(),Timeframe,PeriodsMAFast,0,MethodMAFast,PRICE_CLOSE,0);
  double maSlow = iMA(Symbol(),Timeframe,PeriodsMASlow,0,MethodMASlow,PRICE_CLOSE,0);
  double maFastLast = iMA(Symbol(),Timeframe,PeriodsMAFast,0,MethodMAFast,PRICE_CLOSE,1);
  double maSlowLast = iMA(Symbol(),Timeframe,PeriodsMASlow,0,MethodMASlow,PRICE_CLOSE,1);
  
 
  
  double CCI  = iCCI(NULL,TimeframeCCI,14,PRICE_CLOSE,1);
  
 
  
  int total = OrdersTotal();
  if (total <50)
  
   if(maFast > maSlow && maFastLast < maSlowLast &&CCI >=100){
     Print("Long");
     int ticket = executeLong();
     Print(IntegerToString(ticket));
   }else if(maFast < maSlow && maFastLast > maSlowLast && CCI <=-100){
     Print("Short");
     int ticket = executeShort();
     Print(IntegerToString(ticket));
     }
  }
  
double LotsOptimized()
  {
   double lot=Lots;
       
   
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);

   if(lot<0.1) lot=0.1;
   return(lot);
  }

 

   

int executeLong (){
   double entry = Ask;
   entry = NormalizeDouble(entry,Digits);
   
   double sl = entry - SLPoints * Point; 
   sl = NormalizeDouble(sl,Digits);
   
   double tp = entry + TPPoints * Point;
   tp = NormalizeDouble(tp,Digits);
   
   int ticket = OrderSend(Symbol(),OP_BUY,LotsOptimized,entry,1000,sl,tp,Commentary,Magic);{
 } 
   return ticket;
}

int executeShort (){
   double entry = Bid;
   entry = NormalizeDouble(entry,Digits);
   
   double sl = entry + SLPoints * Point; 
   sl = NormalizeDouble(sl,Digits);
   
   double tp = entry - TPPoints * Point;
   tp = NormalizeDouble(tp,Digits);
   
   int ticket = OrderSend(Symbol(),OP_SELL,LotsOptimized,entry,1000,sl,tp,Commentary,Magic);
   
   return ticket;
}


  
  
  
void trailingStop(){
for(int i = 0; i < OrdersTotal(); i++){
   if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){
      if(OrderType() == OP_BUY){
         double sl = Bid - TSLPoints * Point;
         sl = NormalizeDouble(sl,Digits);
         if(sl > OrderStopLoss()){
            bool res = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration());
         
}

}

if(OrderType() == OP_SELL){
         double sl = Ask + TSLPoints * Point;
         sl = NormalizeDouble(sl,Digits);
         if(sl < OrderStopLoss() || OrderStopLoss() == 0){
            bool res = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration());
         
}

}

}

}

}

Vielen Dank
Mit Zitat antworten
  #2 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.086
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ok, aber dann solltest Du erst einmal einen Code schreiben mit klaren Strukturen. Bei den {} Setzungen sieht doch keiner durch!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Apr 2018
Beiträge: 23
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Fehlt in der Zeile mit

if (total <50)

eine geöffnete geschweifte Klammer?
Mit Zitat antworten
  #4 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2018
Beiträge: 12
Blancomi befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Ok, aber dann solltest Du erst einmal einen Code schreiben mit klaren Strukturen. Bei den {} Setzungen sieht doch keiner durch!

traderdoc

Sorry.. hier nochmal der gleiche Code, mit einer Klammersetzung die übersichtlicher ist.


Code:
#property strict


input int SLPoints = 500;
input int TPPoints = 500;
input int TSLPoints = 500;
input double Lots = 0.1;
input double MaximumRisk =0.02;



input ENUM_TIMEFRAMES Timeframe = PERIOD_H1;
input int PeriodsMAFast = 50;
input int PeriodsMASlow = 200;
input ENUM_MA_METHOD MethodMAFast = MODE_SMA;
input ENUM_MA_METHOD MethodMASlow = MODE_SMA;
input ENUM_TIMEFRAMES TimeframeCCI = PERIOD_H1;

input string Commentary = "jhjgh";
input int Magic = 111;

//globale Variable
datetime timestamp;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   
  }

void OnTick()
  
 
  {
 
  
  trailingStop();
  
  if(timestamp == iTime(Symbol(),Timeframe,0)) return;
  timestamp = iTime(Symbol(),Timeframe,0);
 
  
  double maFast = iMA(Symbol(),Timeframe,PeriodsMAFast,0,MethodMAFast,PRICE_CLOSE,0);
  double maSlow = iMA(Symbol(),Timeframe,PeriodsMASlow,0,MethodMASlow,PRICE_CLOSE,0);
  double maFastLast = iMA(Symbol(),Timeframe,PeriodsMAFast,0,MethodMAFast,PRICE_CLOSE,1);
  double maSlowLast = iMA(Symbol(),Timeframe,PeriodsMASlow,0,MethodMASlow,PRICE_CLOSE,1);
  
 
  
  double CCI  = iCCI(NULL,TimeframeCCI,14,PRICE_CLOSE,1);
  
 
  
  int total = OrdersTotal();
  if (total <50)
  
   if(maFast > maSlow && maFastLast < maSlowLast &&CCI >=100)
    {
     Print("Long");
     int ticket = executeLong();
     Print(IntegerToString(ticket));
    }
   else if(maFast < maSlow && maFastLast > maSlowLast && CCI <=-100)
    {
     Print("Short");
     int ticket = executeShort();
     Print(IntegerToString(ticket));
    }
    }
    
 
   double LotsOptimized()
  {
   double lot=Lots;
       
   
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);

   if(lot<0.1) lot=0.1;
   return(lot);
  } 


   

int executeLong ()
{
   double entry = Ask;
   entry = NormalizeDouble(entry,Digits);
   
   double sl = entry - SLPoints * Point; 
   sl = NormalizeDouble(sl,Digits);
   
   double tp = entry + TPPoints * Point;
   tp = NormalizeDouble(tp,Digits);
   
   int ticket = OrderSend(Symbol(),OP_BUY,LotsOptimized,entry,1000,sl,tp,Commentary,Magic);
 
   return ticket;
}

int executeShort ()
{
   double entry = Bid;
   entry = NormalizeDouble(entry,Digits);
   
   double sl = entry + SLPoints * Point; 
   sl = NormalizeDouble(sl,Digits);
   
   double tp = entry - TPPoints * Point;
   tp = NormalizeDouble(tp,Digits);
   
   int ticket = OrderSend(Symbol(),OP_SELL,LotsOptimized,entry,1000,sl,tp,Commentary,Magic);
   
   return ticket;
}


  
  
  
void trailingStop()
{
for(int i = 0; i < OrdersTotal(); i++)
{
   if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
      if(OrderType() == OP_BUY){
         double sl = Bid - TSLPoints * Point;
         sl = NormalizeDouble(sl,Digits);
         if(sl > OrderStopLoss()){
            bool res = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration());
         
}

}

if(OrderType() == OP_SELL){
         double sl = Ask + TSLPoints * Point;
         sl = NormalizeDouble(sl,Digits);
         if(sl < OrderStopLoss() || OrderStopLoss() == 0){
            bool res = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration());
         
}

}

}

}

}
Mit Zitat antworten
  #5 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2018
Beiträge: 12
Blancomi befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von daybyter Beitrag anzeigen
Fehlt in der Zeile mit

if (total <50)

eine geöffnete geschweifte Klammer?
Nein das ist vermutlich nicht das Problem. Trotzdem Danke
Mit Zitat antworten
  #6 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.086
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Sorry, aber da hat sich aus meiner Sicht an der Klammersetzung nicht viel geändert oder sehe nur ich das auf dem Schirm so. Z.B. die letzten 5 } stehen allen direkt untereinander. Das sollte überhaupt nicht so sein. Die {}-Pärchen müssen eindeutig ersichtlich zuordnungsfähig sein. Wenn man sich erst überlegen muss, welche { zu welcher} gehört, verliert man doch die Lust nach einem Fehler zu suchen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2018
Beiträge: 12
Blancomi befindet sich auf einem aufstrebenden Ast
Standard

Okay ich setz mich morgen nochmal hin und versuche das richtig zu stellen
Mit Zitat antworten
  #8 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Apr 2018
Beiträge: 23
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Ruf doch einfach den Styler des Metaeditor mal auf. Einfach Strg + <Komma> drücken.
Mit Zitat antworten
  #9 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2018
Beiträge: 12
Blancomi befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von daybyter Beitrag anzeigen
Ruf doch einfach den Styler des Metaeditor mal auf. Einfach Strg + <Komma> drücken.
Habe ich bisher nicht gekannt, Danke!
Leider hilft mir das aber nicht weiter.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2018
Beiträge: 12
Blancomi befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Sorry, aber da hat sich aus meiner Sicht an der Klammersetzung nicht viel geändert oder sehe nur ich das auf dem Schirm so. Z.B. die letzten 5 } stehen allen direkt untereinander. Das sollte überhaupt nicht so sein. Die {}-Pärchen müssen eindeutig ersichtlich zuordnungsfähig sein. Wenn man sich erst überlegen muss, welche { zu welcher} gehört, verliert man doch die Lust nach einem Fehler zu suchen.

traderdoc
Nächster Versuch

Code:
#property strict

input double Lots = 0.01;
input int SLPoints = 500;
input int TPPoints = 500;
input int TSLPoints = 500;
input double MaximalesRisiko = 0.01;

input ENUM_TIMEFRAMES Timeframe = PERIOD_H1;
input int PeriodsMAFast = 50;
input int PeriodsMASlow = 200;

input ENUM_MA_METHOD MethodMAFast = MODE_SMA;
input ENUM_MA_METHOD MethodMASlow = MODE_SMA;




input string Commentary = "Long/Short";
input int Magic = 111;

//globale Variable
datetime timestamp;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   
  }

void OnTick()
  
 
{//Beginn Aktion
 
  
  trailingStop();
  
  if(timestamp == iTime(Symbol(),Timeframe,0)) return;
  timestamp = iTime(Symbol(),Timeframe,0);
  //Berechnung Moving Averages 
  
  double maFast = iMA(Symbol(),Timeframe,PeriodsMAFast,0,MethodMAFast,PRICE_CLOSE,1);
  double maSlow = iMA(Symbol(),Timeframe,PeriodsMASlow,0,MethodMASlow,PRICE_CLOSE,1);
  
  double maFastLast = iMA(Symbol(),Timeframe,PeriodsMAFast,0,MethodMAFast,PRICE_CLOSE,2);
  double maSlowLast = iMA(Symbol(),Timeframe,PeriodsMASlow,0,MethodMASlow,PRICE_CLOSE,2);
  //-----------------------------------------------------------------------------------------// 
  
 
  
  //Bedingungen Long  
  
  int total = OrdersTotal();
  if (total <20)
  
   if(maFast > maSlow && maFastLast < maSlowLast)
    
     {Print("Long");
     int ticket = executeLong();
     Print(IntegerToString(ticket));}
  //------------------------------------------------------------------------------------------//     

  //Bedingungen Short
   else if(maFast < maSlow && maFastLast > maSlowLast)
     
     {Print("Short");
     int ticket = executeShort();
     Print(IntegerToString(ticket));}
  //------------------------------------------------------------------------------------------//     
}//Ende Aktion


  //Ticket auf Long
   int executeLong ()
  
   {double entry = Ask;
   entry = NormalizeDouble(entry,Digits);
   
   double sl = entry - SLPoints * Point; 
   sl = NormalizeDouble(sl,Digits);
   
   double tp = entry + TPPoints * Point;
   tp = NormalizeDouble(tp,Digits);
   
   int ticket = OrderSend(Symbol(),OP_BUY,LotsOptimized,entry,1000,sl,tp,Commentary,Magic);
   
   return ticket;}
  //------------------------------------------------------------------------------------------//
   
  //Ticket auf Short
  int executeShort ()

   
   {double entry = Bid;
   entry = NormalizeDouble(entry,Digits);
   
   double sl = entry + SLPoints * Point; 
   sl = NormalizeDouble(sl,Digits);
   
   double tp = entry - TPPoints * Point;
   tp = NormalizeDouble(tp,Digits);
   
   int ticket = OrderSend(Symbol(),OP_SELL,LotsOptimized,entry,1000,sl,tp,Commentary,Magic);
   
   return ticket;}
   //-------------------------------------------------------------------------------------------//
   
   //Berechnung der Handelsgröße
   double LotsOptimized()
   
   {double lot=Lots;
    lot=NormalizeDouble(AccountFreeMargin()*MaximalesRisiko/1000.0,1);
    if(lot<0.1) lot=0.1;
    return(lot);}
//------------------------------------------------------------------------------------------//



  //TrailingsStop
  void trailingStop()
{//Beginn Aktion

  for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
   
      if(OrderType() == OP_BUY)
      {
         double sl = Bid - TSLPoints * Point;
         sl = NormalizeDouble(sl,Digits);
         if(sl > OrderStopLoss())
         {bool res = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration());}
            
      }

     if(OrderType() == OP_SELL)
     {
         double sl = Ask + TSLPoints * Point;
         sl = NormalizeDouble(sl,Digits);
         if(sl < OrderStopLoss() || OrderStopLoss() == 0)
         
         {bool res = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration());}
     }

}//Ende Aktion
//---------------------------------------------------------------------------------------------//

Geändert von Blancomi (vor 3 Wochen um 21:37 Uhr)
Mit Zitat antworten
Antwort

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 +2. Es ist jetzt 14:33 Uhr.



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