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: 43255
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: 789
Gesamt: 789
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 17.05.20
Neues Mitglied
 
Registriert seit: May 2020
Ort: Grassau
Beiträge: 6
VARO_TRADING befindet sich auf einem aufstrebenden Ast
Standard EA lässt nur einen offenen Trade im Metatrader 4 zu.

Hallo an diese geniale Trader Gemeinde.

Ich bin einer der neuen aus der letzten Woche.
Zuerst mal an alle Profis hier ein großes Lob für die ganzen super Tipps hier im Forum. Da ist ein Anfänger so wie ich es bin sehr froh drüber.

Ich trade seit ca. einem Jahr so wie es die Freizeit zulässt mit dem typischen Anfänger Erfolg. Ich habe seit diesem Jahr einige EAs ausprobiert welche mal besser mal überhaupt nicht funktionieren wollten. Ich habe mich versucht mit den ganzen Fachbegriffen und Programmierungen zu beschäftigen und habe letztlich mit etwas Unterstützung den hier aufgeführten EA programmiert.

Er funktioniert so gesehen auch schon recht gut und ich bin damit zufrieden. Jedoch lässt er nur 1 offenen Trade im Metatrader 4 zu. Andere Qährungspaare können bei einem offen Teade und verfügbaren Signal nicht öffnen.

Ich habe schon einige Beiträge hier im Forum ausprobiert. Aber das will immer noch nicht funktionieren.

Ich hoffe es kann mir hier jemand helfen.

Grüße an alle hier.

QUELLTEXT:


void OnTick()
{

// Erstelle ein Signal
string signal="";

// Definition des EA
double K0=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_MAIN,0);
double D0=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_SIGNAL,0);
double K1=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_MAIN,1);
double D1=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_SIGNAL,1);

//Verkaufssignal
if ((K0>56)&&(D0>56))
if ((D1>K0)&&(D1<K1))
{
signal="Verkaufen";
}

//Kaufssignal
if ((K0<44)&&(D0<44))
if ((D1<K0)&&(D1>K1))
{
signal="Kaufen";
}*

// Kaufe 2 Microlot
if(signal=="Kaufen" && OrderIsOpen==true)
OrderSend(_Symbol,OP_BUY,0.02,Ask,3,Ask-120*_Point,Ask+54*_Point,NULL,0,0,Green);

// Verkaufe 2 Mikrolot
if(signal=="Verkaufen" && OrderIsOpen==true)
OrderSend(_Symbol,OP_SELL,0.02,Bid,3,Bid+120*_Poin t,Bid-54*_Point,NULL,0,0,Red);

// Chart Ausgabe fuer das Signal
Comment("Das aktuelle Signal ist: ",signal);

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

Es ist eben immer besser, wenn der gesamte Code geschrieben wird, weil
ein wichtiges Detail vorenthalten wurde:

Wo wird das Flag

OrderIsOpen==true

gesetzt?

Wenn das auf false steht, dann kann auch nur eine Order geöffnet werden.

Mal nebenbei: Von der Wortwahl her ist das natürlich nicht logisch zu schreiben,
OrderIsOpen==true und dann soll eine Order geöffnet werden, weil OrderIsOpen ja bedeutet, es ist bereits eine Order offen.

Besser wäre die Formulierung gewesen:

OrderIsOpen==false

Das hätte jetzt allerdings nicht das Problem der einmaligen Orderöffnung gelöst.
D.h. sollen mehrere Orders geöffnet werden können, dann sollte OrderIsOpen ganz wegfallen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 18.05.20
Neues Mitglied
 
Registriert seit: May 2020
Ort: Grassau
Beiträge: 6
VARO_TRADING befindet sich auf einem aufstrebenden Ast
Standard

Hi.

Das mit OrderIsOpen=truhe war einer der Versuche in der Hoffnung es würde funktionieren. So wie er jetzt unten steht habe ich Ihn aktuell im Einsatz. Statt OrdersIsOpen steht da OrdersTotal()=0

Aber da lässt er eben nur einen offenen Trade zu. Erst wenn dieser durch TP oder SL geschlossen wurde und ein anderes Paar erhält ein Signal, dann öffnet das andere Paar ein Signal. Lasse ich aber OrdersTotal weg, dann öffnet er immer so lange Trdes bis kein Signal mehr gegeben wird. Das geht im schlimmsten Fall bis ins unendliche.

Ich weiß nicht wie ich es eingrenzen kann.

Da gibt es doch sicher einen Weg. Bitte.

Gruß Peter

void OnTick()
{

// Erstelle ein Signal
string signal="";

// Definition des EA
double K0=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_MAIN,0);
double D0=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_SIGNAL,0);
double K1=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_MAIN,1);
double D1=iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MO DE_SIGNAL,1);

//Verkaufssignal
if ((K0>56)&&(D0>56))
if ((D1>K0)&&(D1<K1))
{
signal="Verkaufen";
}

