Hallo Grundi!
Mag das Signal auch simpel sein, so muß Du dennoch gleich tief in die Programmierstruktur von EL einsteigen, wenn Du eigene/neue Indikatoren allgemein verwenden willst.
Prinzipiell ist es zum Verständnis wichtig, zu erkenne, daß es Indikatoren (Indicator, ShowMe, Paint-Bars) gibt, deren Darstellung im Chart über die plot-Anweisung sichtbar werden, Signale, die in Systemen zusammen gebunden werden und deren Auswirkungen als Handelsaktionen umgesetzt werden und Functionen, bei denen nur intern ein Wert bestimmt wird, der bei den hier vorher beschriebenen Tpen von Element und auch wieder bei anderen Function verwendet werden kann.
Wenn Du Dich also auf "Entdeckungsreisen" begibst, wirst Du u.a. Programmteile finden, die unter der Rubrik Functionen abgelegte sind. Dort wirst Du dann auch viele bekannte Namen finden, wie z.B. Average, Xaverage und viele mehr.
Wenn Du Funktionsprogrammteil öffnest, wirst Du weiter entdecken, daß die üblichen plot-Anweisungen und auch Handelsanweisungen (buy/sell/EXIT...) nicht auftauchen. Sie haben dort nichts zu suchen.
Aber auch die INPUT-Zeile weist eine Eigenart auf, die nur für Function-Programme zutreffen: Vorgabewerte für Inputvariablen gibt es nicht, sondern es sind, soweit Input-Variablen vorgesehen sind, Vorgabedatentypen anzugeben.
Ferner ist in der Regel im Programmteil eine Anweisungszeile vorhanden, in der der Function-Name eine Zuweisung erhält, also z.B.
FUNC_TEST = AUSGABE;
Diese Zeile bewirkt in der "Function" mit dem Namen FUNC_TEST, der hier beispielhaft gewählt wurde, das der Rückgabewert den ermittelten Wert, der in AUSGABE gespeichert ist, erhält. Dieser Rückgabewert steht dem die Funkition FUNC_TEST aufrufenden Programm damit zur Verfügung.
Beispiel:
{Indikator/Signal-Programm INPUT: Len(5), ....; VARS: Testwert(0), .....; .... Testwert = 5 + FUNC_TEST(Len); ..... { aber auch die direkte Nutzung ist möglich: IF FUNC_TEST(Len) then.... oder Plot1(FUNC_TEST(Len),-...); } ..... IF Testwert > 5 then buy ELSE if Testwert < 5 then sell.... ...... {***ENDE des Indikator-/Signal-Programmes****}
Der nachfolgende Programmteil ist als Function zu schreiben!!!
{Function FUNC_TEST} INPUT: FuncLen(Numeric), ....; VARS: Temp(0), counter(0), .....; .... Temp = average(close, FuncLen)/close-1; ..... FUNC_TEST = temp; ...... {***ENDE des Function-Programms****}
Nun könnte vielleicht alles zum eigenen Versuch klar sein, den Du ja auf der Grundlage eines mit einem EL-Code bekannten Indikators durchführen möchtest.
Deine Funktion erhält den z.B. den Namen funcVIDYA Die Zahlenangaben in einer Inputanweisungen werden durch Datentypen ersetzt plot-/Trade-Anweisungen werden eliminiert es ist die "Rückgabezeile" funcVIDYA = .... einzubauen
In Deinem Signalprogramm verwendest Du dann erstmals die neue Funktion funcVIDYA wie folgt:
INPUT: ...Len1(13), Smooth(13),..., refBar(3); VARS: VIDYA(0); VIDYA = funcVIDYA(len1, Smooth);
If VIDYA crossed over Close then buy; If VIDYA < VIDYA[refBar] and marketposition >0 then EXITLONG;
Alle Angaben ungeprüft und ohne Gewähr auf Richtigkeit
Viel Erfolg Uwe
|