|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Problem gelöst
Es lag schlussendlich an den Digits, d.h. der DAX wird mit einer Nachkommastelle angegeben und DOW nicht.
Somit hab ich mit 10 Pips SL den Mindestabstand des Brokers im DAX unterschritten und die Order konnte ich entgegengenommen werden. Ergibt SL in Pips mit Nachkommastelle: 100 und dann läuft's auch. Jetzt hab ich also zwei EA's für zwei Indizes mit ihren jeweiligen Settings. Meinen allerherzlichsten Dank nochmal an alle Unterstützer. Grüße und ein schönes Wochenende. Dan |
|
|||
neue Herausforderung
Eine Bitte hätte ich noch:
Im Forum hab ich dieses Script gefunden: Zitat:
Für den DAX dann z.Bsp. 9-12 und 14-17:30 Uhr. Wie und an welcher Stelle muss ich diese Abfrage einfädeln? Besten Dank vorab, Dan |
|
|||
Hallo,
das kannst du so gar nicht verwenden ! Die Alert Funktion muss raus. Verwendbar wäre das ganze so: Code:
int startzeit=14*60+40; int endzeit=21*60+55; void Start() { int h=TimeHour(TimeCurrent()); int m=TimeMinute(TimeCurrent()); int aktuellezeit=h*60+m; if(aktuellezeit<startzeit || aktuellezeit>endzeit) return(0); //EA Code //... } Eine Tradingzeit über 0:00 Uhr ist damit nicht möglich. Außerdem kannst du Zeit nicht extern eingeben (warum eigentlich 14*60+40)??? Besser wäre das hier: Code:
extern string Start = "09:00"; extern string End = "13:00"; datetime StartTime, EndTime, CurrentTime; void init() { StartTime = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+Start); EndTime = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+End); } bool TradingTime() { CurrentTime = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES)); if (StartTime < EndTime) { if ((CurrentTime < StartTime) || (CurrentTime >= EndTime)) return(false); } if (StartTime > EndTime) { if ((CurrentTime < StartTime) && (CurrentTime >= EndTime)) return(false); } return(true); } int start() { if (TradingTime() == false) return(0); //EA Code... //... } naranjoe |
|
|||
Unglaublich...
Vielen herzlichen Dank. Ich werd's gleich morgen früh testen. :-))) Grüße, Dan |
|
|||
Ähm,
da ist mir ein kleiner Fehler unterlaufen. so ists richtig: Code:
extern string Start = "09:00"; extern string End = "13:00"; datetime StartTime, EndTime, CurrentTime; bool TradingTime() { StartTime = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+Start); EndTime = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+End); CurrentTime = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES)); if (StartTime < EndTime) { if ((CurrentTime < StartTime) || (CurrentTime >= EndTime)) return(false); } if (StartTime > EndTime) { if ((CurrentTime < StartTime) && (CurrentTime >= EndTime)) return(false); } return(true); } int start() { if (TradingTime() == false) return(0); //EA Code... //... } naranjoe |
|
|||
perfekt
Es funktioniert wunderbar und damit sehen die Backtestergebnisse auch gleich sehr viel besser aus.
Ist CurrentTime eigentlich = BrokerTime oder lokale Systemzeit? Jetzt hab ich noch eine letzte Herausforderung zu meistern und ich hoffe das du vielleicht eine Idee hast wie ich . Anbei ein ADX Indikator, den ich gerne verwende weil er die Signallinie einfärbt wenn ein Trend beginnt (grün) und wenn er endet (rot). Soweit ich sehen konnte schreibt er die Rechenergebnisse in verschiedene Buffer und diesen Buffern ist wiederum der Farbcode zugeteilt. Die Buffer selbst kann ich mit iCustom einfach nicht auslesen und in den Comments steht immer eine 0. Ziel ist folgendes: Buy wenn Signallinie grün und > 35 und < 65. CloseBuy wenn Signallinie rot. Hast du eine Idee wie ich das umsetzen kann? Grüße, Dan |
|
|||
Hallo,
Zitat:
Zitat:
Den liest du einmal auf Shift0 und einmal auf Shift1. Ist der Wert von Shift1 < Shift0 steigt der Kurs (Grün) Ist der Wert von Shift1 > Shift0 fällt der Kurs (Rot) Gruß naranjoe |
|
|||
Klingt irgendwie logisch.
Ich war mir nicht sicher weil die fallenden Werte zuerst gelb eingefärbt werden. Es scheint als müsse ein gewisser Neigungswinkel, bzw. eine entsprechend große Differenz zwischen Shift0 und Shift1 auftreten um die Linie rot zu färben. Ich hab's jetzt mal eingebaut und werd mir morgen die Ergebnisse im Backtest anschauen. Grüße Dan |
|
|||
Lotsize kalkulieren
Guten Morgen liebe EA Profis,
an dieser Stelle mal ein herzliches Dankeschön für eure Unterstützung mit der ich meinen EA schneller weiterentwickeln konnte als ich selbst erwartet hätte. Die ersten Testergebnisse sehen wirklich traumhaft aus und nun steht noch Feinabstimmung und ein Langzeittest an. In Punkto Feinabstimmung würde ich gern meine Lotsize variabel kalkulieren lassen. Da ich den StopLoss fest eintrage sollte das ja möglich sein. Also z.B. 10 Pips. SL, SL=max 2% der Equity. Bei 10.000 € Equity ist der SL gleich 200 € und diesen geteilt durch 10 Pips ergibt 20 Lots. Habt ihr vielleicht eine passende Formel hierfür? Bei den Backtests stehen mir momentan nur 6 Wochen an Daten zur Verfügung und da mein EA auf Indizes basiert hilft mir Dukascopy leider auch nicht weiter. Hat jemand MT4 verwertbare Tickdaten für den DAX oder weiß wo ich diese beziehen kann? LG, Dan |
|
|||
Zitat:
Die dafür passende Formel lautet: Lots = MathFloor(Equity * MaximumRisk) / (StopLoss / 10); Allerdings kommen natürlich auch Rechenergebnisse mit Nachkommastellen bei dieser Kalkulation raus und die wiederum nimmt mein Broker nicht entgegen. Wie kann ich hier auf- bzw. abrunden? z.B. Lots=19,8 aufrunden auf 20 z.B. Lots=17,3 abrunden auf 17 Grüße, Dan |
Lesezeichen |
Stichworte |
ea, expert-advisor, programmierung, programmierung metatrader |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|