Fragen Sie! - Seite 157

 

Versuchen Sie etwas wie dies:

string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

return(tname+"_"+Symbol()+Period()+".csv");

}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this "20090924_102541_EURUSD15.csv"). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :

[php]string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

int thand;

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

//

//

//

//

//

tname = tname+"_"+Symbol()+Period()+".csv";

thand = FileOpen(tname,FILE_BIN|FILE_READ);

if (thand==-1)

return(tname);

else

{

FileClose(thand);

return("failed to make unique name");

}

}

Es wird die Zeichenkette"failed to make unique name" zurückgeben, wenn es fehlschlägt. In diesem Fall müssen Sie entscheiden, wie oft Sie es erneut versuchen wollen

PS: Die Verwendung wäre someFileName=uniqueFileName();

Mit freundlichen Grüßen

mladen

tedalagi:
Hallo zusammen,

Ich bin ein Händler, aber ich weiß nicht, über mq4 Sprache und habe versucht, dies zu tun seit Dienstag ...

Ich muss meinen Chart mit einem Skript im csv-Format speichern. Ich habe ein nettes Skript, das ich einfach auf ein beliebiges Diagramm und einen beliebigen Zeitrahmen ziehen kann, und es tut einfach gut, außer dem Dateinamen.

Ich wünschte, es könnte jedes Mal, wenn ich den Chart speichere, automatisch einen eindeutigen Dateinamen generieren, damit ich ihn nicht jedes Mal umbenennen muss, wenn ich eine andere Datei im selben Ordner speichere.

string fname = [Datum im Format JJJJMMTT] + "_"+[Datum - nur Stunde]+"_" + Symbol() + Zeitraum() + ".csv";

Der betreffende Code ist fett gedruckt.

Wenn ich den Code richtig verstanden habe, wird der Ausgabedateiname wie folgt aussehen

20090924_10_GBPJPY15.csv

Tut mir leid, dass ich nicht viel Zeit aufbringen kann, um 157 Seiten dieses riesigen Threads zu lesen (ich hatte es versucht und mir wurde schwindlig)

Ich danke Ihnen im Voraus.
 
 
 
mladen:
Verwenden Sie es so (mql erlaubt keine verschachtelten Funktionen oder Prozeduren, also muss die Funktion oder Prozedur eine separate sein)

Es funktioniert perfekt, vielen Dank.

mladen:

Das Speichern von Dateien an beliebiger Stelle: Ja, das kann mit der Windows-API erfolgen. Hier ist ein Link mit einem guten Beispiel und einer guten Erklärung, wie man das macht: Dateioperationen über WinAPI - MQL4 Artikel

Ich werde mich damit befassen und danach sicher auf diesen Thread zurückkommen.

Möge Gott Sie segnen.

 

"Doppelter Eintrag": Warum funktioniert mein Programm nicht?

Entschuldigung: Ich habe dies schon früher gepostet, aber ich kann den Beitrag im Forum nicht verschieben.

(Es erlaubt auch keine "Lesezeichen" aus meinem Computerverlauf...)

Wie auch immer: Ich habe ein einfaches Programm geschrieben, das testet, ob zwei aufeinanderfolgende Balken "oben" oder "unten" sind.

D.h.: bei "up" ist der Höchststand von bar1 höher als der von bar2, und der Tiefststand von bar1

ist ebenfalls höher als bei Takt2. (Abwärts ist symetrisch.)

Das Programm arbeitet mit Ausbrüchen, d.h. bei "Aufwärts" sollte das Hoch von Bar1 minus das Tief von Bar2

von Bar2 über einem bestimmten Schwellenwert liegen. ("Down" ist symetrisch.)

Jetzt arbeite ich mit M30 GBPUSD. Ich habe diese "Ausbruchsschwelle" nach Augenmaß gewählt,

wie auch für den TakeProfit. StopLoss ist wie im Prog angegeben.

Also: Ich versuche, Erfahrungen mit MetaTrader & mql4 zu sammeln.

Dann kann ich andere Progs ausprobieren, Dinge optimieren, etc.

Also: Ich bin so weit gekommen, dass das Programm kompiliert wurde und auf dem Strategy Tester läuft.

Aber es kommt nie bis zur zweiten Hälfte des Programms, oder druckt, dass es

einen Auftrag eingegeben hat.

