Metastock 8.0 Pro: Eigenen Index erstellen
Tag zusammen,
wie erstelle ich eigentlich in MetaStock einen eigenen INDEX (bspw. AUTO Index) ?
Ich hab` in meinem Ordner ("C:/Program Files/MetaStock/EUR/Germany") bspw. BMW, PORSCHE, DAIMLER & VOLKSWAGEN drin. Wie erstelle ich daraus einen Index ? Vielleicht mit einem Indikator ?
Natürlich könnte ich das auch per Composite manuell machen - also bspw. BMW & VW bzw. PORSCHE & DAIMLER zusammenführen um dann nochmals BMW/VW & PROSCHE/DAIMLER zusammenzuführen ! Aber das ist doch viel zu mühselig !
Gibt es eine andere Möglichkeit ? Und kann man im Composite tatsächlich nur 2 Symbols zusammenführen ? (Nutze MetaStock 8.0 Pro)
Am liebsten hätte ich gerne sowohl einen Kursindex (also einfach Close alle zusammenaddiert) als auch einen Performance Idnex (also alle ROC einfach zusammenaddiert) !
Wer kann mir helfen ?
Dank Dir/Ihn schon jetzt !
MfG
MS Leopard
@ MS Leopard [#1]
Das geht mit der Security-Funktion
B1:=Security( "J:\Reuters\Aktien\Biotechnology\AMGN", C);
B2:=Security( "J:\Reuters\Aktien\Biotechnology\DNA", C);
B3:=Security( "J:\Reuters\Aktien\Biotechnology\SRA", C);
B4:=Security( "J:\Reuters\Aktien\Biotechnology\IMNX", C);
B5:=Security( "J:\Reuters\Aktien\Biotechnology\IDPH", C);
B1+B2+B3+B4+B4
oder besser mit dem Index Builder:
http://www.trading-tools.com/indices_builder.htm
@ metatrader [#2]
danke
Abend zusammen,
Abend metatrader,
mittlerweile nutze ich sowohl Deine SecurityFunction als auch den IndexBuilder - nochmals ausgesprochenen dank dafür ...
Folgendes würde ich noch gerne ausprobieren wollen :
Bleiben wir bei meinem DAX30 CAR INDEX (VW, BMW & DAIMLER)
Folgende Funktion hab`ich aus meinem MS8Pro Formular kopiert ...
B1:=Security( "G:\Shares\Germany\DAX30\VW.DE", C);
B2:=Security( "G:\Shares\Germany\DAX30\BMW.DE", C);
B3:=Security( "G:\Shares\Germany\DAX30\DC.DE", C);
B1+B2+B3
Alles funktioniert hervorragend nur möchte ich mittlerweile anstatt der CLOSE Funktion lieber eine Cumulative ROC% Function, die ich im folgenden kopiert habe ...
{ User inputs }
period:=Input("RoC: [1]Day, [2]Week, [3]Mnth, [4]Qrtr, [5]Year",1,5,1);
type:=Input("RoC: [1]Current, [2]Cumulative",1,2,1);
method:=Input("RoC method: [1]%Percent, [2]$Points",1,2,1);
start:=Input("Start month [1-12] for quarterly periods",1,12,1);
plot:=Input("plot: [1]RoC, [2]period Signals",1,2,1);
{ Calendar counter engine }
y:=Year()-(Month()<3);
leap:=Int(y/4)-Int(y/100)+Int(y/400);
mth:=Int((2+153*(Month()-3+12*(Month()<3)))/5);
dayNr:=DayOfMonth()+mth+y*365+leap-730425;
weekNr:=1+If(DayNr<1,1,2)
-(Frac(Year()/100)=0 AND Frac(Year()/400)<>0);
weekNr:=Int((DayNr-weekNr)/7)+(Year()>=2000);
{ Signals }
init:=Cum(1)=2;
day:=dayNr<>Ref(dayNr,-1) OR init;
week:=weekNr<>Ref(weekNr,-1) OR init;
mth:=Month()<>Ref(Month(),-1) OR init;
quarter:=Mod(Month()-(start-1),4)=0;
quarter:=quarter=0 AND Alert(quarter,2) OR init;
yr:=Year()>Ref(Year(),-1) OR init;
signal:=
If(period=1,day,
If(period=2,week,
If(period=3,mth,
If(period=4,quarter,
yr))));
{ Signal's Close }
sigCl:=If(LastValue(Cum(signal=0))>0,
ValueWhen(1,signal,C),Ref(C,-1));
{ RoC %/$ select}
pct:=(C/sigCl-1)*100;
pts:=C-sigCl;
RC:=If(method=1,pct,pts);
RC:=If(type=1,RC,Cum(Ref(RC,-1)*signal)+RC);
{ Plot in own window }
0;If(plot=1,RC,signal)
Um weiterhin offen zu bleiben, ich bin einfach überfordert einen Cumulativen ROC Index zu erstellen ! Vielleicht sieht ja jemand auch einen Mehrwert in so einem Index und könnte ihn vielleicht kurz zusammenschreiben! I schaff`s jedensfalls nicht ! Nach 3 Tagen tränen & schweiß seid ihr meine letzte Rettung !
Metatrder, vielleicht kannst du mir Deine skills unter beweis stellen !?
Dank` Dir/Euch schon jetzt !!!
MfG
MS Leopard
@ All
@ MetaTrader
tag zusammen,
ich hab hier nochmal einen einfacheren ROC benutzt :
-----------------------------------------------------------
ROC(C,10,%)
Denn hab` ich dann einfach in die Ursprungsformel eingefügt:
------------------------------------------------------------
B1:=Security( "G:\Shares\Germany\DAX30\VW.DE",ROC(C,10,%));
B2:=Security( "G:\Shares\Germany\DAX30\BMW.DE",ROC(C,10,%));
B3:=Security( "G:\Shares\Germany\DAX30\DC.DE",ROC(C,10,%));
B1+B2+B3
Der ROC Index für den DAX CAR Index funktioniert hervorragend !
Den könnt ihr alle selber testen - nur die Quelle (G:\Shares\Germany\DAX30\) ändern !
Der entscheidende Punkt ist heute, hier & jetzt einfach nur welchen Teil der Funktion, des ROC Cumalative Indicators, ich ausschneiden und eben in die aktuelle Formel reinkopieren kann bzw. muss !? Ich raff`s einfach nicht ...
Für Eure tatkräftige Unterstützung dank` ich euch schon im voraus !!!
MfG
MS Leopard
@ MS Leopard [#4]
Du kannst das wie folgt lösen:
Neue Funktion DAXCAR
B1:=Security( "G:\Shares\Germany\DAX30\VW.DE", C);
B2:=Security( "G:\Shares\Germany\DAX30\BMW.DE", C);
B3:=Security( "G:\Shares\Germany\DAX30\DC.DE", C);
VALCAR := B1+B2+B3;
VALCAR
----------------
Wichtig: Man kann nur 20 Variablen verwenden, darum habe ich bei der Period auf das Jahr verzichtet:
Cumulative ROC% Function
{ User inputs }
period:=Input("RoC: [1]Day, [2]Week, [3]Mnth, [4]Qrtr",1,4,1);
type:=Input("RoC: [1]Current, [2]Cumulative",1,2,1);
method:=Input("RoC method: [1]%Percent, [2]$Points",1,2,1);
start:=Input("Start month [1-12] for quarterly periods",1,12,1);
plot:=Input("plot: [1]RoC, [2]period Signals",1,2,1);
{ Calendar counter engine }
y:=Year()-(Month()<3);
leap:=Int(y/4)-Int(y/100)+Int(y/400);
mth:=Int((2+153*(Month()-3+12*(Month()<3)))/5);
dayNr:=DayOfMonth()+mth+y*365+leap-730425;
weekNr:=1+If(DayNr<1,1,2)
-(Frac(Year()/100)=0 AND Frac(Year()/400)<>0);
weekNr:=Int((DayNr-weekNr)/7)+(Year()>=2000);
{ Signals }
init:=Cum(1)=2;
day:=dayNr<>Ref(dayNr,-1) OR init;
week:=weekNr<>Ref(weekNr,-1) OR init;
mth:=Month()<>Ref(Month(),-1) OR init;
quarter:=Mod(Month()-(start-1),4)=0;
quarter:=quarter=0 AND Alert(quarter,2) OR init;
yr:=Year()>Ref(Year(),-1) OR init;
signal:=
If(period=1,day,
If(period=2,week,
If(period=3,mth,
If(period=4,quarter,
yr))));
{Änderung}
{ Signal's Close }
VCAR := FmlVar("DAXCAR","VALCAR");
sigCl:=If(LastValue(Cum(signal=0))>0,
ValueWhen(1,signal,VCAR),Ref(VCAR,-1));
{ RoC %/$ select}
pct:=(VCAR/sigCl-1)*100;
pts:=VCAR-sigCl;
RC:=If(method=1,pct,pts);
RC:=If(type=1,RC,Cum(Ref(RC,-1)*signal)+RC);
{ Plot in own window }
0;If(plot=1,RC,signal)
Abend zusammen,
super METATRADER !!! Danke
Doch leider funktioniert es immer noch nicht.
Die DAY Funktion reicht mir für den anfang vollkommen aus. Denn für den Anfang möchte ich mit dem Index einfach nur mal verumspielen!
Kriegst Du das noch hin ?
Ich schaff` das nicht mehr.
Dank` Dir für den neuen Quellcode schon jetzt!
MfG
MS Leopard
@ MS Leopard [#7]
Du kannst in MS nur 20 unterschiedliche Variablen in einer Funktion definieren, daher die Fehlermeldung. Ich weiß nicht, wo Du die Funktion geändert hast, du musst nur zusehen, dass du nur insgesamt 20 Variablen benutzt.
Falls Du nicht klar kommst, stelle bitte die vollständige Funktion hier ins Forum, damit ich sie dann anpassen kann.
Hallo MetaTrader,
ich verstehe ehrlich geschrieben das Problem nicht ! Lass uns anders zum Ziel gelangen !
Folgendes :
Wie können wir die Funktion (ROC[1]Curent) - in der Formula - löschen ? Siehe Bild unten
Hier nochmals die ganze Formel aus dem Indicator Builder :
----------------------------------------------------------
{ User inputs }
period:=Input("RoC: [1]Day, [2]Week, [3]Mnth, [4]Qrtr, [5]Year",1,5,1);
type:=Input("RoC: [1]Current, [2]Cumulative",1,2,1);
method:=Input("RoC method: [1]%Percent, [2]$Points",1,2,1);
start:=Input("Start month [1-12] for quarterly periods",1,12,1);
plot:=Input("plot: [1]RoC, [2]period Signals",1,2,1);
{ Calendar counter engine }
y:=Year()-(Month()<3);
leap:=Int(y/4)-Int(y/100)+Int(y/400);
mth:=Int((2+153*(Month()-3+12*(Month()<3)))/5);
dayNr:=DayOfMonth()+mth+y*365+leap-730425;
weekNr:=1+If(DayNr<1,1,2)
-(Frac(Year()/100)=0 AND Frac(Year()/400)<>0);
weekNr:=Int((DayNr-weekNr)/7)+(Year()>=2000);
{ Signals }
init:=Cum(1)=2;
day:=dayNr<>Ref(dayNr,-1) OR init;
week:=weekNr<>Ref(weekNr,-1) OR init;
mth:=Month()<>Ref(Month(),-1) OR init;
quarter:=Mod(Month()-(start-1),4)=0;
quarter:=quarter=0 AND Alert(quarter,2) OR init;
yr:=Year()>Ref(Year(),-1) OR init;
signal:=
If(period=1,day,
If(period=2,week,
If(period=3,mth,
If(period=4,quarter,
yr))));
{ Signal's Close }
sigCl:=If(LastValue(Cum(signal=0))>0,
ValueWhen(1,signal,C),Ref(C,-1));
{ RoC %/$ select}
pct:=(C/sigCl-1)*100;
pts:=C-sigCl;
RC:=If(method=1,pct,pts);
RC:=If(type=1,RC,Cum(Ref(RC,-1)*signal)+RC);
{ Plot in own window }
0;If(plot=1,RC,signal)
DANK` DIR FÜR DEINE TATKRÄFTIGE UNSTERSTÜTZUNG SCHON JETZT !!!
Mit besten Wünschen :
MS Leopard
@ MS Leopard [#9]
Das ist ganz einfach:
{ User inputs }
period:=Input("RoC: [1]Day, [2]Week, [3]Mnth, [4]Qrtr, [5]Year",1,5,1);
type:=Input("RoC: [1]Current, [2]Cumulative",1,2,1); => diese Zeile löschen
...
{ RoC %/$ select}
pct:=(C/sigCl-1)*100;
pts:=C-sigCl;
RC:=If(method=1,pct,pts);
RC:=If(type=1,RC,Cum(Ref(RC,-1)*signal)+RC); => diese Zeile löschen
Den Rest unverändert lassen, dann sollte es klappen
fertig
Hallo MetaTrader,
zuerst einmal danke für Deine schnelle Reaktion ! Aber ich denk`, ich hab` mich wohl etwas unglücklich ausgedrückt !?
Der Punkt ist folgender :
Ich möchte nicht die ganze 2.Spalte gelöscht haben - sondern nur die "[1]Current" Option ! Die "Cumulative" Option möchte ich in der 2.Spalte noch beibehalten ! Siehe Bild unten ... ! Die 2.Spalte sollte wie auf dem Bild unten aussehen !?
Kriegst Du das hin ?
Ich kopiere, schneiden & versuche momentan mit dem IndicesBuilder einiges, doch es will einfach nicht klappen !
Dank` Dir hierfür schon jetzt & schönes Wochenende !
Mit besten Wünschen & Empfehlungen :
MS Leopard
@ MS Leopard [#11]
Die Syntax der Input Formel lautet:
input( "PROMPT TEXT", MINIMUM VALUE, MAXIMUM VALUE, DEFAULT VALUE)
Ich verstehe wirklich dein Problem nicht ;)