 |
TA-script.com Geavanceerde technische analyse - indicatoren en handelssystemen in TA-script
|
| Vorige onderwerp :: Volgende onderwerp |
| Auteur |
Bericht |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Di Mei 11, 2010 10:07 pm Onderwerp: |
|
|
Paulkr,
De startdatum van het frame, wat bij mij reset datum wordt genoemd wordt elk jaar opnieuw vastgesteld, vandaar de geprogrammeerde mogelijkheid deze in te stellen.
Hoe wordt deze datum vastgesteld?
In het werk van Luc kun je daaromtrent lezen:
| Quote: |
Murrey plaats jaarlijks de tijd op nul. Dit gebeurd de eerste week van oktober op de dag dat de US treasury haar maandelijks en vier-maandelijkse veiling houdt. Vanaf dan mag je eenvoudig veelvouden van 4, 8, 16, 32, 64, 128 of 256 dagen dagen optellen.
|
Waarbij je dagen moet tellen als die dagen waarop handel plaats heeft gevonden.
In 2009 rolde daar de datum 09-Oktober-2009 uit, vandaar die ingegeven waarde in mijn stukje programma.
Murrey geeft elk jaar de datum vrij, dus de nieuwe datum krijgen we in Oktober dit jaar.... voor de tijd daarna.
Dan het prijsframe ... zoals ik al vermeldde, dat is nog lang niet compleet.
Ik was begonnen met het programmeren van de tijdlijnen, wat enkele aanpassingen vergt in ta-script.
Zolang er koersdata is kan worden gewerkt met de bar-teller, na de laatste koers moet echter worden gewerkt met de datum teller van Excel, en daarbij moet dan het aantal werkdagen wat volgt voor een bepaald tijdvenster van bijvoorbeeld 8 koersbars, telkens het er tussenliggende weekend en soms weekends worden meegeteld om een juist tijd frame voor de toekomst te krijgen / kunnen tekenen.
Of het bij bijvoorbeeld 8 dagen één weekend of twee weekends zijn hangt weer af van de dag waarop het 8-dagen frame start.
Ook is belangrijk of een vorig tijd-frame stopt op bijvoorbeeld vrijdag, want dan moet het nieuwe frame starten op Maandag, maar er moet wel ergens de twee dagen van het weekend tevoorschijn worden getoverd.
Enzovoort ...
Dit lijkt voor elkaar te zijn, het tijdframe lijkt te werken, er is nog 1 ding wat ik daaromtrent in de gaten moet houden.
Om echter dat tijdframe te kunnen tekenen had ik snel even wat waarden nodig voor de prijslijnen.
Daarvoor even snel een stukje code in elkaar gefrutseld, wat echter nog lang... lang .. niet datgene bevat wat het worden moet.
Daar moet ik dus nog mee aan de gang.
Het buiten het frame vallen van de koers, of het niet genoeg onderverdeeld zijn van het frame voor de lage waarden zoals benodigd voor de Forex trading etc. etc. rolt dus niet uit het onjuist toepassen van de reset datum, maar uit het krakkemikkige systeem van onder verdeling van het prijsframe zoals nu even snel is toegepast.
Dat is waar ik al voor waarschuwde, en dat is het volgende punt op de agenda
Dan het eventueel instellen van een andere reset datum ...
tja, het MurreyMath systeem werkt met die datum voor de VS-markt.
In de loop van het jaar ontstaan er kleine verschillen met bijvoorbeeld onze index, doordat wij bijvoorbeeld dagen geen handel hebben waarop de VS wel handelt, maar die zijn er ook omgekeerd.
Ik heb nooit onderzocht of een andere datum iets extra's zou hebben opgeleverd over het gehele jaar.
Verder ben ik erg voorzichtig met het wijzigen van waarden die zijn 'uitgedokterd' bij het ontwerpen van een bepaald systeem.
Wanneer je dat toch doet verval je al snel in 'curve-fitting'... en dat is achteraf zelden succesvol, lichtjes uitgedrukt.
Liever leer ik te werken met de 'tekortkomingen' van een bepaalde instellng, voor zover je kan spreken over tekortkomingen .. liever spreek ik over 'het gedrag van de betreffende indicator'; want door ermee te werken leer je ermee om te gaan.
Zo laat ik bijvoorbeeld de RSI altijd op 14, je kan hem dan lezen en dromen, je weet waar de 'afwijkingen' liggen.
Zo laat ik ook de datum liggen op de 'reset-datum'.
Maar .. wellicht interessant: een onderzoek naar aanpassing van de datum, bijvoorbeeld aanpassing voor de Hang Seng, naar een bepaalde datum die daar overeenkomt met de wijze waarop Murrey de datum vaststeld...
.
Bedankt voor je vragen ...
Bedankt voor je opmerkingen ...
En aan het prijsframe ga ik werken zodra ik tijd over heb....
Loop ik muurvast, dan is daar ons lichtpunt in de duisternis ...Eric !
Heb je intussen nog dingen waar je tegenaan loopt, melden alsjeblieft.
Dat geldt ook voor de andere lezers !
. _________________ Vriendelijke groet,
JanS  |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Do Mei 13, 2010 9:06 am Onderwerp: |
|
|
... _________________ Vriendelijke groet,
JanS 
Laatst aangepast door Janus op Za Mei 15, 2010 8:58 pm, in totaal 2 keer bewerkt |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Do Mei 13, 2010 10:02 pm Onderwerp: |
|
|
De Speedlines, de momentumlines en mini-Murrey-Math-Trading-Lines zijn toegevoegd aan het programma.
De laatste versie is nu 1.05, zie de topic hieronder
.
Hieronder enkele grafieken die met dit stukje programma zijn gemaakt.
De AEX met opgaande en dalende SpeedLines:
De AEX met de mini-Murrey-Math-Trading-Lines:
De AEX met MomentumLines:
De S&P500 met mini-Murrey-Math-Trading-Lines
De Euro / Dollar:
. _________________ Vriendelijke groet,
JanS 
Laatst aangepast door Janus op Za Mei 15, 2010 8:57 pm, in totaal 1 keer bewerkt |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Za Mei 15, 2010 8:56 pm Onderwerp: |
|
|
Laatste versie is nu 1.05
Enkele wijzigingen doorgevoerd en er kan nu ook worden gekozen voor prijsweergave bij de lijnen.
Opmerkingen welkom; hier in deze topic of onder jan@jstas.com
.
Versie 15-Mei-2010
.
| Code: |
{- Filename: MurreyMath Frame -}
{MurreyMath frame}
{ www.JSTAS.com }
// Versie 1.05
Function KleurSelec(Selec:Integer): TColor;
Begin
case Selec of
1: Result := clAqua; 2: Result := clBlack;
3: Result := clBlue; 4: Result := clDkGray;
5: Result := clFuchsia; 6: Result := clGray;
7: Result := clGreen; 8: Result := clLime;
9: Result := clltGray; 10: Result := clMaroon;
11: Result := clNavy; 12: Result := clOlive;
13: Result := clPurple; 14: Result := clRed;
15: Result := clSilver; 16: Result := clTeal;
17: Result := clWhite; 18: Result := clYellow;
19: Result := RGB(196,196,0);
else
Result := clGray;
end;
End;
//
Procedure Ellips(X1,X2: TDateTime; Y1,Y2:Real;Kleur:Integer);
Begin
With CreateEllipse(X1,Y1,X2,Y2) Do
Begin
Color:= KleurSelec(Kleur);
UseBkColor:= False;
DrawBehindChart := True;
End;
End;
//
Procedure Speedlns(X1,X2: TDateTime;Y1,Y2:Real;dik,Klr,Lijnsoort:Integer);
Begin
With CreateTrendLine(X1,Y1,X2,Y2) Do
Begin
Color:=KleurSelec(Klr);
Width := dik;
DrawBehindChart :=True;
If Lijnsoort=1 Then Style:=lsSolid;
If Lijnsoort=2 THen Style:=lsDash ;
If Lijnsoort=3 Then Style:=lsDot ;
End;
End;
//
Var
KleurKeuzes, TijdFrm, WrdeTxt, MaandKeuze : String ;
SetDate, LstDate, LstL : TDateTime;
i,j,K,ResetDag,ResetMaand,ResetJaar,TijdFrame,A,B,ZelfKleur,Kleur,KlrTxt,
Plaats,Rh1,Rh2,FrmeInFrctl,Q,FrmeInFrctl2,Wkndd,XWndd,KleurConc,KlrminiMur :Integer;
TijdH1,Space,FractlH,FractlL,SetUp, RHr1,RHr2, RHr3,uitk :Real;
ExtraText,ExtraTextV,TekstOn,SpeedLnsUp,SpeedLnsDw,
MiniMurrey,MomentmUp,MomentmDwn,Lijnwrde :Boolean;
TijdH2 : Array[1..17] Of TDateTime;
Prijslijn : Array[1..13] Of Real ;
TekstTble : Array[1..13] Of String ;
TekstTbleT : Array[1..17] Of String ;
ColorTbleP : Array[1..13] Of Integer ;
ColorTbleT : Array[1..17] Of Integer ;
sHH,SLL,sDIFF :TSeries ;
Begin
With Indicator Do
Begin
Shortname := 'MurreyMath Frame';
RequiredBars := 300 ;
Indicator.NewBand := False ;
Indicator.ScaleRange := SrCommon;
End;
Kleurkeuzes:='Aqua'#9'Black'#9'Blue'#9'DkGray' #9'Fuchsia'#9'Gray' #9'Green'
#9'Lime'#9'LtGray'#9'Maroon'#9'Navy'#9'Olive'#9'Purple'#9'Red'
#9'Silver'#9'Teal'#9'White'#9'Yellow'#9'Dark Yellow';
MaandKeuze := 'Januari'#9'Februari'#9'Maart'#9'April'#9'Mei'#9'Juni'#9'Juli'#9'Augustus'#9
'September'#9'Oktober'#9'November'#9'December';
TijdFrm := '8'#9'16'#9'32'#9'64'#9'128'#9'256';
ResetDag := CreateparameterInteger('Reset-Dag',1,31,9,False);
ResetMaand := 1+CreateparameterSelect('Reset-Maand',MaandKeuze,9,False);
ResetJaar := CreateParameterInteger('Reset-Jaar',2009,2100,2009,False);
SetDate := Encodedate(ResetJaar,ResetMaand,ResetDag);
Tijdframe := CreateparameterSelect('Maak keuze Tijdframe',TijdFrm,3,False);
MiniMurrey := CreateParameterBoolean('mini-MurreyMathlines weergeven ?',False,False);
SpeedlnsUp := CreateparameterBoolean('SpeedLines omhoog weergeven ?',False,False);
SpeedLnsDw := CreateParameterBoolean('SpeedLines omlaag weergeven ?',False,False);
MomentmUp := CreateParameterBoolean('Momentumlines omhoog weergeven ?',False,False);
MomentmDwn := CreateParameterBoolean('Momentumlines omlaag weergeven ?',False,False);
KlrminiMur := 1+CreateParameterSelect('Kleur extra-lijnen',KleurKeuzes,3,False);
Lijnwrde := CreateParameterBoolean('Lijn waarde in grafiek ?',True,False);
ExtraText := CreateParameterBoolean('Extra vermelding Horizontale tekst',False,False);
ExtraTextV := CreateParameterBoolean('Extra vermelding Verticale tekst',False,False);
ZelfKleur := CreateParameterSelect('Welk kleurpatroon ?','Volgens MurreyMath'#9'Eén zelf op te geven kleur',0,False);
Kleur := 1+CreateParameterSelect('Geef kleur Murrey-Matrix :',Kleurkeuzes,3,False);
KleurConc := 1+CreateParameterSelect('Kleur -Circles of Conflict:',Kleurkeuzes,15,False);
TekstOn := CreateParameterBoolean('Indicatornaam weergeven?',True,False);
Plaats := CreateParameterInteger('Plaats van de Indicatornaam',1,100,95,False);
KlrTxt := 1+CreateParameterSelect('Geef kleur Naam weergave :',Kleurkeuzes,13,False);
Wkndd :=2;
Case Tijdframe of
0: Space:= 8.0 ; 1: Space:= 16.0; 2: Space:= 32.0;
3: Space:=64.0 ; 4: Space:=128.0; 5: Space:=256.0;
End;
//********************************************************************************
//Berekenen Prijslijnen en vullen prijs-array
sHH := HighSeries(High,Trunc(Space));
sLL := LowSeries (Low ,Trunc(SPace));
sDIFF := SubtractSeries(sHH,sLL);
For i:= 1 To BarCount-1 Do
Begin
If i = BarCount-1 Then
Begin
FractlH := 100000 ;
If sHH[i] < 25000 Then FractlH := 10000; If sHH[i] < 2500 Then FractlH := 1000;
If sHH[i] < 250 Then FractlH := 100; If sHH[i] < 12.50 Then FractlH := 12.50;
FractlL := 100000 ;
If sLL[i] < 25000 Then FractlL := 10000; If sLL[i] < 2500 Then FractlL := 1000;
If sLL[i] < 250 Then FractlL := 100; If sLL[i] < 12.50 Then FractlL := 12.50;
RHr2:=4.0
For j:=1 to 32 Do
Begin
If Trunc((FractlH/8.0)/sDIFF[i])=j Then uitk := j;
End;
If uitk =1 Then RHr2 := 8.0;
If uitk =2 Then RHr2 := 16.0;
If (uitk >2) And (uitk<= 4) Then RHr2 := 32.0;
If (uitk >4) And (uitk<= 8) Then RHr2 := 64.0;
If (uitk >8) And (uitk<=16) Then RHr2 := 128.0;
If (uitk>16) And (uitk<=32) Then RHr2 := 256.0;
FrmeInFrctl := Ceil(sHH[i]/(FractlH/RHr2));
If (Frac(sHH[i]/(FractlH/RHr2)))<= 0.3125 Then FrmeInFrctl:=FrmeInFrctl-1;
FrmeInFrctl2 := Ceil(sLL[i]/(FractlH/RHr2));
If (Frac(sLL[i]/(FractlH/RHr2))) >= 0.6875 Then FrmeInFrctl2 := FrmeInFrctl2+1;
RHr1:=8.0
If FrmeInFrctl2 < FrmeInFrctl Then RHr1 := 4.0;
SetUp := (FractlH/RHr2)*FrmeInFrctl+((FractlH/RHr2)/RHr1)*2;
For j:= 1 To 13 Do
Begin
Prijslijn[j]:= Setup - (j-1)*((FractlH/RHr2)/RHr1);
If (Prijslijn[j]<(FractlH/4.0)) And (FractlH>100) Then Prijslijn[j] :=( Prijslijn[j-1]-((FractlH/10)/RHr1));
End;
End;
End;
//********************************
// Berekening tijd-lijnen van het tijd-frame en vullen tijdlijn array
For i := 1 to BarCount-1 Do Begin
If Trunc(DateTime[i])= Trunc(Setdate) Then A :=i; End;
//
TijdH1 := ((BarCount-1)-A) /Space ;
For i := 1 To BarCount-1 Do Begin
If( i= (A + (Trunc(TijdH1)*Trunc(Space)))) Then
Begin
TijdH2[5]:=Trunc(DateTime[i]);
B := i;
End; End;
//
For i:= 1 To BarCount-1 Do Begin
For j:=1 To 4 Do
Begin
If (i= B-(Space/8)*j) Then TijdH2[5-j] := Trunc(DateTime[i]);
End; End;
//
For i:= B to (BarCount-1) Do Begin
For j:= 6 to ((Trunc(((BarCount-1)-B)/(Space/8)))+5) Do
Begin
K:=j-5;
If (i= B+(Space/8)*K) Then TijdH2[j] := Trunc(DateTime[i]);
End; End;
//
For i:= 1 To BarCount-1 Do Begin
If ((Trunc(DateTime[i])) = (TijdH2[5+K])) Then Rh1 := i;
If i=Barcount-1 Then LstDate := Trunc(DateTime[i]); End;
Rh2 := (BarCount-1)-Rh1;
If (((Space/8.0)-Rh2) <= (6-DayOfWeek(LstDate))) Then Wkndd :=0;
TijdH2[5+K+1]:= LstDate + Trunc(Space/8)-Rh2+(Trunc(((Trunc(Space/8)-Rh2)-(6-DayOfWeek(LstDate)))/5.0))*2+Wkndd ;
LstL := TijdH2[5+K+1];
//
For j:=1 To (12-K-1) Do
Begin
Wkndd:=0;
XWndd:=0;
If DayOfWeek(LstL) = 6 Then Wkndd:=2;
If ((Space/8)=32.0) Then If DayOfWeek(LstL)=5 Then Xwndd :=2;
If ((Space/8)=8.0)Then
Begin
If (DayOfWeek(LstL)=4) Or (DayOfWeek(LstL)=5) Then Xwndd:=2;
End;
If ((Space/8)=4.0) THen
Begin
If (DayOfWeek(LstL)=3) Or (DayOfWeek(LstL)=4) Or (DayOfWeek(LstL)=5) Then Xwndd :=2;
End;
If ((Space/8)=2.0) Then If DayOfWeek(LstL)= 5 Then Xwndd :=2;
TijdH2[5+K+1+J] := LstL + (Space/8) + Wkndd + Xwndd + ((Trunc((Space/8)/5))*2) ;
LstL := TijdH2[5+K+1+J];
End;
//********************************************************
//Vullen tekst en kleur arrays
//Kleurtabel Prijslijnen
ColorTbleP[ 1] := 14; ColorTbleP[ 2] := 19; ColorTbleP[ 3] := 3;
ColorTbleP[ 4] := 19; ColorTbleP[ 5] := 14; ColorTbleP[ 6] := 7;
ColorTbleP[ 7] := 3; ColorTbleP[ 8] := 7; ColorTbleP[ 9] := 14;
ColorTbleP[10] := 19; ColorTbleP[11] := 3; ColorTbleP[12] := 19;
ColorTbleP[13] := 14;
If (ZelfKleur=1) Then Begin
For j:=1 to 13 Do
Begin
ColorTbleP[j]:= Kleur;
End; End;
//KleurTabel Tijdlijnen
ColorTbleT[ 1] := 3; ColorTbleT[ 2] := 7; ColorTbleT[ 3] := 14;
ColorTbleT[ 4] := 19; ColorTbleT[ 5] := 3; ColorTbleT[ 6] := 19;
ColorTbleT[ 7] := 14; ColorTbleT[ 8] := 7; ColorTbleT[ 9] := 3;
ColorTbleT[10] := 7; ColorTbleT[11] := 14; ColorTbleT[12] := 19;
ColorTbleT[13] := 3; ColorTbleT[14] := 19; ColorTbleT[15] := 14;
ColorTbleT[16] := 7; ColorTbleT[17] := 3;
If (ZelfKleur=1) Then Begin
For j:=1 to 17 Do
Begin
ColorTbleT[j]:= Kleur;
End; End;
//TekstTble tekst voor prijslijnen
TekstTble[ 1] :='+2/8'; TekstTble[ 2] :='+1/8'; TekstTble [3] :=' 8/8';
TekstTble[ 4] :=' 7/8'; TekstTble[ 5] :=' 6/8'; TekstTble[ 6] :=' 5/8';
TekstTble[ 7] :=' 4/8'; TekstTble[ 8] :=' 3/8'; TekstTble[ 9] :=' 2/8';
TekstTble[10] :=' 1/8'; TekstTble[11] :=' 0/8'; TekstTble[12] :='-1/8';
TekstTble[13] :='-2/8';
//TekstTbleT tekst voor tijdlijnen
TekstTbleT[ 1] :='4/8'; TekstTbleT[ 2] :='5/8'; TekstTbleT[ 3] :='6/8';
TekstTbleT[ 4] :='7/8'; TekstTbleT[ 5] :='0/8'; TekstTbleT[ 6] :='1/8';
TekstTbleT[ 7] :='2/8'; TekstTbleT[ 8] :='3/8'; TekstTbleT[ 9] :='4/8';
TekstTbleT[10] :='5/8'; TekstTbleT[11] :='6/8'; TekstTbleT[12] :='7/8';
TekstTbleT[13] :='8/8'; TekstTbleT[14] :='1/8'; TekstTblet[15] :='2/8';
TekstTbleT[16] :='3/8'; TekstTbleT[17] :='4/8';
//**********************************************************
// Tekenwerk
// Plaatsen SpeedLines
If SpeedLnsUp Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[3],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[11],Prijslijn[3],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[11],Prijslijn[3],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[11],Prijslijn[3],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[5],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[9],1,10,1);
End;
If SpeedLnsDw Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[11],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[3],Prijslijn[11],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[3],Prijslijn[11],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[3],Prijslijn[11],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 9],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 5],1,10,1);
End;
// Tekenen Mini-Murrey-Math Lines mMMTL
If MiniMurrey Then
Begin
For j:= 1 To 12 Do Begin
RHr3 :=((Prijslijn[j] + PrijsLijn[j+1])/2);
SpeedLns(TijdH2[1],TijdH2[17],RHr3,RHr3,1,KlrMiniMur,3);
End End;
// Tekenen Momentum lijnen omhoog
If MomentmUp Then Begin
For j:=1 to 9 Do
Begin
SpeedLns(TijdH2[4+j], TijdH2[1],Prijslijn[1],Prijslijn[4+j],1,KlrMiniMur,2);
End;
For j:=1 to 4 Do
Begin
SpeedLns(TijdH2[13+j],TijdH2[1+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:=1 To 11 Do
Begin
SpeedLns(TijdH2[17],TijdH2[5+j],Prijslijn[1+j], Prijslijn[13],1,KlrMiniMur,2);
End; End;
// Tekenen Momentum lijnen omlaag
If MomentmDwn Then Begin
For j:= 1 To 5 Do
Begin
SpeedLns(TijdH2[0+j],TijdH2[12+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[5+j],TijdH2[17],Prijslijn[1],Prijslijn[13-j],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[1], TijdH2[13-j],Prijslijn[1+j],Prijslijn[13],1,KlrMinimur,2);
End; End;
//Tekenen Tijd lijnen van het Frame.
For j:=1 to 17 Do Begin
With CreateTrendLine(TijdH2[j],Prijslijn[1],TijdH2[j],Prijslijn[13])DO
Begin
Color:= KleurSelec(ColorTbleT[j]);
If (j=5) Or (j=13) Then Width:=2;
DrawBehindChart:=True;
End; End;
// Plaatsen 'Circles of conflict'
Ellips(TijdH2[8],TijdH2[10],Prijslijn[6],PrijsLijn[8], KleurConc);
Q:=2;
For j:= 1 To 4 Do
Begin
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[4], PrijsLijn[6],KleurConc);
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[8], PrijsLijn[10],KleurConc);
Q:=Q+4
End;
// Tekenen Prijslijnen van het Frame:
For j:= 1 to 13 Do Begin
With CreateTrendline(TijdH2[1],Prijslijn[j],TijdH2[17],Prijslijn[j]) Do
Begin
Color:= KleurSelec(ColorTbleP[j]);
If (j=3) Or (j=11) Then Width:= 2;
DrawBehindChart := True;
End; End;
// Plaatsen tekst Prijslijnen en extra tekst prijslijnen
For j:=1 to 12 Do
Begin
CreateText(TijdH2[16]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
If ExtraTextV Then
CreateText(TijdH2[ 9]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
End;
// Plaatsen tekst tijdlijnen
For j:=1 to 15 Do
Begin
CreateText(TijdH2[j],Prijslijn[13],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
If ExtraText Then
CreateText(TijdH2[j],Prijslijn[ 7],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
End;
// Plaatsen lijn waarde
If Lijnwrde Then Begin
For j:=1 To 13 Do
Begin
WrdeTxt:=FormatFloat('0.00',(Round(Prijslijn[j]*100))/100);
If (FractlH=12.50) Then WrdeTxt:=FormatFloat('0.000',(Round(Prijslijn[j]*1000))/1000);
CreateText(TijdH2[17],Prijslijn[j],WrdeTxt).Color:=KleurSelec(ColorTbleP[j]);
End; End;
{$IFDEF SCRIPTVERSION-4}
If tekston Then Begin
With CreateText(0,0,Instrument.ID+' MurreyMath '+ IntToStr(Trunc(Space))+' -Koers-Bar frame'+ ' www.JSTAS.com' ) Do
Begin
Y1Pct := Plaats;
X1Pct := 1;
VertPosition := vpTop;
Color:=KleurSelec(KlrTxt);
Font.Size:=8;
End; End;
{$ENDIF}
End.
LET OP !!
Omdat het tekenwerk lineair verloopt dient u logaritmische grafiek weergave UIT te schakelen.
|
_________________ Vriendelijke groet,
JanS  |
|
| Naar boven |
|
 |
paulkr
Geregistreerd op: 25-6-2007 Berichten: 131
|
Geplaatst: Za Mei 15, 2010 9:10 pm Onderwerp: |
|
|
JanS,
Bedankt voor de update met de nieuwe mogelijkheden en verbeteringen. Geen kei in programmeren … je krijgt het toch mooi allemaal voor elkaar.
Hierbij nog even snel een bevinding ; de indicator wordt momenteel niet zichtbaar, wanneer toegepast op het aandeel Air France (Dit is ook het geval bij eerdere versies van het script). Indien men 8 selecteert voor het tijdframe dan wordt het frame zichtbaar, echter (nog) niet op een wijze dat deze bruikbaar is. Hoop dat je hiermee iets kan om de indicator verder te verbeteren.
Gr. Paul |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Za Mei 15, 2010 9:15 pm Onderwerp: |
|
|
Paul
Dat probleem zou met versie 1.05 verholpen moeten zijn, er stond een ís gelijk teken' teveel in de code voor de berekening, vandaar dat die fout optrad.
.
.
. _________________ Vriendelijke groet,
JanS  |
|
| Naar boven |
|
 |
paulkr
Geregistreerd op: 25-6-2007 Berichten: 131
|
Geplaatst: Za Mei 15, 2010 9:35 pm Onderwerp: |
|
|
Dat is snel ! werk nu prima.
Een ander dingetje dat opvalt en weet niet zeker of hier alles precies volgens het boekje verloopt (oogt wat vreemd) .
Wanneer we de indicator (256 tijdframe) op Arcelor Mitt toegepassen, dan zou men als conclusie kunnen trekken dat het aandeel ondergewaardeerd is…., dit in vergelijking met de overige AEX aandelen waar zij zich in hun frame bevinden. Hoe kijk jij hier tegen aan op basis van Murreymath? |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Zo Mei 16, 2010 11:19 pm Onderwerp: |
|
|
Fijn dat het nu bij jou ook werkt Paul.
*
Dan je opmerking over Arcelor Mittal.
Pak je het 128 dagen frame, dan zie je dat de koers ruwweg heen en weer stuiterd tussen de 6/8 en 1/8 lijn.
Pak je het 256 dagen tijdframe, dan zie je dat het de koers ondanks twee pogingen daartoe niet gelukt is in de trading range ( 3/8 - 5/8 ) te komen.
Na een zijwaartse periode van maanden ( in 2009 ) lijkt de uitbraak in December 2009 dus te mislukken.
Het koersverloop ligt er zwak bij.
Wellicht begrijp ik je verkeerd, maar vergelijking van Arcelo Mittal met de andere aandelen uit de AEX is een beetje moeilijk, omdat het allemaal andere sectoren zijn waarin ze opereren.
Het gedrag zal dus afwijken wat 'm.i. normaal is.
Wanneer je de RSI even on der de MurreyMath grafiek plakt, dan zie je dat deze nog wat hoop biedt op een positief vervolg ... maar wanneer de koers verder daalt is dat snel vervlogen ..
.
Vriendelijke groet,
JanS  _________________ Vriendelijke groet,
JanS  |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Ma Mei 17, 2010 9:37 pm Onderwerp: |
|
|
Ik heb de code even wat gewijzigd, de instelling van de reset datum is naar onder in het parameter scherm verplaatst omdat deze instelling maar 1X per jaar benodigd is.
De meest gebruikte instellingen staan nu bovenaan in het parameterscherm
Verder kwam ik er achter ... ja nu al ..., dat er een prachtige instellingsmogelijkheid in TA script is ingebouwd om een datum in te geven.
Minder variabelen en een snellere ingave mogelijkheid.
Dit is dan ook gewijzigd.
Indien u na installeren van deze code het frame in al bestaande grafieken mist, moet u even de MurreyMath indicator selecteren ( in WallStreet via F4) en kiezen voor 'reset parameters' onder in het schermpje. | Code: |
{- Filename: MurreyMath Frame -}
{MurreyMath frame}
{ www.JSTAS.com }
// Versie 1.06a
Function KleurSelec(Selec:Integer): TColor;
Begin
case Selec of
1: Result := clAqua; 2: Result := clBlack;
3: Result := clBlue; 4: Result := clDkGray;
5: Result := clFuchsia; 6: Result := clGray;
7: Result := clGreen; 8: Result := clLime;
9: Result := clltGray; 10: Result := clMaroon;
11: Result := clNavy; 12: Result := clOlive;
13: Result := clPurple; 14: Result := clRed;
15: Result := clSilver; 16: Result := clTeal;
17: Result := clWhite; 18: Result := clYellow;
19: Result := RGB(196,196,0);
else
Result := clGray;
end;
End;
//
Procedure Ellips(X1,X2: TDateTime; Y1,Y2:Real;Kleur,Dikte:Integer);
Begin
With CreateEllipse(X1,Y1,X2,Y2) Do
Begin
Color:= KleurSelec(Kleur);
UseBkColor:= False;
DrawBehindChart := True;
Width:=Dikte;
End;
End;
//
Procedure Speedlns(X1,X2: TDateTime;Y1,Y2:Real;dik,Klr,Lijnsoort:Integer);
Begin
With CreateTrendLine(X1,Y1,X2,Y2) Do
Begin
Color:=KleurSelec(Klr);
Width := dik;
DrawBehindChart :=True;
If Lijnsoort=1 Then Style:=lsSolid;
If Lijnsoort=2 THen Style:=lsDash ;
If Lijnsoort=3 Then Style:=lsDot ;
End;
End;
//
Var
KleurKeuzes, TijdFrm, WrdeTxt : String ;
SetDate, LstDate, LstL : TDateTime;
i,j,K,TijdFrame,A,B,ZelfKleur,Kleur,KlrTxt,Plaats,Rh1,Rh2,
FrmeInFrctl,Q,FrmeInFrctl2,Wkndd,XWndd,KleurConc,KlrminiMur :Integer;
TijdH1,Space,FractlH,FractlL,SetUp, RHr1,RHr2, RHr3,uitk :Real;
ExtraText,ExtraTextV,TekstOn,SpeedLnsUp,SpeedLnsDw,
MiniMurrey,MomentmUp,MomentmDwn,Lijnwrde :Boolean;
TijdH2 : Array[1..17] Of TDateTime;
Prijslijn : Array[1..13] Of Real ;
TekstTble : Array[1..13] Of String ;
TekstTbleT : Array[1..17] Of String ;
ColorTbleP : Array[1..13] Of Integer ;
ColorTbleT : Array[1..17] Of Integer ;
sHH,SLL,sDIFF :TSeries ;
Begin
With Indicator Do
Begin
Shortname := 'MurreyMath Frame';
RequiredBars := 300 ;
Indicator.NewBand := False ;
Indicator.ScaleRange := SrCommon;
End;
Kleurkeuzes:='Aqua'#9'Black'#9'Blue'#9'DkGray' #9'Fuchsia'#9'Gray' #9'Green'
#9'Lime'#9'LtGray'#9'Maroon'#9'Navy'#9'Olive'#9'Purple'#9'Red'
#9'Silver'#9'Teal'#9'White'#9'Yellow'#9'Dark Yellow';
TijdFrm := '8'#9'16'#9'32'#9'64'#9'128'#9'256';
Tijdframe := CreateparameterSelect('Maak keuze Tijdframe',TijdFrm,3,False);
MiniMurrey := CreateParameterBoolean('mini-MurreyMathlines weergeven ?',False,False);
SpeedlnsUp := CreateparameterBoolean('SpeedLines omhoog weergeven ?',False,False);
SpeedLnsDw := CreateParameterBoolean('SpeedLines omlaag weergeven ?',False,False);
MomentmUp := CreateParameterBoolean('Momentumlines omhoog weergeven ?',False,False);
MomentmDwn := CreateParameterBoolean('Momentumlines omlaag weergeven ?',False,False);
KlrminiMur := 1+CreateParameterSelect('Kleur extra-lijnen',KleurKeuzes,3,False);
Lijnwrde := CreateParameterBoolean('Lijn waarde in grafiek ?',True,False);
ExtraText := CreateParameterBoolean('Extra vermelding Horizontale tekst',False,False);
ExtraTextV := CreateParameterBoolean('Extra vermelding Verticale tekst',False,False);
ZelfKleur := CreateParameterSelect('Welk kleurpatroon ?','Volgens MurreyMath'#9'Eén zelf op te geven kleur',0,False);
Kleur := 1+CreateParameterSelect('Geef kleur Murrey-Matrix :',Kleurkeuzes,3,False);
KleurConc := 1+CreateParameterSelect('Kleur -Circles of Conflict:',Kleurkeuzes,15,False);
TekstOn := CreateParameterBoolean('Indicatornaam weergeven?',True,False);
Plaats := CreateParameterInteger('Plaats van de Indicatornaam',1,100,95,False);
KlrTxt := 1+CreateParameterSelect('Geef kleur Naam weergave :',Kleurkeuzes,13,False);
SetDate := CreateParameterDate('Geef reset-datum',EncodeDate(2009,10,09));
Wkndd :=2;
Case Tijdframe of
0: Space:= 8.0 ; 1: Space:= 16.0; 2: Space:= 32.0;
3: Space:=64.0 ; 4: Space:=128.0; 5: Space:=256.0;
End;
//********************************************************************************
//Berekenen Prijslijnen en vullen prijs-array
sHH := HighSeries(High,Trunc(Space));
sLL := LowSeries (Low ,Trunc(SPace));
sDIFF := SubtractSeries(sHH,sLL);
For i:= 1 To BarCount-1 Do
Begin
If i = BarCount-1 Then
Begin
FractlH := 100000 ;
If sHH[i] < 25000 Then FractlH := 10000; If sHH[i] < 2500 Then FractlH := 1000;
If sHH[i] < 250 Then FractlH := 100; If sHH[i] < 12.50 Then FractlH := 12.50;
FractlL := 100000 ;
If sLL[i] < 25000 Then FractlL := 10000; If sLL[i] < 2500 Then FractlL := 1000;
If sLL[i] < 250 Then FractlL := 100; If sLL[i] < 12.50 Then FractlL := 12.50;
RHr2:=4.0
For j:=1 to 32 Do
Begin
If Trunc((FractlH/8.0)/sDIFF[i])=j Then uitk := j;
End;
If uitk =1 Then RHr2 := 8.0;
If uitk =2 Then RHr2 := 16.0;
If (uitk >2) And (uitk<= 4) Then RHr2 := 32.0;
If (uitk >4) And (uitk<= 8) Then RHr2 := 64.0;
If (uitk >8) And (uitk<=16) Then RHr2 := 128.0;
If (uitk>16) And (uitk<=32) Then RHr2 := 256.0;
FrmeInFrctl := Ceil(sHH[i]/(FractlH/RHr2));
If (Frac(sHH[i]/(FractlH/RHr2)))<= 0.3125 Then FrmeInFrctl:=FrmeInFrctl-1;
FrmeInFrctl2 := Ceil(sLL[i]/(FractlH/RHr2));
If (Frac(sLL[i]/(FractlH/RHr2))) >= 0.6875 Then FrmeInFrctl2 := FrmeInFrctl2+1;
RHr1:=8.0
If FrmeInFrctl2 < FrmeInFrctl Then RHr1 := 4.0;
SetUp := (FractlH/RHr2)*FrmeInFrctl+((FractlH/RHr2)/RHr1)*2;
For j:= 1 To 13 Do
Begin
Prijslijn[j]:= Setup - (j-1)*((FractlH/RHr2)/RHr1);
If (Prijslijn[j]<(FractlH/4.0)) And (FractlH>100) Then Prijslijn[j] :=( Prijslijn[j-1]-((FractlH/10)/RHr1));
End;
End;
End;
//********************************
// Berekening tijd-lijnen van het tijd-frame en vullen tijdlijn array
For i := 1 to BarCount-1 Do Begin
If Trunc(DateTime[i])= Trunc(Setdate) Then A :=i; End;
//
TijdH1 := ((BarCount-1)-A) /Space ;
For i := 1 To BarCount-1 Do Begin
If( i= (A + (Trunc(TijdH1)*Trunc(Space)))) Then
Begin
TijdH2[5]:=Trunc(DateTime[i]);
B := i;
End; End;
//
For i:= 1 To BarCount-1 Do Begin
For j:=1 To 4 Do
Begin
If (i= B-(Space/8)*j) Then TijdH2[5-j] := Trunc(DateTime[i]);
End; End;
//
For i:= B to (BarCount-1) Do Begin
For j:= 6 to ((Trunc(((BarCount-1)-B)/(Space/8)))+5) Do
Begin
K:=j-5;
If (i= B+(Space/8)*K) Then TijdH2[j] := Trunc(DateTime[i]);
End; End;
//
For i:= 1 To BarCount-1 Do Begin
If ((Trunc(DateTime[i])) = (TijdH2[5+K])) Then Rh1 := i;
If i=Barcount-1 Then LstDate := Trunc(DateTime[i]); End;
Rh2 := (BarCount-1)-Rh1;
If (((Space/8.0)-Rh2) <= (6-DayOfWeek(LstDate))) Then Wkndd :=0;
TijdH2[5+K+1]:= LstDate + Trunc(Space/8)-Rh2+(Trunc(((Trunc(Space/8)-Rh2)-(6-DayOfWeek(LstDate)))/5.0))*2+Wkndd ;
LstL := TijdH2[5+K+1];
//
For j:=1 To (12-K-1) Do
Begin
Wkndd:=0;
XWndd:=0;
If DayOfWeek(LstL) = 6 Then Wkndd:=2;
If ((Space/8)=32.0) Then If DayOfWeek(LstL)=5 Then Xwndd :=2;
If ((Space/8)=8.0)Then
Begin
If (DayOfWeek(LstL)=4) Or (DayOfWeek(LstL)=5) Then Xwndd:=2;
End;
If ((Space/8)=4.0) THen
Begin
If (DayOfWeek(LstL)=3) Or (DayOfWeek(LstL)=4) Or (DayOfWeek(LstL)=5) Then Xwndd :=2;
End;
If ((Space/8)=2.0) Then If DayOfWeek(LstL)= 5 Then Xwndd :=2;
TijdH2[5+K+1+J] := LstL + (Space/8) + Wkndd + Xwndd + ((Trunc((Space/8)/5))*2) ;
LstL := TijdH2[5+K+1+J];
End;
//********************************************************
//Vullen tekst en kleur arrays
//Kleurtabel Prijslijnen
ColorTbleP[ 1] := 14; ColorTbleP[ 2] := 19; ColorTbleP[ 3] := 3;
ColorTbleP[ 4] := 19; ColorTbleP[ 5] := 14; ColorTbleP[ 6] := 7;
ColorTbleP[ 7] := 3; ColorTbleP[ 8] := 7; ColorTbleP[ 9] := 14;
ColorTbleP[10] := 19; ColorTbleP[11] := 3; ColorTbleP[12] := 19;
ColorTbleP[13] := 14;
If (ZelfKleur=1) Then Begin
For j:=1 to 13 Do
Begin
ColorTbleP[j]:= Kleur;
End; End;
//KleurTabel Tijdlijnen
ColorTbleT[ 1] := 3; ColorTbleT[ 2] := 7; ColorTbleT[ 3] := 14;
ColorTbleT[ 4] := 19; ColorTbleT[ 5] := 3; ColorTbleT[ 6] := 19;
ColorTbleT[ 7] := 14; ColorTbleT[ 8] := 7; ColorTbleT[ 9] := 3;
ColorTbleT[10] := 7; ColorTbleT[11] := 14; ColorTbleT[12] := 19;
ColorTbleT[13] := 3; ColorTbleT[14] := 19; ColorTbleT[15] := 14;
ColorTbleT[16] := 7; ColorTbleT[17] := 3;
If (ZelfKleur=1) Then Begin
For j:=1 to 17 Do
Begin
ColorTbleT[j]:= Kleur;
End; End;
//TekstTble tekst voor prijslijnen
TekstTble[ 1] :='+2/8'; TekstTble[ 2] :='+1/8'; TekstTble [3] :=' 8/8';
TekstTble[ 4] :=' 7/8'; TekstTble[ 5] :=' 6/8'; TekstTble[ 6] :=' 5/8';
TekstTble[ 7] :=' 4/8'; TekstTble[ 8] :=' 3/8'; TekstTble[ 9] :=' 2/8';
TekstTble[10] :=' 1/8'; TekstTble[11] :=' 0/8'; TekstTble[12] :='-1/8';
TekstTble[13] :='-2/8';
//TekstTbleT tekst voor tijdlijnen
TekstTbleT[ 1] :='4/8'; TekstTbleT[ 2] :='5/8'; TekstTbleT[ 3] :='6/8';
TekstTbleT[ 4] :='7/8'; TekstTbleT[ 5] :='0/8'; TekstTbleT[ 6] :='1/8';
TekstTbleT[ 7] :='2/8'; TekstTbleT[ 8] :='3/8'; TekstTbleT[ 9] :='4/8';
TekstTbleT[10] :='5/8'; TekstTbleT[11] :='6/8'; TekstTbleT[12] :='7/8';
TekstTbleT[13] :='8/8'; TekstTbleT[14] :='1/8'; TekstTblet[15] :='2/8';
TekstTbleT[16] :='3/8'; TekstTbleT[17] :='4/8';
//**********************************************************
// Tekenwerk
// Plaatsen SpeedLines
If SpeedLnsUp Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[3],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[11],Prijslijn[3],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[11],Prijslijn[3],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[11],Prijslijn[3],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[5],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[9],1,10,1);
End;
If SpeedLnsDw Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[11],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[3],Prijslijn[11],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[3],Prijslijn[11],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[3],Prijslijn[11],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 9],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 5],1,10,1);
End;
// Tekenen Mini-Murrey-Math Lines mMMTL
If MiniMurrey Then
Begin
For j:= 1 To 12 Do Begin
RHr3 :=((Prijslijn[j] + PrijsLijn[j+1])/2);
SpeedLns(TijdH2[1],TijdH2[17],RHr3,RHr3,1,KlrMiniMur,3);
End End;
// Tekenen Momentum lijnen omhoog
If MomentmUp Then Begin
For j:=1 to 9 Do
Begin
SpeedLns(TijdH2[4+j], TijdH2[1],Prijslijn[1],Prijslijn[4+j],1,KlrMiniMur,2);
End;
For j:=1 to 4 Do
Begin
SpeedLns(TijdH2[13+j],TijdH2[1+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:=1 To 11 Do
Begin
SpeedLns(TijdH2[17],TijdH2[5+j],Prijslijn[1+j], Prijslijn[13],1,KlrMiniMur,2);
End; End;
// Tekenen Momentum lijnen omlaag
If MomentmDwn Then Begin
For j:= 1 To 5 Do
Begin
SpeedLns(TijdH2[0+j],TijdH2[12+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[5+j],TijdH2[17],Prijslijn[1],Prijslijn[13-j],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[1], TijdH2[13-j],Prijslijn[1+j],Prijslijn[13],1,KlrMinimur,2);
End; End;
//Tekenen Tijd lijnen van het Frame.
For j:=1 to 17 Do Begin
With CreateTrendLine(TijdH2[j],Prijslijn[1],TijdH2[j],Prijslijn[13])DO
Begin
Color:= KleurSelec(ColorTbleT[j]);
If (j=5) Or (j=13) Then Width:=2;
DrawBehindChart:=True;
End; End;
// Plaatsen 'Circles of conflict'
Ellips(TijdH2[8],TijdH2[10],Prijslijn[6],PrijsLijn[8], KleurConc,2);
Q:=2;
For j:= 1 To 4 Do
Begin
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[4], PrijsLijn[6],KleurConc,1);
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[8], PrijsLijn[10],KleurConc,1);
Q:=Q+4
End;
// Tekenen Prijslijnen van het Frame:
For j:= 1 to 13 Do Begin
With CreateTrendline(TijdH2[1],Prijslijn[j],TijdH2[17],Prijslijn[j]) Do
Begin
Color:= KleurSelec(ColorTbleP[j]);
If (j=3) Or (j=11) Then Width:= 2;
DrawBehindChart := True;
End; End;
// Plaatsen tekst Prijslijnen en extra tekst prijslijnen
For j:=1 to 12 Do
Begin
CreateText(TijdH2[16]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
If ExtraTextV Then
CreateText(TijdH2[ 9]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
End;
// Plaatsen tekst tijdlijnen
For j:=1 to 15 Do
Begin
CreateText(TijdH2[j],Prijslijn[13],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
If ExtraText Then
CreateText(TijdH2[j],Prijslijn[ 7],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
End;
// Plaatsen lijn waarde
If Lijnwrde Then Begin
For j:=1 To 13 Do
Begin
WrdeTxt:=FormatFloat('0.00',(Round(Prijslijn[j]*100))/100);
If (FractlH=12.50) Then WrdeTxt:=FormatFloat('0.000',(Round(Prijslijn[j]*1000))/1000);
CreateText(TijdH2[17]+1,Prijslijn[j],WrdeTxt).Color:=KleurSelec(ColorTbleP[j]);
End; End;
{$IFDEF SCRIPTVERSION-4}
If tekston Then Begin
With CreateText(0,0,Instrument.ID+' MurreyMath '+ IntToStr(Trunc(Space))+' -Koers-Bar frame'+ ' www.JSTAS.com' ) Do
Begin
Y1Pct := Plaats;
X1Pct := 1;
VertPosition := vpTop;
Color:=KleurSelec(KlrTxt);
Font.Size:=8;
End; End;
{$ENDIF}
End.
LET OP !!
Omdat het tekenwerk lineair verloopt dient u logaritmische grafiek weergave UIT te schakelen.
Resetdatum moet elk jaar opnieuw worden ingegeven in de maand Oktober.
Neem contact op met jan@jstas.com wanneer u de nieuwe datum niet weet.
.
|
_________________ Vriendelijke groet,
JanS  |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
|
| Naar boven |
|
 |
Eric
Geregistreerd op: 10-9-2005 Berichten: 1412 Woonplaats: Den Haag
|
Geplaatst: Do Mei 20, 2010 12:32 pm Onderwerp: |
|
|
Respect voor het bouwen van het script Janus, je mag dan geen programmeur zijn maar je bent desondanks niet bang om zoiets aan te pakken, en met succes. Ik heb het script bekeken, maar heb geen echt rare dingen gezien.
Om mijn reputatie als programmeur in elk geval hoog te houden ben ik wel even met het berekenen van de tijdlijnen gaan stoeien, dat kwam op mij wat complex over. Ik heb het teruggebracht tot dit, wat volgens mij hetzelfde doet.
| Code: | {- Filename: MurreyMath Frame -}
{MurreyMath frame}
{ www.JSTAS.com }
// Versie 1.06a
function AddWorkDays(Date: TDateTime; WorkDays: integer): TDateTime;
var
n: integer;
begin
n := DayOfWeek(Date)-2;
WorkDays := WorkDays + n;
Result := (Date-n) + (WorkDays div 5) * 7 + (WorkDays mod 5);
end;
Function KleurSelec(Selec:Integer): TColor;
Begin
case Selec of
1: Result := clAqua; 2: Result := clBlack;
3: Result := clBlue; 4: Result := clDkGray;
5: Result := clFuchsia; 6: Result := clGray;
7: Result := clGreen; 8: Result := clLime;
9: Result := clltGray; 10: Result := clMaroon;
11: Result := clNavy; 12: Result := clOlive;
13: Result := clPurple; 14: Result := clRed;
15: Result := clSilver; 16: Result := clTeal;
17: Result := clWhite; 18: Result := clYellow;
19: Result := RGB(196,196,0);
else
Result := clGray;
end;
End;
//
Procedure Ellips(X1,X2: TDateTime; Y1,Y2:Real;Kleur,Dikte:Integer);
Begin
With CreateEllipse(X1,Y1,X2,Y2) Do
Begin
Color:= KleurSelec(Kleur);
UseBkColor:= False;
DrawBehindChart := True;
Width:=Dikte;
End;
End;
//
Procedure Speedlns(X1,X2: TDateTime;Y1,Y2:Real;dik,Klr,Lijnsoort:Integer);
Begin
With CreateTrendLine(X1,Y1,X2,Y2) Do
Begin
Color:=KleurSelec(Klr);
Width := dik;
DrawBehindChart :=True;
If Lijnsoort=1 Then Style:=lsSolid;
If Lijnsoort=2 THen Style:=lsDash ;
If Lijnsoort=3 Then Style:=lsDot ;
End;
End;
//
Var
KleurKeuzes, TijdFrm, WrdeTxt : String ;
SetDate, LstDate, LstL : TDateTime;
i,j,K,TijdFrame,A,B,X,ZelfKleur,Kleur,KlrTxt,Plaats,Rh1,Rh2,
FrmeInFrctl,Q,FrmeInFrctl2,Wkndd,XWndd,KleurConc,KlrminiMur :Integer;
TijdH1,Space,FractlH,FractlL,SetUp, RHr1,RHr2, RHr3,uitk :Real;
ExtraText,ExtraTextV,TekstOn,SpeedLnsUp,SpeedLnsDw,
MiniMurrey,MomentmUp,MomentmDwn,Lijnwrde :Boolean;
TijdH2 : Array[1..17] Of TDateTime;
Prijslijn : Array[1..13] Of Real ;
TekstTble : Array[1..13] Of String ;
TekstTbleT : Array[1..17] Of String ;
ColorTbleP : Array[1..13] Of Integer ;
ColorTbleT : Array[1..17] Of Integer ;
sHH,SLL,sDIFF :TSeries ;
Begin
With Indicator Do
Begin
Shortname := 'MurreyMath Frame';
RequiredBars := 300 ;
Indicator.NewBand := False ;
Indicator.ScaleRange := SrCommon;
End;
Kleurkeuzes:='Aqua'#9'Black'#9'Blue'#9'DkGray' #9'Fuchsia'#9'Gray' #9'Green'
#9'Lime'#9'LtGray'#9'Maroon'#9'Navy'#9'Olive'#9'Purple'#9'Red'
#9'Silver'#9'Teal'#9'White'#9'Yellow'#9'Dark Yellow';
TijdFrm := '8'#9'16'#9'32'#9'64'#9'128'#9'256';
Tijdframe := CreateparameterSelect('Maak keuze Tijdframe',TijdFrm,3,False);
MiniMurrey := CreateParameterBoolean('mini-MurreyMathlines weergeven ?',False,False);
SpeedlnsUp := CreateparameterBoolean('SpeedLines omhoog weergeven ?',False,False);
SpeedLnsDw := CreateParameterBoolean('SpeedLines omlaag weergeven ?',False,False);
MomentmUp := CreateParameterBoolean('Momentumlines omhoog weergeven ?',False,False);
MomentmDwn := CreateParameterBoolean('Momentumlines omlaag weergeven ?',False,False);
KlrminiMur := 1+CreateParameterSelect('Kleur extra-lijnen',KleurKeuzes,3,False);
Lijnwrde := CreateParameterBoolean('Lijn waarde in grafiek ?',True,False);
ExtraText := CreateParameterBoolean('Extra vermelding Horizontale tekst',False,False);
ExtraTextV := CreateParameterBoolean('Extra vermelding Verticale tekst',False,False);
ZelfKleur := CreateParameterSelect('Welk kleurpatroon ?','Volgens MurreyMath'#9'Eén zelf op te geven kleur',0,False);
Kleur := 1+CreateParameterSelect('Geef kleur Murrey-Matrix :',Kleurkeuzes,3,False);
KleurConc := 1+CreateParameterSelect('Kleur -Circles of Conflict:',Kleurkeuzes,15,False);
TekstOn := CreateParameterBoolean('Indicatornaam weergeven?',True,False);
Plaats := CreateParameterInteger('Plaats van de Indicatornaam',1,100,95,False);
KlrTxt := 1+CreateParameterSelect('Geef kleur Naam weergave :',Kleurkeuzes,13,False);
SetDate := CreateParameterDate('Geef reset-datum',EncodeDate(2009,10,09));
Wkndd :=2;
Case Tijdframe of
0: Space:= 8.0 ; 1: Space:= 16.0; 2: Space:= 32.0;
3: Space:=64.0 ; 4: Space:=128.0; 5: Space:=256.0;
End;
//********************************************************************************
//Berekenen Prijslijnen en vullen prijs-array
sHH := HighSeries(High,Trunc(Space));
sLL := LowSeries (Low ,Trunc(SPace));
sDIFF := SubtractSeries(sHH,sLL);
For i:= 1 To BarCount-1 Do
Begin
If i = BarCount-1 Then
begin
i := BarCount-1;
FractlH := 100000 ;
If sHH[i] < 25000 Then FractlH := 10000; If sHH[i] < 2500 Then FractlH := 1000;
If sHH[i] < 250 Then FractlH := 100; If sHH[i] < 12.50 Then FractlH := 12.50;
FractlL := 100000 ;
If sLL[i] < 25000 Then FractlL := 10000; If sLL[i] < 2500 Then FractlL := 1000;
If sLL[i] < 250 Then FractlL := 100; If sLL[i] < 12.50 Then FractlL := 12.50;
RHr2:=4.0
For j:=1 to 32 Do
Begin
If Trunc((FractlH/8.0)/sDIFF[i])=j Then uitk := j;
End;
If uitk =1 Then RHr2 := 8.0;
If uitk =2 Then RHr2 := 16.0;
If (uitk >2) And (uitk<= 4) Then RHr2 := 32.0;
If (uitk >4) And (uitk<= 8) Then RHr2 := 64.0;
If (uitk >8) And (uitk<=16) Then RHr2 := 128.0;
If (uitk>16) And (uitk<=32) Then RHr2 := 256.0;
FrmeInFrctl := Ceil(sHH[i]/(FractlH/RHr2));
If (Frac(sHH[i]/(FractlH/RHr2)))<= 0.3125 Then FrmeInFrctl:=FrmeInFrctl-1;
FrmeInFrctl2 := Ceil(sLL[i]/(FractlH/RHr2));
If (Frac(sLL[i]/(FractlH/RHr2))) >= 0.6875 Then FrmeInFrctl2 := FrmeInFrctl2+1;
RHr1:=8.0
If FrmeInFrctl2 < FrmeInFrctl Then RHr1 := 4.0;
SetUp := (FractlH/RHr2)*FrmeInFrctl+((FractlH/RHr2)/RHr1)*2;
For j:= 1 To 13 Do
Begin
Prijslijn[j]:= Setup - (j-1)*((FractlH/RHr2)/RHr1);
If (Prijslijn[j]<(FractlH/4.0)) And (FractlH>100) Then Prijslijn[j] :=( Prijslijn[j-1]-((FractlH/10)/RHr1));
End;
End;
End;
//********************************
// Berekening tijd-lijnen van het tijd-frame en vullen tijdlijn array
For i := 1 to BarCount-1 Do Begin
If Trunc(DateTime[i])= Trunc(Setdate) Then A :=i;
If i=Barcount-1 Then LstDate := Trunc(DateTime[i]);
End;
TijdH1 := ((BarCount-1)-A) /Space ;
B := A + Trunc(TijdH1)*Trunc(Space);
for j:=1 to 17 do
begin
i := Trunc(B + (j-5)*Space/8);
if (i >= 0) and (i < BarCount) then
begin
{ tijdlijn valt binnen de grafiek, neem de bar datum }
TijdH2[j] := Trunc(DateTime[i]);
end else
begin
{ tijdlijn valt buiten de grafiek, bereken de datum op basis van de laatste bar }
TijdH2[j] := AddWorkDays(LstDate, i-(BarCount-1));
end;
end;
//Vullen tekst en kleur arrays
//Kleurtabel Prijslijnen
ColorTbleP[ 1] := 14; ColorTbleP[ 2] := 19; ColorTbleP[ 3] := 3;
ColorTbleP[ 4] := 19; ColorTbleP[ 5] := 14; ColorTbleP[ 6] := 7;
ColorTbleP[ 7] := 3; ColorTbleP[ 8] := 7; ColorTbleP[ 9] := 14;
ColorTbleP[10] := 19; ColorTbleP[11] := 3; ColorTbleP[12] := 19;
ColorTbleP[13] := 14;
If (ZelfKleur=1) Then Begin
For j:=1 to 13 Do
Begin
ColorTbleP[j]:= Kleur;
End; End;
//KleurTabel Tijdlijnen
ColorTbleT[ 1] := 3; ColorTbleT[ 2] := 7; ColorTbleT[ 3] := 14;
ColorTbleT[ 4] := 19; ColorTbleT[ 5] := 3; ColorTbleT[ 6] := 19;
ColorTbleT[ 7] := 14; ColorTbleT[ 8] := 7; ColorTbleT[ 9] := 3;
ColorTbleT[10] := 7; ColorTbleT[11] := 14; ColorTbleT[12] := 19;
ColorTbleT[13] := 3; ColorTbleT[14] := 19; ColorTbleT[15] := 14;
ColorTbleT[16] := 7; ColorTbleT[17] := 3;
If (ZelfKleur=1) Then Begin
For j:=1 to 17 Do
Begin
ColorTbleT[j]:= Kleur;
End; End;
//TekstTble tekst voor prijslijnen
TekstTble[ 1] :='+2/8'; TekstTble[ 2] :='+1/8'; TekstTble [3] :=' 8/8';
TekstTble[ 4] :=' 7/8'; TekstTble[ 5] :=' 6/8'; TekstTble[ 6] :=' 5/8';
TekstTble[ 7] :=' 4/8'; TekstTble[ 8] :=' 3/8'; TekstTble[ 9] :=' 2/8';
TekstTble[10] :=' 1/8'; TekstTble[11] :=' 0/8'; TekstTble[12] :='-1/8';
TekstTble[13] :='-2/8';
//TekstTbleT tekst voor tijdlijnen
TekstTbleT[ 1] :='4/8'; TekstTbleT[ 2] :='5/8'; TekstTbleT[ 3] :='6/8';
TekstTbleT[ 4] :='7/8'; TekstTbleT[ 5] :='0/8'; TekstTbleT[ 6] :='1/8';
TekstTbleT[ 7] :='2/8'; TekstTbleT[ 8] :='3/8'; TekstTbleT[ 9] :='4/8';
TekstTbleT[10] :='5/8'; TekstTbleT[11] :='6/8'; TekstTbleT[12] :='7/8';
TekstTbleT[13] :='8/8'; TekstTbleT[14] :='1/8'; TekstTblet[15] :='2/8';
TekstTbleT[16] :='3/8'; TekstTbleT[17] :='4/8';
//**********************************************************
// Tekenwerk
// Plaatsen SpeedLines
If SpeedLnsUp Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[3],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[11],Prijslijn[3],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[11],Prijslijn[3],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[11],Prijslijn[3],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[5],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[9],1,10,1);
End;
If SpeedLnsDw Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[11],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[3],Prijslijn[11],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[3],Prijslijn[11],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[3],Prijslijn[11],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 9],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 5],1,10,1);
End;
// Tekenen Mini-Murrey-Math Lines mMMTL
If MiniMurrey Then
Begin
For j:= 1 To 12 Do Begin
RHr3 :=((Prijslijn[j] + PrijsLijn[j+1])/2);
SpeedLns(TijdH2[1],TijdH2[17],RHr3,RHr3,1,KlrMiniMur,3);
End End;
// Tekenen Momentum lijnen omhoog
If MomentmUp Then Begin
For j:=1 to 9 Do
Begin
SpeedLns(TijdH2[4+j], TijdH2[1],Prijslijn[1],Prijslijn[4+j],1,KlrMiniMur,2);
End;
For j:=1 to 4 Do
Begin
SpeedLns(TijdH2[13+j],TijdH2[1+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:=1 To 11 Do
Begin
SpeedLns(TijdH2[17],TijdH2[5+j],Prijslijn[1+j], Prijslijn[13],1,KlrMiniMur,2);
End; End;
// Tekenen Momentum lijnen omlaag
If MomentmDwn Then Begin
For j:= 1 To 5 Do
Begin
SpeedLns(TijdH2[0+j],TijdH2[12+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[5+j],TijdH2[17],Prijslijn[1],Prijslijn[13-j],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[1], TijdH2[13-j],Prijslijn[1+j],Prijslijn[13],1,KlrMinimur,2);
End; End;
//Tekenen Tijd lijnen van het Frame.
For j:=1 to 17 Do Begin
With CreateTrendLine(TijdH2[j],Prijslijn[1],TijdH2[j],Prijslijn[13])DO
Begin
Color:= KleurSelec(ColorTbleT[j]);
If (j=5) Or (j=13) Then Width:=2;
DrawBehindChart:=True;
End; End;
// Plaatsen 'Circles of conflict'
Ellips(TijdH2[8],TijdH2[10],Prijslijn[6],PrijsLijn[8], KleurConc,2);
Q:=2;
For j:= 1 To 4 Do
Begin
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[4], PrijsLijn[6],KleurConc,1);
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[8], PrijsLijn[10],KleurConc,1);
Q:=Q+4
End;
// Tekenen Prijslijnen van het Frame:
For j:= 1 to 13 Do Begin
With CreateTrendline(TijdH2[1],Prijslijn[j],TijdH2[17],Prijslijn[j]) Do
Begin
Color:= KleurSelec(ColorTbleP[j]);
If (j=3) Or (j=11) Then Width:= 2;
DrawBehindChart := True;
End; End;
// Plaatsen tekst Prijslijnen en extra tekst prijslijnen
For j:=1 to 12 Do
Begin
CreateText(TijdH2[16]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
If ExtraTextV Then
CreateText(TijdH2[ 9]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
End;
// Plaatsen tekst tijdlijnen
For j:=1 to 15 Do
Begin
CreateText(TijdH2[j],Prijslijn[13],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
If ExtraText Then
CreateText(TijdH2[j],Prijslijn[ 7],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
End;
// Plaatsen lijn waarde
If Lijnwrde Then Begin
For j:=1 To 13 Do
Begin
WrdeTxt:=FormatFloat('0.00',(Round(Prijslijn[j]*100))/100);
If (FractlH=12.50) Then WrdeTxt:=FormatFloat('0.000',(Round(Prijslijn[j]*1000))/1000);
CreateText(TijdH2[17]+1,Prijslijn[j],WrdeTxt).Color:=KleurSelec(ColorTbleP[j]);
End; End;
{$IFDEF SCRIPTVERSION-4}
If tekston Then Begin
With CreateText(0,0,Instrument.ID+' MurreyMath '+ IntToStr(Trunc(Space))+' -Koers-Bar frame'+ ' www.JSTAS.com' ) Do
Begin
Y1Pct := Plaats;
X1Pct := 1;
VertPosition := vpTop;
Color:=KleurSelec(KlrTxt);
Font.Size:=8;
End; End;
{$ENDIF}
End.
LET OP !!
Omdat het tekenwerk lineair verloopt dient u logaritmische grafiek weergave UIT te schakelen.
Resetdatum moet elk jaar opnieuw worden ingegeven in de maand Oktober.
Neem contact op met jan@jstas.com wanneer u de nieuwe datum niet weet. |
---
Eric |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
Geplaatst: Do Mei 20, 2010 8:31 pm Onderwerp: |
|
|
Bedankt voor de aanpassing Eric, dat ziet er een stuk duidelijker uit inderdaad.
Er is nu voor zover ik kan zien nog maar één probleempje in het script.
Namelijk wanneer er nog geen koersen zijn zoals bij een FTI Mei het geval is in bijvoorbeeld Januari van dit jaar, wordt het frame nog niet juist getekend in de periode voordat er koersen aanwezig zijn.
Heb je daar nog een elegante oplossing voor ?
. _________________ Vriendelijke groet,
JanS 
Laatst aangepast door Janus op Vr Mei 21, 2010 10:03 pm, in totaal 1 keer bewerkt |
|
| Naar boven |
|
 |
Janus
Geregistreerd op: 30-1-2008 Berichten: 301
|
|
| Naar boven |
|
 |
Eric
Geregistreerd op: 10-9-2005 Berichten: 1412 Woonplaats: Den Haag
|
Geplaatst: Vr Mei 21, 2010 2:14 am Onderwerp: |
|
|
| Janus schreef: | Heb je daar nog een elegante oplossing voor ?
. |
Ik denk dat dit wel werkt:
| Code: | {- Filename: MurreyMath Frame -}
{MurreyMath frame}
{ www.JSTAS.com }
// Versie 1.06a
function AddWorkDays(Date: TDateTime; WorkDays: integer): TDateTime;
var
n: integer;
begin
if WorkDays > 0 then
begin
n := DayOfWeek(Date)-2;
WorkDays := WorkDays + n;
Result := (Date-n) + (WorkDays div 5) * 7 + (WorkDays mod 5);
end else
begin
n := DayOfWeek(Date)-6;
WorkDays := WorkDays + n;
Result := (Date-n) + (WorkDays div 5) * 7 + (WorkDays mod 5);
end;
end;
Function KleurSelec(Selec:Integer): TColor;
Begin
case Selec of
1: Result := clAqua; 2: Result := clBlack;
3: Result := clBlue; 4: Result := clDkGray;
5: Result := clFuchsia; 6: Result := clGray;
7: Result := clGreen; 8: Result := clLime;
9: Result := clltGray; 10: Result := clMaroon;
11: Result := clNavy; 12: Result := clOlive;
13: Result := clPurple; 14: Result := clRed;
15: Result := clSilver; 16: Result := clTeal;
17: Result := clWhite; 18: Result := clYellow;
19: Result := RGB(196,196,0);
else
Result := clGray;
end;
End;
//
Procedure Ellips(X1,X2: TDateTime; Y1,Y2:Real;Kleur,Dikte:Integer);
Begin
With CreateEllipse(X1,Y1,X2,Y2) Do
Begin
Color:= KleurSelec(Kleur);
UseBkColor:= False;
DrawBehindChart := True;
Width:=Dikte;
End;
End;
//
Procedure Speedlns(X1,X2: TDateTime;Y1,Y2:Real;dik,Klr,Lijnsoort:Integer);
Begin
With CreateTrendLine(X1,Y1,X2,Y2) Do
Begin
Color:=KleurSelec(Klr);
Width := dik;
DrawBehindChart :=True;
If Lijnsoort=1 Then Style:=lsSolid;
If Lijnsoort=2 THen Style:=lsDash ;
If Lijnsoort=3 Then Style:=lsDot ;
End;
End;
//
Var
KleurKeuzes, TijdFrm, WrdeTxt : String ;
SetDate, LstDate, FirstDate : TDateTime;
i,j,TijdFrame,A,B,ZelfKleur,Kleur,KlrTxt,Plaats,
FrmeInFrctl,Q,FrmeInFrctl2,Wkndd,KleurConc,KlrminiMur :Integer;
TijdH1,Space,FractlH,FractlL,SetUp, RHr1,RHr2, RHr3,uitk :Real;
ExtraText,ExtraTextV,TekstOn,SpeedLnsUp,SpeedLnsDw,
MiniMurrey,MomentmUp,MomentmDwn,Lijnwrde :Boolean;
TijdH2 : Array[1..17] Of TDateTime;
Prijslijn : Array[1..13] Of Real ;
TekstTble : Array[1..13] Of String ;
TekstTbleT : Array[1..17] Of String ;
ColorTbleP : Array[1..13] Of Integer ;
ColorTbleT : Array[1..17] Of Integer ;
sHH,SLL,sDIFF :TSeries ;
Begin
With Indicator Do
Begin
Shortname := 'MurreyMath Frame';
RequiredBars := 300 ;
Indicator.NewBand := False ;
Indicator.ScaleRange := SrCommon;
End;
Kleurkeuzes:='Aqua'#9'Black'#9'Blue'#9'DkGray' #9'Fuchsia'#9'Gray' #9'Green'
#9'Lime'#9'LtGray'#9'Maroon'#9'Navy'#9'Olive'#9'Purple'#9'Red'
#9'Silver'#9'Teal'#9'White'#9'Yellow'#9'Dark Yellow';
TijdFrm := '8'#9'16'#9'32'#9'64'#9'128'#9'256';
Tijdframe := CreateparameterSelect('Maak keuze Tijdframe',TijdFrm,3,False);
MiniMurrey := CreateParameterBoolean('mini-MurreyMathlines weergeven ?',False,False);
SpeedlnsUp := CreateparameterBoolean('SpeedLines omhoog weergeven ?',False,False);
SpeedLnsDw := CreateParameterBoolean('SpeedLines omlaag weergeven ?',False,False);
MomentmUp := CreateParameterBoolean('Momentumlines omhoog weergeven ?',False,False);
MomentmDwn := CreateParameterBoolean('Momentumlines omlaag weergeven ?',False,False);
KlrminiMur := 1+CreateParameterSelect('Kleur extra-lijnen',KleurKeuzes,3,False);
Lijnwrde := CreateParameterBoolean('Lijn waarde in grafiek ?',True,False);
ExtraText := CreateParameterBoolean('Extra vermelding Horizontale tekst',False,False);
ExtraTextV := CreateParameterBoolean('Extra vermelding Verticale tekst',False,False);
ZelfKleur := CreateParameterSelect('Welk kleurpatroon ?','Volgens MurreyMath'#9'Eén zelf op te geven kleur',0,False);
Kleur := 1+CreateParameterSelect('Geef kleur Murrey-Matrix :',Kleurkeuzes,3,False);
KleurConc := 1+CreateParameterSelect('Kleur -Circles of Conflict:',Kleurkeuzes,15,False);
TekstOn := CreateParameterBoolean('Indicatornaam weergeven?',True,False);
Plaats := CreateParameterInteger('Plaats van de Indicatornaam',1,100,95,False);
KlrTxt := 1+CreateParameterSelect('Geef kleur Naam weergave :',Kleurkeuzes,13,False);
SetDate := CreateParameterDate('Geef reset-datum',EncodeDate(2009,10,09));
Wkndd :=2;
Case Tijdframe of
0: Space:= 8.0 ; 1: Space:= 16.0; 2: Space:= 32.0;
3: Space:=64.0 ; 4: Space:=128.0; 5: Space:=256.0;
End;
//********************************************************************************
//Berekenen Prijslijnen en vullen prijs-array
sHH := HighSeries(High,Trunc(Space));
sLL := LowSeries (Low ,Trunc(SPace));
sDIFF := SubtractSeries(sHH,sLL);
For i:= 1 To BarCount-1 Do
Begin
If i = BarCount-1 Then
begin
i := BarCount-1;
FractlH := 100000 ;
If sHH[i] < 25000 Then FractlH := 10000; If sHH[i] < 2500 Then FractlH := 1000;
If sHH[i] < 250 Then FractlH := 100; If sHH[i] < 12.50 Then FractlH := 12.50;
FractlL := 100000 ;
If sLL[i] < 25000 Then FractlL := 10000; If sLL[i] < 2500 Then FractlL := 1000;
If sLL[i] < 250 Then FractlL := 100; If sLL[i] < 12.50 Then FractlL := 12.50;
RHr2:=4.0
For j:=1 to 32 Do
Begin
If Trunc((FractlH/8.0)/sDIFF[i])=j Then uitk := j;
End;
If uitk =1 Then RHr2 := 8.0;
If uitk =2 Then RHr2 := 16.0;
If (uitk >2) And (uitk<= 4) Then RHr2 := 32.0;
If (uitk >4) And (uitk<= 8) Then RHr2 := 64.0;
If (uitk >8) And (uitk<=16) Then RHr2 := 128.0;
If (uitk>16) And (uitk<=32) Then RHr2 := 256.0;
FrmeInFrctl := Ceil(sHH[i]/(FractlH/RHr2));
If (Frac(sHH[i]/(FractlH/RHr2)))<= 0.3125 Then FrmeInFrctl:=FrmeInFrctl-1;
FrmeInFrctl2 := Ceil(sLL[i]/(FractlH/RHr2));
If (Frac(sLL[i]/(FractlH/RHr2))) >= 0.6875 Then FrmeInFrctl2 := FrmeInFrctl2+1;
RHr1:=8.0
If FrmeInFrctl2 < FrmeInFrctl Then RHr1 := 4.0;
SetUp := (FractlH/RHr2)*FrmeInFrctl+((FractlH/RHr2)/RHr1)*2;
For j:= 1 To 13 Do
Begin
Prijslijn[j]:= Setup - (j-1)*((FractlH/RHr2)/RHr1);
If (Prijslijn[j]<(FractlH/4.0)) And (FractlH>100) Then Prijslijn[j] :=( Prijslijn[j-1]-((FractlH/10)/RHr1));
End;
End;
End;
//********************************
// Berekening tijd-lijnen van het tijd-frame en vullen tijdlijn array
For i := 0 to BarCount-1 Do Begin
If Trunc(DateTime[i])= Trunc(Setdate) Then A :=i;
if i=0 then FirstDate := Trunc(DateTime[i]);
If i=Barcount-1 Then LstDate := Trunc(DateTime[i]);
End;
TijdH1 := ((BarCount-1)-A) /Space ;
B := A + Trunc(TijdH1)*Trunc(Space);
for j:=1 to 17 do
begin
i := Trunc(B + (j-5)*Space/8);
if (i >= 0) and (i < BarCount) then
{ tijdlijn valt binnen de grafiek, neem de bar datum }
TijdH2[j] := Trunc(DateTime[i])
else if i < 0 then
{ tijdlijn valt links buiten de grafiek, bereken de datum op basis van de eerste bar }
TijdH2[j] := AddWorkDays(FirstDate, i)
else
{ tijdlijn valt rechts buiten de grafiek, bereken de datum op basis van de laatste bar }
TijdH2[j] := AddWorkDays(LstDate, i-(BarCount-1));
end;
//Vullen tekst en kleur arrays
//Kleurtabel Prijslijnen
ColorTbleP[ 1] := 14; ColorTbleP[ 2] := 19; ColorTbleP[ 3] := 3;
ColorTbleP[ 4] := 19; ColorTbleP[ 5] := 14; ColorTbleP[ 6] := 7;
ColorTbleP[ 7] := 3; ColorTbleP[ 8] := 7; ColorTbleP[ 9] := 14;
ColorTbleP[10] := 19; ColorTbleP[11] := 3; ColorTbleP[12] := 19;
ColorTbleP[13] := 14;
If (ZelfKleur=1) Then Begin
For j:=1 to 13 Do
Begin
ColorTbleP[j]:= Kleur;
End; End;
//KleurTabel Tijdlijnen
ColorTbleT[ 1] := 3; ColorTbleT[ 2] := 7; ColorTbleT[ 3] := 14;
ColorTbleT[ 4] := 19; ColorTbleT[ 5] := 3; ColorTbleT[ 6] := 19;
ColorTbleT[ 7] := 14; ColorTbleT[ 8] := 7; ColorTbleT[ 9] := 3;
ColorTbleT[10] := 7; ColorTbleT[11] := 14; ColorTbleT[12] := 19;
ColorTbleT[13] := 3; ColorTbleT[14] := 19; ColorTbleT[15] := 14;
ColorTbleT[16] := 7; ColorTbleT[17] := 3;
If (ZelfKleur=1) Then Begin
For j:=1 to 17 Do
Begin
ColorTbleT[j]:= Kleur;
End; End;
//TekstTble tekst voor prijslijnen
TekstTble[ 1] :='+2/8'; TekstTble[ 2] :='+1/8'; TekstTble [3] :=' 8/8';
TekstTble[ 4] :=' 7/8'; TekstTble[ 5] :=' 6/8'; TekstTble[ 6] :=' 5/8';
TekstTble[ 7] :=' 4/8'; TekstTble[ 8] :=' 3/8'; TekstTble[ 9] :=' 2/8';
TekstTble[10] :=' 1/8'; TekstTble[11] :=' 0/8'; TekstTble[12] :='-1/8';
TekstTble[13] :='-2/8';
//TekstTbleT tekst voor tijdlijnen
TekstTbleT[ 1] :='4/8'; TekstTbleT[ 2] :='5/8'; TekstTbleT[ 3] :='6/8';
TekstTbleT[ 4] :='7/8'; TekstTbleT[ 5] :='0/8'; TekstTbleT[ 6] :='1/8';
TekstTbleT[ 7] :='2/8'; TekstTbleT[ 8] :='3/8'; TekstTbleT[ 9] :='4/8';
TekstTbleT[10] :='5/8'; TekstTbleT[11] :='6/8'; TekstTbleT[12] :='7/8';
TekstTbleT[13] :='8/8'; TekstTbleT[14] :='1/8'; TekstTblet[15] :='2/8';
TekstTbleT[16] :='3/8'; TekstTbleT[17] :='4/8';
//**********************************************************
// Tekenwerk
// Plaatsen SpeedLines
If SpeedLnsUp Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[3],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[11],Prijslijn[3],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[11],Prijslijn[3],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[11],Prijslijn[3],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[5],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[11],Prijslijn[9],1,10,1);
End;
If SpeedLnsDw Then
Begin
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[11],2, 3,1);
SpeedLns(TijdH2[5],TijdH2[11],Prijslijn[3],Prijslijn[11],1,10,2);
SpeedLns(TijdH2[5],TijdH2[ 9],Prijslijn[3],Prijslijn[11],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[ 7],Prijslijn[3],Prijslijn[11],1,10,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 9],1,10,2);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 7],1, 3,1);
SpeedLns(TijdH2[5],TijdH2[13],Prijslijn[3],Prijslijn[ 5],1,10,1);
End;
// Tekenen Mini-Murrey-Math Lines mMMTL
If MiniMurrey Then
Begin
For j:= 1 To 12 Do Begin
RHr3 :=((Prijslijn[j] + PrijsLijn[j+1])/2);
SpeedLns(TijdH2[1],TijdH2[17],RHr3,RHr3,1,KlrMiniMur,3);
End End;
// Tekenen Momentum lijnen omhoog
If MomentmUp Then Begin
For j:=1 to 9 Do
Begin
SpeedLns(TijdH2[4+j], TijdH2[1],Prijslijn[1],Prijslijn[4+j],1,KlrMiniMur,2);
End;
For j:=1 to 4 Do
Begin
SpeedLns(TijdH2[13+j],TijdH2[1+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:=1 To 11 Do
Begin
SpeedLns(TijdH2[17],TijdH2[5+j],Prijslijn[1+j], Prijslijn[13],1,KlrMiniMur,2);
End; End;
// Tekenen Momentum lijnen omlaag
If MomentmDwn Then Begin
For j:= 1 To 5 Do
Begin
SpeedLns(TijdH2[0+j],TijdH2[12+j],Prijslijn[1],Prijslijn[13],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[5+j],TijdH2[17],Prijslijn[1],Prijslijn[13-j],1,KlrMiniMur,2);
End;
For j:= 1 To 11 Do
Begin
SpeedLns(TijdH2[1], TijdH2[13-j],Prijslijn[1+j],Prijslijn[13],1,KlrMinimur,2);
End; End;
//Tekenen Tijd lijnen van het Frame.
For j:=1 to 17 Do Begin
With CreateTrendLine(TijdH2[j],Prijslijn[1],TijdH2[j],Prijslijn[13])DO
Begin
Color:= KleurSelec(ColorTbleT[j]);
If (j=5) Or (j=13) Then Width:=2;
DrawBehindChart:=True;
End; End;
// Plaatsen 'Circles of conflict'
Ellips(TijdH2[8],TijdH2[10],Prijslijn[6],PrijsLijn[8], KleurConc,2);
Q:=2;
For j:= 1 To 4 Do
Begin
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[4], PrijsLijn[6],KleurConc,1);
Ellips(TijdH2[Q],TijdH2[Q+2],PrijsLijn[8], PrijsLijn[10],KleurConc,1);
Q:=Q+4
End;
// Tekenen Prijslijnen van het Frame:
For j:= 1 to 13 Do Begin
With CreateTrendline(TijdH2[1],Prijslijn[j],TijdH2[17],Prijslijn[j]) Do
Begin
Color:= KleurSelec(ColorTbleP[j]);
If (j=3) Or (j=11) Then Width:= 2;
DrawBehindChart := True;
End; End;
// Plaatsen tekst Prijslijnen en extra tekst prijslijnen
For j:=1 to 12 Do
Begin
CreateText(TijdH2[16]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
If ExtraTextV Then
CreateText(TijdH2[ 9]+1,PrijsLijn[j],TekstTble[j]).Color:= KleurSelec(ColorTbleP[j]);
End;
// Plaatsen tekst tijdlijnen
For j:=1 to 15 Do
Begin
CreateText(TijdH2[j],Prijslijn[13],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
If ExtraText Then
CreateText(TijdH2[j],Prijslijn[ 7],TekstTbleT[j]).Color:= KleurSelec(ColorTbleT[j]);
End;
// Plaatsen lijn waarde
If Lijnwrde Then Begin
For j:=1 To 13 Do
Begin
WrdeTxt:=FormatFloat('0.00',(Round(Prijslijn[j]*100))/100);
If (FractlH=12.50) Then WrdeTxt:=FormatFloat('0.000',(Round(Prijslijn[j]*1000))/1000);
CreateText(TijdH2[17]+1,Prijslijn[j],WrdeTxt).Color:=KleurSelec(ColorTbleP[j]);
End; End;
{$IFDEF SCRIPTVERSION-4}
If tekston Then Begin
With CreateText(0,0,Instrument.ID+' MurreyMath '+ IntToStr(Trunc(Space))+' -Koers-Bar frame'+ ' www.JSTAS.com' ) Do
Begin
Y1Pct := Plaats;
X1Pct := 1;
VertPosition := vpTop;
Color:=KleurSelec(KlrTxt);
Font.Size:=8;
End; End;
{$ENDIF}
End.
LET OP !!
Omdat het tekenwerk lineair verloopt dient u logaritmische grafiek weergave UIT te schakelen.
Resetdatum moet elk jaar opnieuw worden ingegeven in de maand Oktober.
Neem contact op met jan@jstas.com wanneer u de nieuwe datum niet weet. |
---
Eric |
|
| Naar boven |
|
 |
|
|
Je mag geen nieuwe onderwerpen plaatsen Je mag geen reacties plaatsen Je mag je berichten niet bewerken Je mag je berichten niet verwijderen Ja mag niet stemmen in polls
|
Powered by phpBB © 2001, 2005 phpBB Group

|