Für jemanden mit Erfahrung ist der Fehler, den ich habe, wahrscheinlich offensichtlich.

Für mich ist er nicht offensichtlich.

Also: Könnten Sie mir helfen?

Danke!

Prog folgt.

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

bool TrendUp1; double TakeProfitUp; double EE = .00500;

bool OrdTot_OK;double lot;double slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;

bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;

bool High2down; bool Low2down;

int ABC = OrdersTotal();

double Size1 = .00630;bool BigUp; double A = High[1];double B= Low[2];

double C= Hoch[2]; double D= Tief[1];bool BigDown;

//------------------------------------Auftragsstart abwärts

if (ABC == 0)// keine Aufträge aus ist wahr

OrdTot_OK = true;

if (ABC == 0)// keine Orders vorhanden ist true

Print ("on down order sequence, no orders were out");

if ((C-D) > Size1)//high von 2 minus low von 1 > .0063

BigDown = wahr;

if ((C-D) > Size1)//Hoch von 2 minus Tief von 1 > .0063

Print ("on down order sequence, found a big breakout down");

wenn (Hoch[1]< Hoch[2])

High2down=true;

wenn (Hoch[1]< Hoch[2])

Print ("on down order sequence, the consecutive bars have decreasing highs");

if(Tief[1]< Tief[2])

Low2down=true;

if(Tief[1]< Tief[2])

Print ("bei absteigender Reihenfolge haben die aufeinanderfolgenden Balken abnehmende Tiefststände");

if (High2down && Low2down)

TrendDown=true;

if (Hoch2abwärts && Tief2abwärts)

Print ("bei abwärts gerichteter Ordersequenz ist das TrendDown-Flag gesetzt");

wenn (TrendDown)

SL_Trailing_Down = Hoch[1];

if (TrendAbwärts)

Print ("bei abwärts gerichteter Ordersequenz wurde der Stop_Loss gesetzt");

wenn (TrendAbwärts)

TakeProfitDown = Bid - (.005);

wenn (TrendAbwärts)

Print ("on down order sequence, got a takeprofit", TakeProfitDown);

wenn (TrendDown && BigDown)

DownAndBig = wahr;

if (DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);

if (DownAndBig && OrdTot_OK)

Print ("on down order sequence, tried to enter a ticket", ticketdown);

if (ticketdown < 0)

Print("OrderSend_Down fehlgeschlagen mit Fehler #",GetLastError());

return(0);

//----------------------------------------------down order done

//---------------------------------------------------up order start

wenn (ABC == 0)

OrdTot_OK = true;

wenn (ABC == 0)

Print ("bei der Aufwärtssequenz wurden keine Aufträge erteilt");

wenn ((A - B) > Größe1)

BigUp = true;

wenn ((A - B) > Größe1)

Print ("in der Aufwärtssequenz war der Größentest für die beiden Bars in Ordnung");

wenn (Hoch[1] > Hoch[2])

High2Up = true;//44

wenn (Hoch[1] > Hoch[2])

Print ("bei der Aufwärtssequenz war der Test auf steigende Hochs in Ordnung");

if(Tief[1] > Tief[2])

Low2Up=true;

if(Tief[1] > Tief[2])

Print ("bei der Aufwärtssequenz war der Test auf steigende Tiefststände in Ordnung");

if (High2Up && Low2Up)

TrendUp1=true;

if (High2Up && Low2Up)

Print ("bei der Aufwärtssequenz wurde das Flag für Aufwärtsbewegungen gesetzt");

if (TrendUp1)

SL_Trailing_Up = Low[1] ;

if (TrendUp1)

Print ("in der Aufwärtssequenz wurde der Stoploss gesetzt");

if (TrendUp1)

TakeProfitUp = Ask + (.005);

wenn (TrendUp1)

Print ("in der Aufwärtssequenz wurde der TakeProfit festgelegt", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = wahr;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Print ("in der Aufwärtssequenz, versuchte eine Order zu senden", ticketup);

if (ticketup < 0)

Print("OrderSend_Up fehlgeschlagen mit Fehler #",GetLastError());

return(0);

//-------------------------------------------------up order done

//----

return(0);// diese Zeile könnte überflüssig sein

//+------------------------------------------------------------------+

//----

return(0);

}

//+------------------------------------------------------------------+

 

Mehrere CharToStr???? verwenden