//Kaufssignal
if ((K0<44)&&(D0<44))
if ((D1<K0)&&(D1>K1))
{
signal="Kaufen";
}*

// Kaufe 2 Microlot
if(signal=="Kaufen" && OrdersTotal()==0)
OrderSend(_Symbol,OP_BUY,0.02,Ask,3,Ask-120*_Point,Ask+54*_Point,NULL,0,0,Green);

// Verkaufe 2 Mikrolot
if(signal=="Verkaufen" && OrdersTotal()=0)
OrderSend(_Symbol,OP_SELL,0.02,Bid,3,Bid+120*_Poin t,Bid-54*_Point,NULL,0,0,Red);

// Chart Ausgabe fuer das Signal
Comment("Das aktuelle Signal ist: ",signal);

}
  #4 (permalink)  
Alt 18.05.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Ich kann mir nicht vorstellen dass dein Code fehlerfrei kompilieren kann. Nach der geschweiften Klammer des Kaufsignals steht ein * Zeichen, was da mal absolut nichts zu suchen hat
  #5 (permalink)  
Alt 18.05.20
Neues Mitglied
 
Registriert seit: May 2020
Ort: Grassau
Beiträge: 6
VARO_TRADING befindet sich auf einem aufstrebenden Ast
Standard

Hi.

Stimmt. Das gehört da nicht hin. Das muss beim kopieren des Quellcodes passiert sein.

Hast Du eine Lösung für mein Problem?

Gruß Peter
  #6 (permalink)  
Alt 18.05.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Ja, einfache Lösung:
Du lässt es nicht zu, dass mehr als ein Trade offen ist.

Nimm "OrdersTotal()==0" aus deinen if-Abfragen, und dann sollte das funktionieren. OrdersTotal() gibt dir alles an was du offen hast, also auch Trades und PendingOrders welche in anderen Symbolen aktiv sind.
  #7 (permalink)  
Alt 18.05.20
Neues Mitglied
 
Registriert seit: Apr 2020
Beiträge: 14
TraumExperte befindet sich auf einem aufstrebenden Ast
Standard

Hallo Peter,

Du kannst das schon mit dem bool Flag machen. Nur den musste halt auch irgendwo definierne und ändern. am besten in Kombination mit dem

Returnwert der Ordersend().

Also

if(signal=="Kaufen" && OrderIsOpen==false){
ticket = OrderSend(...);

if (ticket >0 ) OrderIsOpen= true;
}

Mit dieser Triviallösung würde der EA nur einmal aus diesem Chart handeln. Insoweit wäre das Problem mit verschieden Charts gelöst. Solange das System sauber läuft.

Gruß

Traumexperte
  #8 (permalink)  
Alt 18.05.20
Neues Mitglied
 
Registriert seit: May 2020
Ort: Grassau
Beiträge: 6
VARO_TRADING befindet sich auf einem aufstrebenden Ast
Standard

Hi.

Danke für die schnelle Antwort.

Also benötige ich genau Deinen Vorschlag?
Oder muss ich da im Detail noch mehr definieren?

Muss ich das an einer bestimmten Stelle setzen?
Sorry. Bin da noch nicht so fit.

Gruß Peter
  #9 (permalink)  
Alt 18.05.20
Neues Mitglied
 
Registriert seit: Apr 2020
Beiträge: 14
TraumExperte befindet sich auf einem aufstrebenden Ast
Standard

Hallo Peter,

ob das nun 100% für Dich passt weiss ich nicht. Hängt davon ab was Du vorhast. Und ich übernehme auch keine Gewähr dafür was Du mit dem Codeschnipsel anfängst. Er soll Dir einfach nur helfen zu lernen. Also der Code dient nur zu Ausbildungszwecken.

Du musst auf jedenfall noch int ticket und auch Dein bool Flag deklarieren. GGf die Sell Variante anpassen. Du findest schon heraus an welchen Stelle dies zu tun ist. Kleine Hausaufgabe ;-)




Gruß TraumExperte

Geändert von TraumExperte (18.05.20 um 09:58 Uhr)
  #10 (permalink)  
Alt 18.05.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Code:
   for(int k = OrdersTotal() - 1; k >= 0; k--)
      if(OrderSelect(k, SELECT_BY_POS,MODE_TRADES))   
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           return; // Eine Order ist für dieses Symbol bereits offen!
Erklärung:
Du durchsuchst alle Orders (auch PendingOrders) und selektierst sie. Ist das Symbol identisch mit dem aus deinem Chart und die MagicNumber ebenfalls gleich, dann wird keine neue Order in dem Symbol geöffnet, andere Orders können aber durchaus in anderen Symbolen erfolgen.
Wichtig: Gib am besten für jeden EA in jedem Symbol eine neue MagicNumber mit. Wenn du z.B. irgendwann einmal 2 Systeme auf dem DAX laufen lässt (eins in M5 und eins in M15 z.B.), dann dient die MagicNumber zum Unterscheiden dieser Orders
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 20: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.
-----------------------------------------------------------------------------------------------------------------------------