|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
"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 |
|
|||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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. |
|
|||
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); } } 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. |
|
|||
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; } //+------------------------------------------------------------------+ |
|
|||
Code:
if (Signal == "LONG") {Kauf = Bid; Kursziel = Kauf+gewinn; Stopkurs = Kauf-risk1;} if (Signal == "Short") {Kauf = Ask; Kursziel = Kauf-gewinn; Stopkurs = Kauf+risk1;} 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;}
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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. |
Lesezeichen |
Stichworte |
code, ea, expert advisor, fehler code, mql4, nachprogrammieren, programmierung, programmierung metatrader, youtube, youtube video, youtube.com |
|
|