Ich würde gerne zwei Wingding-Zeichen platzieren. Eines über dem anderen. Dies ist der Code, mit dem ich das erste Zeichen setze-----ObjectSetText("signal "+x+"0",CharToStr(104),symbolSize, "Wingdings",Yellow);.

Ich würde gerne (236) hinzufügen und dafür eine andere Farbe verwenden.

Ist das möglich? Wenn ja, bitte helfen Sie mir.

Vielen Dank für Ihr Interesse,

gever17

 

Sleep | IsTradeContextBusy

Gruß an CodeMasters und alle anderen!

Ich habe einen EA, der auf Fractals basiert, er wird auf einer MT4-Plattform und für mehrere Währungspaare auf dem Zeitrahmen D1 verwendet.

Da mehr als eine Kopie des EA im gleichen Moment handelt, erhalte ich die Meldung "Trade Context Is Busy" in meinem Journal.

Ich würde gerne die Funktion Sleep oder IsTradeContextBusy in meinen EA einfügen, weiß aber nicht, wo ich sie unterbringen soll:

- nach der Funktion Order senden, getrennt für die Funktionen Verkaufen und Kaufen?

- nach der Send-Order-Funktion für Verkauf und Kauf?

- Wie kann ich dieses Problem lösen - mit

if (IsTradeContextBusy() == true) Sleep (5000); return;

???

Bitte beraten Sie mich oder weisen Sie mich auf die Lösung hin.

Herzlichen Dank für Ihre Hilfe,

Viel Spaß!

Simon

EA angehängt.

 

Ratschlag benötigt!

Hallo,

Ich wäre wirklich dankbar für die Hilfe eines Programmierers bei einem Problem, bei dem ich Geld verliere. Es ist nur so, dass ich einen EA habe, der Positionen auf einem bestimmten Preisniveau öffnen sollte, aber manchmal whipsaw verursacht es zu viele Positionen zu öffnen. Ich möchte, dass er nur eine eröffnet. Kann mir jemand sagen, ob dies mit einer Zeile Code behoben werden kann oder ob ich einen Programmierer einstellen muss?

Ich danke Ihnen.

 

Pls adv

Hallo Leute, ich bin wirklich dont unstd wie MagicNumber funktioniert, bcos es scheint wie DOESNT WORK???? Ich hav gemacht 2 einfache EA beigefügt, ich m noch lernen.

1. Kaufen, wenn der Preis über 100SMA

2. Verkaufen, wenn der Preis auch über 100SMA

es bedeuten, wenn u befestigen Sie sie auf 2 verschiedene Eurusd Chart, es sollte ein Kauf und ein Verkauf zur gleichen Zeit. Als Theorie, jeder EA arbeitet unabhängig.

Aber es doesnt... Es scheint, wie wenn Sell ausgeführt 1st, die Buy EA wird nicht funktionieren, und vise-versa.

Kann jemand meinen EA neu codieren, die steuernde MagicNumber? Irgendein Fehler?

Danke vielmals

Dateien:
buy100ma.mq4  9 kb
sell100ma.mq4  9 kb
 
Ghosthand:
Hallo Jungs, ich m wirklich dont unstd wie MagicNumber funktioniert, bcos es scheint wie DOESNT WORK???? Ich hav gemacht 2 einfache EA beigefügt, ich m noch lernen.

1. Kaufen, wenn der Kurs über dem 100SMA liegt

2. Verkaufen, wenn der Preis auch über 100SMA

es bedeuten, wenn u befestigen Sie sie auf 2 verschiedene Eurusd Chart, es sollte ein Kauf und ein Verkauf gleichzeitig. Als Theorie, jeder EA arbeitet unabhängig.

Aber es doesnt... Es scheint, wie wenn Sell ausgeführt 1st, die Buy EA wird nicht funktionieren, und vise-versa.

Kann jemand meinen EA, die steuernde MagicNumber umcodieren? Jeder falsch?

Vielen Dank

Sieht so aus, als hätten Sie die MagicNumber korrekt eingegeben. Das einzige Problem ist, dass Sie nicht prüfen, ob der Auftrag mit der gleichen MagicNumber im aktuellen Handelspool existiert. Sie sollten alle offenen Aufträge durchgehen und prüfen, ob OrderMagicNumber() == Ihre magische Zahl ist, bevor Sie einen neuen Handel eingeben.

Grund der Beschwerde: