Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.224
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Tagen
- Sundaytrad...
vor 5 Tagen
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

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

Empfehlungen

Like Tree1Likes
  • 1 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Ort: Berlin
Beiträge: 4
Marlak befindet sich auf einem aufstrebenden Ast
Standard "Fehler im Code"

Hallo..
.. ich bin ganz frisch hier und habe seid über 10 Jahren nix mehr programmiert. Nun habe ich ein Video in Youtube gefunden und ich wollte das Teil nachprogrammieren einige Fehler konnte ich selbstständig korrigieren jedoch bei einem abschnitt weiss ich nicht weiter. Die Fehlermeldung lautet:

return value of 'OrderSelect' should be checked

hier mein code:

offeneOrders = 0;
anzahlOrders = OrdersTotal();
for(zaehler=0; zaehler<anzahlOrders;zaehler++)
{OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{if(OrderMagicNumber()==Magicnummer){offeneOrders+ +;}}
}

kann mir jemand bitte sagen was ich da vergeigt habe, wäre ganz net
  #2 (permalink)  
Alt 06.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

offeneOrders = 0;
anzahlOrders = OrdersTotal();
for(zaehler=0; zaehler<anzahlOrders;zaehler++)
{if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) )
{if(OrderSymbol()==Symbol())
{if(OrderMagicNumber()==Magicnummer) offeneOrders++;
}
}
}


traderdoc
Marlak likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 07.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Ort: Berlin
Beiträge: 4
Marlak befindet sich auf einem aufstrebenden Ast
Standard Ich bin's wieder...

... jetzt habe ich ein neues Problem.
hier erstmal mein Code:

//Order aufgeben
if (ACCOUNT_PROFIT < -100){Lots=1;}
if (ACCOUNT_PROFIT > 100){Lots=4;}
if (Kauf>0 && offeneOrders == 0)
{if (Signal == "LONG")
{ticket=OrderSend(Symbol(),OP_BUY,Lots,Kauf,30,Sto pkurs,Kursziel,"MA Cross",Magicnummer,Green);
if (ticket>0)
{if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
return;
{if (Signal == "SHORT")
{ticket=OrderSend(Symbol(),OP_SELL,Lots,Kauf,30,St opkurs,Kursziel,"MA Cross",Magicnummer,Red);
if (ticket<0)
{if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
return;

return;

--------------
Problem Nummer 1: obwohl dieser EA im Backtest ein Positives Ergebniss generiert geht er nur Longs ein. Wo liegt mein Fehler?
Problem Nummer 2: ich möchte gern das wenn der Verlust oder Gewinn eine bestimmte Menge erreicht hat soll die Positionsgröße geändert werden. Wie kann ich das am besten anstellen?

Wäre toll wenn sich jemand meinen kleinen Problemchen annehmen könnte.
  #4 (permalink)  
Alt 07.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
ACCOUNT_PROFIT = 0;
for(int i = 0; i < OrdersTotal(); i++) {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == Symbol()) {   //falls der Profit für den gesamten Account berechent werden soll, muß diese Zeile entfernt werden
         ACCOUNT_PROFIT += OrderProfit() + OrderSwap() + OrderCommission();
      }
   }
}
Lots = Irgendetwas;        //für die Fälle, dass ACCOUNT_PROFIT >= -100 und <= 100 ist
if (ACCOUNT_PROFIT < -100) Lots=1;
if (ACCOUNT_PROFIT > 100) Lots=4;
if (Kauf>0 && offeneOrders == 0) {   //Kauf > 0???
   if (Signal == "LONG") {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,Green);
   }
   if (Signal == "SHORT") {     
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,Red);
   }
}
Die Variable Kauf mit dessen Wert, der dem aktuellen Kaufpreis entspricht, ist immer > 0!, weil es keinen Preis gibt, der <= 0 ist.

An Deinem hier vorliegenden Codesschipsel kann es nicht liegen, dass er nur Buy-Orders öffnet. Entweder daran: if (Signal == "SHORT"), oder an ungültigen Übergaben von Lots, StopKurs bzw. Kursziel.

Und in Zukunft den Code immer über die oben stehende Auswahl: # eingeben.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 07.09.14
Neues Mitglied
 
Registriert seit: Sep 2014
Ort: Berlin
Beiträge: 4
Marlak befindet sich auf einem aufstrebenden Ast
Standard

Ich kann den Fehler einfach nicht finden, warum der EA keine Short's eingeht,
vielleicht kann mal ein anderer rüber schauen wo der Fehler ist.

Code:
//+------------------------------------------------------------------+
//|                                                     MA Cross.mq4 |
//|                                                           Marlak |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Marlak"
#property link      ""
#property version   "1.00"
#property strict

extern int ATR=14, Gleitener_Durchschnitt=50;
extern double Standardhandelsgroesse=10, Multiplikator=2.618, CRV=3;
string Signal;
double risk1, Kursziel, gewinn, Lots, Stopkurs, Kauf, OrderProfit;
int offeneOrders, anzahlOrders, zaehler, ticket;
int Magicnummer= 001;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
     
//Variablen
   double ma = iMA(NULL,5,Gleitener_Durchschnitt,0,MODE_SMA,PRICE_CLOSE,0);
   double malang = iMA(NULL,240,Gleitener_Durchschnitt,0,MODE_SMA,PRICE_CLOSE,0);
      if (Close[1] > ma && ma > malang){Signal="LONG";}
      if (Close[1] < ma && ma < malang){Signal="Short";}
   Comment ("Signal: "+Signal);
//Einstieg;Ziel;Stop
      risk1 = iATR(NULL,5,ATR,0)*Multiplikator;
      gewinn = risk1* CRV;
      //Risikobewertung
      if (risk1 >50) {Lots=0;}
      if (risk1 <=50) {Lots=Standardhandelsgroesse*0.1;}
         if (risk1 <=40) {Lots=Standardhandelsgroesse*0.3;}
            if (risk1 <=30) {Lots=Standardhandelsgroesse*0.5;}
               if (risk1 <=20) {Lots=Standardhandelsgroesse*0.7;}
                  if (risk1 <=10) {Lots=Standardhandelsgroesse*0.9;}
      if (Signal == "LONG")
         {Kauf = Bid;
          Kursziel = Kauf+gewinn;
          Stopkurs = Kauf-risk1;}
      if (Signal == "Short")
         {Kauf = Ask;
          Kursziel = Kauf-gewinn;
          Stopkurs = Kauf+risk1;}
//Prüfen ob Orders oder Positionen im Markt liegen
offeneOrders = 0;
anzahlOrders = OrdersTotal();
      for(zaehler=0; zaehler<anzahlOrders;zaehler++)
         {if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) )
            {if(OrderSymbol()==Symbol())
               {if(OrderMagicNumber()==Magicnummer) offeneOrders++;}}}
//Order aufgeben
      if (Kauf>0 && offeneOrders == 0)
         {if (Signal == "LONG")
             {ticket=OrderSend(Symbol(),OP_BUY,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,clrBlueViolet);
               if (ticket>0)
                  {if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
                   else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
          return;
         {if (Signal == "Short")
             {ticket=OrderSend(Symbol(),OP_SELL,Lots,Kauf,30,Stopkurs,Kursziel,"MA Cross",Magicnummer,clrBlueViolet);
               if (ticket>0)
                  {if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Profit: ",OrderProfit);}
                   else Print("fehlerhaft Entry: ", GetLastError(), Kauf);}}
          return;
return;
  }
//+------------------------------------------------------------------+
  #6 (permalink)  
Alt 07.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
if (Signal == "LONG")
         {Kauf = Bid;
          Kursziel = Kauf+gewinn;
          Stopkurs = Kauf-risk1;}
      if (Signal == "Short")
         {Kauf = Ask;
          Kursziel = Kauf-gewinn;
          Stopkurs = Kauf+risk1;}
Ein Fehler liegt auf jeden Fall in der falschen Zuweisung der Kaufkurse.
Richtig wäre:
Code:
if (Signal == "LONG")
         {Kauf = Ask;
          Kursziel = Kauf+gewinn;
          Stopkurs = Kauf-risk1;}
      if (Signal == "Short")
         {Kauf = Bid;
          Kursziel = Kauf-gewinn;
          Stopkurs = Kauf+risk1;}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 07.09.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Desweiteren sollten double-Ergebnisse v.a. nach Multiplikation bzw. Division mit NormalizeDouble(Wert, Digits) auf die Digits-Kommastelle normiert werden. Das ist v.a. für die OrderSend()-Funktion wichtig.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
code, ea, expert advisor, fehler code, mql4, nachprogrammieren, programmierung, programmierung metatrader, youtube, youtube video, youtube.com


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 16:42 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.
-----------------------------------------------------------------------------------------------------------------------------