Hilfe bei der Codierung - Seite 337

 
alpha24:
Hallo Herr Mladen,

Nach langer Zeit bitte ich Sie, das Bollinger Band auf MA zu codieren. Gleich wie MA auf MA Indikator. in einem separaten Fenster. Gleitender Durchschnitt muss nicht im Indikatorfenster angezeigt werden. BB mit Dezimalabweichung (0.01), EMA oder SMA Form. Würden Sie das bitte wie gewohnt machen?

Vielen Dank im Voraus

alpha24

Sie brauchen dafür keinen neuen Indikator

Verwenden Sie einen beliebigen EMA, der sich bereits in einem separaten Fenster befindet, und ziehen Sie dann einfach die Bollinger-Bänder in dieses Unterfenster und wählen Sie die vorherigen Indikatordaten als Preisfeld aus.

 
mladen:
alpha24

Sie brauchen dafür keinen neuen Indikator.

Verwenden Sie eine beliebige Ma ...

Ja, Sir, aber das Problem ist, dass es keine Option für die Abweichung in Dezimalzahlen gibt, und ein weiteres ist, dass, wenn ich versuche, mehrere Indikatoren im gleichen Fenster zu verwenden, es zu einer Verwechslung der vorherigen Daten mit den ersten Daten kommt. Also bitte

 

Hallo,

Ich bin mir nicht sicher, ob die maillink.dll mit Build > 600 funktioniert.

Ich habe die maillink.dll mit gmx und googlemail ausprobiert und ich bekomme immer "-2"

von der MailInit(string,int,string,string); Funktion zurück :-(

Ich habe auch die xpMail.dll von codersguru ausprobiert, die stürzt meinen metatrader account ab, kennt jemand eine andere Möglichkeit, eine Mail von einem EA an zwei verschiedene Mailadressen zu senden?!?

 
sunshineh:
Hallo,

Ich bin mir nicht sicher, ob die maillink.dll mit Build > 600 funktioniert.

Ich habe die maillink.dll mit gmx und googlemail ausprobiert und ich bekomme immer "-2"

von der MailInit(string,int,string,string); Funktion zurück :-(

ich habe auch die xpMail.dll von codersguru ausprobiert, sie stürzt mein Metatrader-Konto ab, kennt jemand eine andere Möglichkeit, eine Mail von einem EA an zwei verschiedene Mail-Adressen zu senden?!?

Die String-Teile sind das Problem.

Der alte Metatrader 4 verwendete ANSI-Strings. Sie haben das auf Unicode-Strings geändert. Unicode-Strings verwenden 2 Bytes pro Zeichen, während ANSI-Strings nur 1 Byte pro Zeichen verwenden. Das ist der Grund für die Probleme - die DLLs erhalten Zeichenketten, die für sie nicht lesbar sind.

 

Bitte korrigieren Sie die Anzeige, indem Sie den Pfeil an die Stelle der Quadrate setzen.

Dateien:
.........png  141 kb
.......png  30 kb
tro_bias_ez.ex4  12 kb
 
DMNIK:
Bitte korrigieren Sie den Indikator, indem Sie den Pfeil an die Stelle der Quadrate setzen.

DMNIK

Die ex4-Datei kann nicht bearbeitet und verändert werden

 

Danke für die klare Erklärung!

Dann sollte es funktionieren, wenn ich jeden String in Unicode ändere, bevor ich die Funktionen der DLL aufrufe?

Gibt es bereits Funktionen zum Ändern von ANSI in Unicode und Unicode in ANSI?

 

Oder funktioniert es nicht, weil die Unicode-Zeichenfolge in einem Array ist?!?

Eine andere Frage:

Wie kann ich mehrere verschiedene

PlaySound-wav Dateien in einer Reihe abspielen?

Ich habe es mit Sleep() dazwischen versucht, aber es funktioniert nicht :-(

 
sunshineh:
Oder funktioniert es nicht, weil die Unicode-Zeichenfolge in einem Array ist?!?

Eine andere Frage:

Wie kann ich mehrere verschiedene

PlaySound-wav-Dateien in einer Reihe abspielen?

Ich habe es mit Sleep() dazwischen versucht, aber es funktioniert nicht :-(

sunshineh

Logisch gesehen sind sie dasselbe: Arrays von Zeichen. Nur dass ANSI-Zeichen 1 Byte benötigen, während Unicode-Zeichen 2 Byte benötigen. Das wurde so gemacht, um alle verschiedenen Weltsprachen zu berücksichtigen (als Unicode erfunden wurde - das hat nichts mit Metatrader zu tun). Wenn die DLL nun ANSI erwartet und einen Unicode-String erhält, wird sie diesen falsch interpretieren (und umgekehrt). Wenn Ihre dll dlls verwendet, müssen Sie die neuen Strings in ein explizites Array von Zeichen ohne Vorzeichen konvertieren (mit StringToShortArray(), um sie für die ANSI dll zugänglich zu machen) und die Rückgabe sollte mit CharArrayToString() in einen String konvertiert werden (um sie für metatrader zugänglich zu machen)

________________________

Was sleep betrifft: Die Funktion Sleep() ist in Indikatoren deaktiviert, sie funktioniert nur in EAs. Das war schon immer so (es ist keine Neuheit eines neuen Metatraders).

Außerdem führt Metatrader die Orders in einem Stück Code sequentiell aus. Das bedeutet, dass Sie nicht mit dem Abspielen einer Tondatei beginnen und dann, ohne beendet zu werden, eine andere abspielen können. Soweit ich weiß, wird auch die Dauer der Sounddatei begrenzt (um ein Einfrieren des Terminals zu verhindern - wie Sie wahrscheinlich bemerkt haben, sind Dinge wie Alarme und Sounds zentralisiert - siehe, wenn verschiedene Charts zur gleichen Zeit Alarme ausgeben - das ist ein einziges Fenster, das Sie sehen)

Ich könnte jetzt immer weiter machen, aber das ganze Problem von Metatrader ist, dass sie die asynchrone Ausführung von Routinen nicht richtig gelöst haben (er hat eigentlich keine Ahnung davon) und das bringt eine Menge Einschränkungen mit sich

 

Prüfen, ob die letzten geschlossenen Aufträge profitabel waren

Hallo,

Ich möchte überprüfen, ob meine letzten drei geschlossenen Verkaufs- oder Kaufaufträge profitabel waren, und einen String-Wert in Abhängigkeit davon ändern.

Ich habe diesen Code (MT4):

for(int i=(OrdersHistoryTotal()-1);i>=0;i--);

{

OrderSelect(i, SELECT_BY_POS,MODE_HISTORY);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==BUY)

{

//for buy order

if(OrderType()==OP_BUY && OrderProfit()>0) last=1;

if(OrderType()==OP_BUY && OrderProfit()<0) last=0;

}

}

for(int j=(OrdersHistoryTotal()-1);j>=0;j--);

{

OrderSelect(j, SELECT_BY_POS,MODE_HISTORY);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==SELL)

{

//for sell order

if(OrderType()==OP_SELL && OrderProfit()>0) last2=1;

if(OrderType()==OP_SELL && OrderProfit()<0) last2=0;

}

}

Aber er funktioniert bei mir nicht.

Wie sollte ich ihn ändern?

Vielen Dank für Ihre Hilfe.