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: 4443
Beiträge: 40621
Benutzer: 6.832
Aktive Benutzer: 266
Links: 80
Wir begrüßen unseren neuesten Benutzer: burkijan
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- burkijan
vor 2 Tagen
- Chidiroglo...
vor 3 Tagen
- JapanTrade...
vor 5 Tagen
- chroma
vor 6 Tagen
- statisticm...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 119
Gesamt: 120
Team: 0
Team:  
Benutzer:  dax09
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
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);

}
Mit Zitat antworten
  #2 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.336
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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor einer Woche
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);

}
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 20
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
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
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
Mit Zitat antworten
  #6 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 20
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.
Mit Zitat antworten
  #7 (permalink)  
Alt vor einer Woche
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
Mit Zitat antworten
  #8 (permalink)  
Alt vor einer Woche
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
Mit Zitat antworten
  #9 (permalink)  
Alt vor einer Woche
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 (vor einer Woche um 09:58 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 20
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
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 12:02 Uhr.





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