![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich scheine niemanden zu finden, der mir helfen kann, bitte antworten Sie
Mit einer moderaten Menge an Vermutungen, würde ich vorschlagen, dass das Problem mit dem Indikator, oder Ihre Erweiterung zu ihm, und nicht Ihre Verwendung von iCustom ist. Vielleicht wäre es besser, Puffer 2 und 3 zusammen mit den Alerts zuzuordnen? (Obwohl ich nicht herausfinden konnte, wie/wann ihre Index-Null-Werte ([0]) überhaupt zugewiesen werden würden).
Preisdaten-Informationen
Meine Ein- und Ausstiege basieren auf Signalen, die eine Bedingung bei der Eröffnung des nächsten Balkens (Ein- und Ausstieg) erzeugen. Sollte ich die Eröffnungskurse für Indikatoren und gleitende Durchschnitte verwenden? Ich habe schon immer Tagesenddaten für den Aktienhandel verwendet, also habe ich mich natürlich darauf gestürzt. Was ist der Konsens da draußen?
Ich dachte nur
wie setzen Sie einen Trailing-Stop auf das minimale Stop-Level des Paares, so dass bei einem Stop-Level von 4 Pip oder 25 Pip der Sl je nach Paar zum Tragen kommt.
Ich sollte sagen, dass, wie Sie den Vertrag Spezifikation für jedes Paar zu verwenden.
Vielen Dank
Beno
Sidus_Bago-Anzeige
Hallo Erhöhung,
ich frage mich, ob Sie mir helfen können, Sidus_Bago als MTF-Indikator zu codieren. Ich finde diesen Indikator auch sehr gut.
Sidus_Bago ist hier:
Sidus System Bestätigung' Indikator?
Ich danke Ihnen vielmals.
Kann mir jemand bei diesem EA helfen?
Hallo zusammen,
Ich habe meinen ersten EA ausprobiert, aber er lässt sich nicht kompilieren; ich erhalte die Fehlermeldung "'Ende des Programms' - unausgewogene linke Klammer", und ich bin ihn ein paar Mal durchgegangen, kann aber das Problem nicht finden. Machen Sie sich keine Gedanken über die Logik der Handelsstrategie (es sei denn, Sie sind scharf darauf), ich werde daran arbeiten, sobald sie kompiliert und ausgeführt wird...
Anscheinend habe ich nicht die Erlaubnis, Dateien anzuhängen, daher entschuldige ich mich auch für das Ausschneiden und Einfügen.
Vielen Dank!
Rob,
Perth, Aus
//---------------
//+------------------------------------------------------------------+
//| Rob_Ea.mq4
// Rob Cousins |
//| |
//+------------------------------------------------------------------+
#property copyright "Rob Cousins"
#property link ""
#define MAGICMA 20090216
//---- Eingabeparameter
extern double Lots;
extern int Short_MA=5;
extern int Long_MA=15;
extern double Stoch_Upper=70.0;
extern double Stoch_Lower=30.0;
extern double RSI_Upper=80.0;
extern double RSI_Lower=20.0;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
string Aktuelle_Anzeige()
{
// Variablen des gleitenden Durchschnitts
double MA_Short;
double MA_Long;
string Aktueller_MA_Anzeiger;
string Vorheriger_MA_Anzeiger;
string MA_Anzeiger;
// Stochastik-Variablen
string Aktueller_Stoch_Anzeiger;
string Vorheriger_Stoch_Anzeiger;
string Stoch_Anzeiger;
// RSI-Variablen
string Aktueller_RSI_Anzeiger;
string Vorheriger_RSI_Anzeiger;
string RSI_Anzeiger;
// --------------------------------------
// zuerst MAs holen und auf ein MA Cross prüfen
// --------------------------------------
MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);
MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0);
if (MA_Short>MA_Long) Current_MA_Indicator="BUY";
if (MA_Short<MA_Long) Current_MA_Indicator="SELL";
// Setzen des vorherigen und des aktuellen Wertes unter Verwendung des verschobenen MA (die letzte '1' in den Optionen)
if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="BUY";
if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="SELL";
if ((Current_MA_Indicator=="BUY") && (Previous_MA_Indicator=="BUY")) MA_Indikator="KAUFEN";
if ((Current_MA_Indicator=="SELL") && (Previous_MA_Indicator=="SELL")) MA_Indikator="VERKAUFEN";
// ----------------------------
// Überprüfung des Stochastik-Indikators
// ----------------------------
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY";
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SELL";
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="BUY";
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator="SELL";
if ((Current_Stoch_Indicator=="BUY") && (Previous_Stoch_Indicator=="BUY")) Stoch_Indikator="KAUFEN";
if ((Aktueller_Stoch_Indikator=="VERKAUFEN") && (Vorheriger_Stoch_Indikator=="VERKAUFEN")) Stoch_Indikator="VERKAUFEN";
// ----------------------------
// RSI-Indikatorprüfung
// ----------------------------
if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";
if(iRSI(NULL,0,3,PREIS_SCHLIESSEN,0)<RSI_Unter) Current_RSI_Indicator="VERKAUFEN";
if(iRSI(NULL,0,3,PREIS_SCHLIESSEN,1)>RSI_Ober) Previous_RSI_Indicator="KAUFEN";
if(iRSI(NULL,0,3,PREIS_SCHLIESSEN,1)<RSI_Unter) Previous_RSI_Indicator="VERKAUFEN";
if ((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY")) RSI_Indikator="KAUFEN";
if ((Aktueller_RSI_Indikator=="VERKAUFEN") && (Vorheriger_RSI_Indikator=="VERKAUFEN")) RSI_Indikator="VERKAUFEN";
//----------------------------------------
// Herausfinden, ob man sich in einer Kauf- oder Verkaufssituation befindet
//----------------------------------------
if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("BUY");
if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL");
}
//+------------------------------------------------------------------+
//| Berechnung der offenen Positionen |
//+------------------------------------------------------------------+
string Current_Trade(string symbol)
{
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
{
return ("NONE");
break;
}
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) return("BUY");
if(OrderType()==OP_SELL) return("SELL");
}
}
}
//----------------------------------------------------------------------
// Wenn das Signal die Richtung geändert hat, muss zuerst der
// der aktuell geöffnete Handel geschlossen, bevor ein neuer eröffnet wird.
//-----------------------------------------------------------------------
void CloseTrade(string symbol)
{
// double ma;
//---- nur für die ersten Ticks des neuen Balkens in den Handel gehen
// if(Volumen[0]>1) return;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; // es gibt keine offenen Trades
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//---- Ordertyp prüfen
// beide Optionen vorerst belassen, falls ich es anders machen möchte
// z.B. eine andere Farbe haben will, oder was auch immer. Ansonsten sind die beiden Befehle identisch
// und man würde nur einen brauchen. Außer den unterschiedlichen Preisen, nehme ich an... Oje!
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}
//-----------------------------------------------------------
// Eröffnen Sie eine Position, wenn es das ist, was die Teeblätter sagen
//------------------------------------------------------------
void OpenTrade(string symbol,string Typ)
{
int res;
//---- Kaufbedingungen
if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "ROB EA TEST",MAGICMA,0,Blue);
//---- Verkaufsbedingungen
if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "ROB EA TEST",MAGICMA,0,Red);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start()
{
//----
//---- berechnet offene Aufträge nach aktuellem Symbol
//--- Wenn es keine offenen Trades gibt, dann einfach einen eröffnen...
if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication());
// Wenn jedoch bereits ein Handel offen ist, müssen wir diesen zuerst schließen, bevor wir einen neuen eröffnen.
if ((Current_Trade(Symbol())=="BUY") && (Current_Indication()=="SELL"));
{
CloseTrade(Symbol());
OpenTrade(Symbol(),Current_Indication());
}
if ((Current_Trade(Symbol())=="SELL") && (Current_Indication()=="BUY"));
{
CloseTrade(Symbol());
OpenTrade(Symbol(),Current_Indication());
}
zurück;
}
Hier ist es: .........................................
OK, das war schnell! Vielen Dank dafür. Was war das Problem?
Rob.
Problem mit der Schreibdatei
Ich programmiere einen EA, der Dateien verwendet, um die Ergebnisse des Handels (Verlust, Gewinn) mit den Werten der Indikatoren zu speichern. Wenn der EA also einen Handel eingeht, schreibe ich die Werte der Indikatoren und die Zeit, zu der der Handel gemacht wurde, in die Datei "sellOpenInd.tab":
Nach dieser Operation enthält die Datei:
CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00
CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00
CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00
etc...
In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:
Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome
-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win
-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win
-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win
etc..
Here is my code(i know is not looking nice
):
int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");
if(dates>0){
for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons
dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");
FileSeek(dates,filepos,SEEK_SET);
while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}
decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.
Comment(filterS7);
for (i =OrdersHistoryTotal()-1; i>=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Currencies) {
if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){
historyDateTime=TimeToStr(OrderOpenTime());
OrderP=OrderProfit();
if(OrderP>0)orderresult="win";if(OrderP<=0)orderresult="loss";
if(filterS7==historyDateTime) {
testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;
results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");
FileSeek(results,0,SEEK_END);
FileWrite(results,testFline);
testFline="";
filestr="";
}
}
}
}
if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;
}
}
}
Bei jedem Schritt in Ihrem Zyklus öffnen Sie die Datei "sellOpenInd.tab" wieder und wieder.
Versuchen Sie dies:
if(dates>0){
for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons
FileSeek(dates,filepos,SEEK_SET);
while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}
decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.
Comment(filterS7);
for (i =OrdersHistoryTotal()-1; i>=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Currencies) {
if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){
historyDateTime=TimeToStr(OrderOpenTime());
OrderP=OrderProfit();
if(OrderP>0)orderresult="win";if(OrderP<=0)orderresult="loss";
if(filterS7==historyDateTime) {
testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;
results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");
FileSeek(results,0,SEEK_END);
FileWrite(results,testFline);
testFline="";
filestr="";
}
}
}
}
if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;
}
}
}Hallo Roger09, ich habe das schon mal versucht und es hilft nicht. es sieht so aus, als ob der Zeiger nicht in die nächste Zeile geht, aber ich weiß nicht warum.
Auf jeden Fall danke für die Antwort.