http://www.jstas.com/2009/Dageljiks%20v ... fieken.htm
Teveel tijd besteed aan de uitleg omtrent Market Profile, daarom zo kort.
Grafiekje erbij:
Volg de grafiek, niet het idee.
.
Code: Selecteer alles
{- Filename: Bell-Trend -}
// naar een idee van Ron Black
// www.JSTAS.com
// Oktober-2010
// Versie 1.02
{*----------------------------------------------------------------------------*}
// Definïeren Functies en Procedures
{*----------------------------------------------------------------------------*}
{*-------------------------Definïeren B_Trend record -------------------------*}
Type
B_Trend = Record
HH,HL,LL,LH,SwLne : TSeries;
UpSw,hUpSw, BarUp,BarDown,BarZijw,
ColorUp,ColorDwn,ClrZijw, ClrNV,
Hpos,Vpos, TXTGrt : Integer;
NameInd ,Versie : Boolean;
End;
Var
BT : B_Trend;
//
{*----------------------------------------------------------------------------*}
{* ---Functie om een TColor te selecteren doormiddel van een Integer getal----*}
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;
//
{*----------------------------------------------------------------------------*}
{*--------------------------Create and Fill Series----------------------------*}
Procedure Create_Series();
Begin
BT.HH := FillSeries(CreateSeries(BarCount),0);
BT.LL := FillSeries(CreateSeries(BarCount),0);
BT.LH := FillSeries(CreateSeries(BarCount),0);
BT.HL := FillSeries(CreateSeries(BarCount),0);
BT.SwLne := CreateSeries(BarCount);
End;
//
{*----------------------------------------------------------------------------*}
{*----------------------------------User_Choices------------------------------*}
Procedure UserChoices();
Var
KleurKze: String;
Begin
KleurKze := '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
BT.Versie :=CreateParameterBoolean('Trendloos inkleuren?',True,False);
BT.ColorUp :=1+CreateParameterSelect('Geef Kleur UpSwing :',Kleurkze,6 ,False);
BT.ColorDwn:=1+CreateParameterSelect('Geef Kleur DownSwing:',Kleurkze,13,False);
BT.ClrZijw :=1+CreateParameterSelect('Geef Kleur Trendloos:',Kleurkze,2 ,False);
BT.BarUp :=1+CreateParameterSelect('Geef Kleur Bar-Up :',Kleurkze,6 ,False);
BT.BarDown :=1+CreateParameterSelect('Geef Kleur Bar-Down :',Kleurkze,13,False);
BT.BarZijw :=1+CreateParameterSelect('Geef Kleur Trendloos:',Kleurkze,2 ,False);
BT.NameInd :=CreateParameterBoolean ('Naam indicator weergeven?',True,False);
BT.ClrNV :=1+CreateParameterSelect('Geef Kleur Vermelding:',Kleurkze,6 ,False);
BT.TXTGrt := CreateParameterInteger('Tekst formaat: ',8,12,9,False);
BT.Hpos := CreateParameterInteger('Horiz. pos. Vermelding:',1,99,1,False);
BT.Vpos := CreateParameterInteger('Vert. pos. Vermelding:',2,100,100,False);
End;
//
{*----------------------------------------------------------------------------*}
{*----------------------------------Startwaarden------------------------------*}
Procedure Startwaarden(i:Integer);
Begin
BT.HH[i] := H[i];
BT.LL[i] := L[i];
BT.LH[i] := H[i];
BT.HL[i] := L[i];
BT.hUpSw := 1;
End;
//
{*----------------------------------------------------------------------------*}
{*----------------------------------UpTrend-----------------------------------*}
Procedure UpTrend(i:integer);
Begin
If H[i] > BT.HH[i-1] Then BT.HH[i] := H[i]
Else BT.HH[i] := BT.HH[i-1];
If L[i] > BT.HL[i-1] Then BT.HL[i] := L[i]
Else BT.HL[i] := BT.HL[i-1];
BT.LH[i] := H[i] ;
If H[i] <BT.HL[i-1] Then
Begin
BT.hUpSw := 0;
BT.LL[i]:= L[i];
BT.LH[i]:= H[i];
End;
End;
//
{*----------------------------------------------------------------------------*}
{*---------------------------------DownTrend----------------------------------*}
Procedure DownTrend(i:Integer);
Begin
If (L[i] < BT.LL[i-1]) Then BT.LL[i] := L[i]
Else BT.LL[i] := BT.LL[i-1];
If (H[i] < BT.LH[i-1]) Then BT.LH[i] := H[i]
Else BT.LH[i] := BT.LH[i-1];
BT.HL[i] := L[i];
If L[i] > BT.LH[i-1] Then
Begin
BT.hUpSw :=1;
BT.HH[i] := H[i];
BT.HL[i] := L[i];
End;
End;
//
{*----------------------------------------------------------------------------*}
{*-----------------------------Vul-Swingline-serie----------------------------*}
Procedure FillSWLine(i:Integer);
Begin
If BT.UpSw = 1 Then
Begin
BT.SwLne[i] := BT.HL[i];
SetBarColor(0,i,KleurSelec(BT.ColorUp));
SetBarColor(1,i,KleurSelec(Bt.BarUp));
If BT.Versie Then
Begin
If(BT.HL[i])<=(BT.HL[i-1]) Then SetBarColor(0,i,KleurSelec(BT.ClrZijw));
If(BT.HL[i])<=(BT.HL[i-1]) Then SetBarColor(1,i,KleurSelec(BT.BarZijw));
End;
End;
If BT.UpSw = 0 Then
Begin
BT.SwLne[i] := BT.LH[i];
SetBarColor(0,i,KleurSelec(BT.ColorDwn));
SetBarColor(1,i,KleurSelec(BT.BarDown));
If BT.Versie THen
Begin
If(BT.LH[i] >= BT.LH[i-1]) Then SetBarColor(0,i,KleurSelec(BT.ClrZijw));
If(BT.LH[i] >= BT.LH[i-1]) Then SetBarColor(1,i,KleurSelec(BT.BarZijw));
End;
End;
End;
//
{*----------------------------------------------------------------------------*}
{*-------------------------------Teken-lijnen-----------------------------------*}
Procedure TekenLijn();
Begin
With CreateLine(BT.SwLne) Do
Begin
Color:= ClGray;
LineType := LTOpen;
Width :=2;
End;
End;
//
Procedure Tekenlijn2();
Begin
With CreateLineOHLC(O,H,L,C) Do
Begin
Width :=1;
Color := ClGray;
LineType := LtCandlestick;
End;
End;
//
{******************************************************************************}
{****************** Naam Indicator en aandeel-index vermelding ****************}
Procedure NaamVermeld();
Begin
{ $IFDEF SCRIPTVERSION-4}
With CreateText(0,0,Instrument.ID + ' Bell-trend ') Do
Begin
Y1PCT := BT.Vpos;
X1Pct := BT.Hpos;
Color := KleurSelec(BT.ClrNV);
Font.Size := BT.TXTGrt;
End;
{ENDIF}
End;
//
{*----------------------------------------------------------------------------*}
{*----------Koppelt de Functies en Procudures en User-Choices-----------------*}
Procedure BC_Trend();
Var
i : Integer;
Begin
Indicator.NewBand := False;
Indicator.ScaleRange:= SrCommon;
Create_Series();
UserChoices();
For i := 1 To BarCount-1 Do
Begin
If i=1 Then
Begin
Startwaarden(i);
End;
//
If (i>1) Then
Begin
If (BT.UpSw=1) Then UpTrend(i);
If (BT.UpSw=0) Then DownTrend(i);
FillSWLine(i)
End;
BT.UpSw := BT.hUpSw;
End;
TekenLijn();
Tekenlijn2();
If BT.NameInd Then NaamVermeld();
End;
//
{*----------------------------------------------------------------------------*}
{*-----------------------------HoofdProgramma---------------------------------*}
Begin
BC_Trend();
End.
*
**
***
!!!!!!!!!!!!!!!!!!!
**
Bovenstaand stukje ta-code geeft alleen de riching van de trend weer.
Deze code is opgezet als ondersteuning van het stukje omtrent de Bell_curve.
Ga -- AUB -- NIET handelen op basis van deze indicator alleen...
Er zit geen Moneymanagement in verwerkt ...
Er zit geen StopLoss in verwerkt ....
Niet doen dus !!
Handel nooit alleen op 1 - indicator ...
The Draw-down van deze indic. kan de waarde van uw portefeuille te boven gaan !!
Doe het dus niet !!
Volg altijd meerdere indicatoren !
.
Jan@JSTAS.com
.
Code: Selecteer alles
{- Filename: Bell-Trend -}
// naar een idee van Ron Black
// www.JSTAS.com
// Oktober-2010
// Versie 1.03
{*----------------------------------------------------------------------------*}
// Definïeren Functies en Procedures
{*----------------------------------------------------------------------------*}
{*-------------------------Definïeren B_Trend record -------------------------*}
Type
B_Trend = Record
HH,HL,LL,LH,SwLne : TSeries;
UpSw,hUpSw, BarUp,BarDown,BarZijw,
ColorUp,ColorDwn,ClrZijw, ClrNV,
Hpos,Vpos, TXTGrt : Integer;
NameInd ,Versie, Inkleur : Boolean;
End;
Var
BT : B_Trend;
//
{*----------------------------------------------------------------------------*}
{* ---Functie om een TColor te selecteren doormiddel van een Integer getal----*}
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;
//
{*----------------------------------------------------------------------------*}
{*--------------------------Create and Fill Series----------------------------*}
Procedure Create_Series();
Begin
BT.HH := FillSeries(CreateSeries(BarCount),0);
BT.LL := FillSeries(CreateSeries(BarCount),0);
BT.LH := FillSeries(CreateSeries(BarCount),0);
BT.HL := FillSeries(CreateSeries(BarCount),0);
BT.SwLne := CreateSeries(BarCount);
End;
//
{*----------------------------------------------------------------------------*}
{*----------------------------------User_Choices------------------------------*}
Procedure UserChoices();
Var
KleurKze: String;
Begin
KleurKze := '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
BT.Versie :=CreateParameterBoolean('Trendloos inkleuren?',True,False);
BT.ColorUp :=1+CreateParameterSelect('Geef Kleur UpSwing :',Kleurkze,6 ,False);
BT.ColorDwn:=1+CreateParameterSelect('Geef Kleur DownSwing:',Kleurkze,13,False);
BT.ClrZijw :=1+CreateParameterSelect('Geef Kleur Trendloos:',Kleurkze,2 ,False);
BT.Inkleur := CreateParameterBoolean('Koersbars inkleuren?:',True,False);
BT.BarUp :=1+CreateParameterSelect('Geef Kleur Bar-Up :',Kleurkze,6 ,False);
BT.BarDown :=1+CreateParameterSelect('Geef Kleur Bar-Down :',Kleurkze,13,False);
BT.BarZijw :=1+CreateParameterSelect('Geef Kleur Trendloos:',Kleurkze,2 ,False);
BT.NameInd :=CreateParameterBoolean ('Naam indicator weergeven?',True,False);
BT.ClrNV :=1+CreateParameterSelect('Geef Kleur Vermelding:',Kleurkze,6 ,False);
BT.TXTGrt := CreateParameterInteger('Tekst formaat: ',8,12,9,False);
BT.Hpos := CreateParameterInteger('Horiz. pos. Vermelding:',1,99,1,False);
BT.Vpos := CreateParameterInteger('Vert. pos. Vermelding:',2,100,100,False);
End;
//
{*----------------------------------------------------------------------------*}
{*----------------------------------Startwaarden------------------------------*}
Procedure Startwaarden(i:Integer);
Begin
BT.HH[i] := H[i];
BT.LL[i] := L[i];
BT.LH[i] := H[i];
BT.HL[i] := L[i];
BT.hUpSw := 1;
End;
//
{*----------------------------------------------------------------------------*}
{*----------------------------------UpTrend-----------------------------------*}
Procedure UpTrend(i:integer);
Begin
If H[i] > BT.HH[i-1] Then BT.HH[i] := H[i]
Else BT.HH[i] := BT.HH[i-1];
If L[i] > BT.HL[i-1] Then BT.HL[i] := L[i]
Else BT.HL[i] := BT.HL[i-1];
BT.LH[i] := H[i] ;
If H[i] <BT.HL[i-1] Then
Begin
BT.hUpSw := 0;
BT.LL[i]:= L[i];
BT.LH[i]:= H[i];
End;
End;
//
{*----------------------------------------------------------------------------*}
{*---------------------------------DownTrend----------------------------------*}
Procedure DownTrend(i:Integer);
Begin
If (L[i] < BT.LL[i-1]) Then BT.LL[i] := L[i]
Else BT.LL[i] := BT.LL[i-1];
If (H[i] < BT.LH[i-1]) Then BT.LH[i] := H[i]
Else BT.LH[i] := BT.LH[i-1];
BT.HL[i] := L[i];
If L[i] > BT.LH[i-1] Then
Begin
BT.hUpSw :=1;
BT.HH[i] := H[i];
BT.HL[i] := L[i];
End;
End;
//
{*----------------------------------------------------------------------------*}
{*--------------------------Vul-Kleur Swingline-serie-------------------------*}
Procedure FillSWLine(i:Integer);
Begin
If BT.UpSw = 1 Then
Begin
BT.SwLne[i] := BT.HL[i];
SetBarColor(0,i,KleurSelec(BT.ColorUp));
If BT.Inkleur Then SetParentBarColor(i,KleurSelec(BT.BarUp));
If BT.Versie Then
Begin
If(BT.HL[i])<=(BT.HL[i-1]) Then SetBarColor(0,i,KleurSelec(BT.ClrZijw));
If BT.Inkleur Then
Begin
If(BT.HL[i])<=(BT.HL[i-1]) Then SetParentBarColor(i,KleurSelec(BT.BarZijw));
End;
End;
End;
If BT.UpSw = 0 Then
Begin
BT.SwLne[i] := BT.LH[i];
SetBarColor(0,i,KleurSelec(BT.ColorDwn));
If BT.Inkleur Then SetParentBarColor(i,KleurSelec(BT.BarDown));
If BT.Versie Then
Begin
If(BT.LH[i] >= BT.LH[i-1]) Then SetBarColor(0,i,KleurSelec(BT.ClrZijw));
If BT.Inkleur Then
Begin
If(BT.LH[i] >= BT.LH[i-1]) Then SetParentBarColor(i,KleurSelec(BT.BarZijw));
End;
End;
End;
End;
//
{*----------------------------------------------------------------------------*}
{*-------------------------------Teken-lijnen-----------------------------------*}
Procedure TekenLijn();
Begin
With CreateLine(BT.SwLne) Do
Begin
Color:= ClGray;
LineType := LTOpen;
Width :=2;
End;
End;
//
{******************************************************************************}
{****************** Naam Indicator en aandeel-index vermelding ****************}
Procedure NaamVermeld();
Begin
{ $IFDEF SCRIPTVERSION-4}
With CreateText(0,0,Instrument.ID + ' Bell-trend ') Do
Begin
Y1PCT := BT.Vpos;
X1Pct := BT.Hpos;
Color := KleurSelec(BT.ClrNV);
Font.Size := BT.TXTGrt;
End;
{ENDIF}
End;
//
{*----------------------------------------------------------------------------*}
{*----------Koppelt de Functies en Procudures en User-Choices-----------------*}
Procedure BC_Trend();
Var
i : Integer;
Begin
Indicator.NewBand := False;
Indicator.ScaleRange:= SrCommon;
Create_Series();
UserChoices();
For i := 1 To BarCount-1 Do
Begin
If i=1 Then
Begin
Startwaarden(i);
End;
//
If (i>1) Then
Begin
If (BT.UpSw=1) Then UpTrend(i);
If (BT.UpSw=0) Then DownTrend(i);
FillSWLine(i)
End;
BT.UpSw := BT.hUpSw;
End;
TekenLijn();
If BT.NameInd Then NaamVermeld();
End;
//
{*----------------------------------------------------------------------------*}
{*-----------------------------HoofdProgramma---------------------------------*}
Begin
BC_Trend();
End.
*
**
***
!!!!!!!!!!!!!!!!!!!
**
Bovenstaand stukje ta-code geeft alleen de riching van de trend weer.
Deze code is opgezet als ondersteuning van het stukje omtrent de Bell_curve.
Ga -- AUB -- NIET handelen op basis van deze indicator alleen...
Er zit geen Moneymanagement in verwerkt ...
Er zit geen StopLoss in verwerkt ....
Niet doen dus !!
Handel nooit alleen op 1 - indicator ...
The Draw-down van deze indic. kan de waarde van uw portefeuille te boven gaan !!
Doe het dus niet !!
Volg altijd meerdere indicatoren !
.
Jan@JSTAS.com
.
Code: Selecteer alles
{- Filename: Rainbow -}
{ Rainbow }
{ naar een idee van Mel Widner }
{ www.JSTAS.com }
{ *****************************************************************************}
Type
T_Rainbow = Record
MA1,MA2,MA3,MA4,MA5,MA6,MA7,MA8,MA9,MA10 : TSeries;
MaT : Integer;
CLMa1,CLMa2,CLMa3,CLMa4,CLMa5,CLMa6,CLMa7,CLMa8,CLMa9,CLMa10 : Integer;
End;
Var
RB: T_Rainbow;
{******************************************************************************}
{* ---Functie om een TColor te selecteren doormiddel van een Integer getal----*}
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(255,127,39);
else
Result := clGray;
end;
End;
//
{******************************************************************************}
{****************** MA-type selectie ******************************************}
Function MaSelec(Selec:Integer):TMaType;
Begin
Case Selec Of
0 : Result := MaSimple;
1 : Result := MaWeighted;
2 : Result := MaExponential;
End;
End;
//
{*----------------------------------------------------------------------------*}
{*********************** Indicator eigenschappen ******************************}
Procedure Indic_Waarden();
Begin
With Indicator DO
Begin
ScaleRange := SrCommon;
NewBand := False;
End;
End;
//
{*****************************************************************************}
{******************Fill Series ***********************************************}
Procedure vulseries();
Begin
RB.MA1 := MA( c,MaSelec(RB.MaT),2);
RB.MA2 := MA(RB.MA1,MaSelec(RB.MaT),2);
RB.MA3 := MA(RB.MA2,MaSelec(RB.MaT),2);
RB.MA4 := MA(RB.MA3,MaSelec(RB.MaT),2);
RB.MA5 := MA(RB.MA4,MaSelec(RB.MaT),2);
RB.MA6 := MA(RB.MA5,MaSelec(RB.MaT),2);
RB.MA7 := MA(RB.MA6,MaSelec(RB.MaT),2);
RB.MA8 := MA(RB.MA7,MaSelec(RB.MaT),2);
RB.MA9 := MA(RB.MA8,MaSelec(RB.MaT),2);
RB.MA10 := MA(RB.MA9,MaSelec(RB.MaT),2);
End;
//
{******************************************************************************}
{************************ weergave lijnen**************************************}
Procedure Weergave(Lijn:TSeries; Kleur, Lijnwrd, LineW : Integer);
Var
i: Integer;
Begin
With CreateLine(Lijn) Do
Begin
Color:= ClGray;
Width:= LineW;
End;
For i := FirstValidIndex(Lijn) to BarCount-1 Do
Begin
SetBarColor(Lijnwrd-1,i,KleurSelec(Kleur));
End;
End;
//
{******************************************************************************}
{**********************Gebruiker keuzes ***************************************}
Procedure UserChoices();
Var
KleurKze, MaKeuzes : String;
Begin
MaKeuzes := 'Gewoon' #9
'Gewogen' #9
'Exponentieel' ;
KleurKze := '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
'Orange' ;
RB.MaT:= CreateParameterSelect('Welk type gemiddelde :',MaKeuzes,0,False);
RB.CLMa1 :=1+CreateParameterSelect('Kleur van MA-1 :',KleurKze,13,False);
RB.CLMa2 :=1+CreateParameterSelect('Kleur van MA-2 :',KleurKze,18,False);
RB.CLMa3 :=1+CreateParameterSelect('Kleur van MA-3 :',KleurKze,17,False);
RB.CLMa4 :=1+CreateParameterSelect('Kleur van MA-4 :',KleurKze,7 ,False);
RB.CLMa5 :=1+CreateParameterSelect('Kleur van MA-5 :',KleurKze,6 ,False);
RB.CLMa6 :=1+CreateParameterSelect('Kleur van MA-6 :',KleurKze,15,False);
RB.CLMa7 :=1+CreateParameterSelect('Kleur van MA-7 :',KleurKze,0 ,False);
RB.CLMa8 :=1+CreateParameterSelect('Kleur van MA-8 :',KleurKze, 2,False);
RB.CLMa9 :=1+CreateParameterSelect('Kleur van MA-9 :',KleurKze,10,False);
RB.CLMa10:=1+CreateParameterSelect('Kleur van MA-10:',KleurKze,12,False);
End;
//
{******************************************************************************}
{******************** Koppelen procedures *************************************}
Procedure Rainbow();
Begin
Indic_Waarden();
UserChoices()
vulseries();
Weergave(RB.MA1 , RB.CLMa1 ,1, 3 );
Weergave(RB.MA2 , RB.CLMa2 ,2, 2 );
Weergave(RB.MA3 , RB.CLMa3 ,3, 2 );
Weergave(RB.MA4 , RB.CLMa4 ,4, 2 );
Weergave(RB.MA5 , RB.CLMa5 ,5, 2 );
Weergave(RB.MA6 , RB.CLMa6 ,6, 2 );
Weergave(RB.MA7 , RB.CLMa7 ,7, 2 );
Weergave(RB.MA8 , RB.CLMa8 ,8, 2 );
Weergave(RB.MA9 , RB.CLMa9 ,9, 2 );
Weergave(RB.MA10, RB.CLMa10,10,2 );
End;
//
{******************************************************************************}
{************************** Hoofdprogramma*************************************}
Begin
Rainbow();
End.
////////////////////////////////////////////////////////////////////////////////
Code: Selecteer alles
{- Filename: Rainbow -}
{ Rainbow }
{ naar een idee van Mel Widner }
{ www.JSTAS.com }
{ *****************************************************************************}
Type
T_Rainbow = Record
MA1,MA2,MA3,MA4,MA5,MA6,MA7,MA8,MA9,MA10 : TSeries;
MaT,CLMa1,CLMa2,CLMa3 : Integer;
CLMa4,CLMa5,CLMa6,CLMa7,CLMa8,CLMa9,CLMa10 : Integer;
End;
Var
RB: T_Rainbow;
{******************************************************************************}
{* ---Functie om een TColor te selecteren doormiddel van een Integer getal----*}
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(255,127,39);
else
Result := clGray;
end;
End;
//
{******************************************************************************}
{****************** MA-type selectie ******************************************}
Function MaSelec(Selec:Integer):TMaType;
Begin
Case Selec Of
0 : Result := MaSimple;
1 : Result := MaWeighted;
2 : Result := MaExponential;
End;
End;
//
{*----------------------------------------------------------------------------*}
{*********************** Indicator eigenschappen ******************************}
Procedure Indic_Waarden();
Begin
With Indicator DO
Begin
ScaleRange := SrCommon;
NewBand := False;
End;
End;
//
{*****************************************************************************}
{******************Fill Series ***********************************************}
Procedure vulseries();
Begin
RB.MA1 := MA( c,MaSelec(RB.MaT),2);
RB.MA2 := MA(RB.MA1,MaSelec(RB.MaT),2);
RB.MA3 := MA(RB.MA2,MaSelec(RB.MaT),2);
RB.MA4 := MA(RB.MA3,MaSelec(RB.MaT),2);
RB.MA5 := MA(RB.MA4,MaSelec(RB.MaT),2);
RB.MA6 := MA(RB.MA5,MaSelec(RB.MaT),2);
RB.MA7 := MA(RB.MA6,MaSelec(RB.MaT),2);
RB.MA8 := MA(RB.MA7,MaSelec(RB.MaT),2);
RB.MA9 := MA(RB.MA8,MaSelec(RB.MaT),2);
RB.MA10 := MA(RB.MA9,MaSelec(RB.MaT),2);
End;
//
{******************************************************************************}
{************************ weergave lijnen**************************************}
Procedure Weergave(Lijn:TSeries; Kleur, Lijnwrd, LineW : Integer);
Var
i: Integer;
Begin
With CreateLine(Lijn) Do
Begin
Color:= ClGray;
Width:= LineW;
End;
For i := FirstValidIndex(Lijn) to BarCount-1 Do
Begin
SetBarColor(Lijnwrd-1,i,KleurSelec(Kleur));
End;
End;
//
{******************************************************************************}
{**********************Gebruiker keuzes ***************************************}
Procedure UserChoices();
Var
KleurKze, MaKeuzes : String;
Begin
MaKeuzes := 'Gewoon' #9
'Gewogen' #9
'Exponentieel' ;
KleurKze := '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
'Orange' ;
RB.MaT:= CreateParameterSelect('Welk type gemiddelde :',MaKeuzes,0,False);
RB.CLMa1 :=1+CreateParameterSelect('Kleur van MA-1 :',KleurKze,13,False);
RB.CLMa2 :=1+CreateParameterSelect('Kleur van MA-2 :',KleurKze,18,False);
RB.CLMa3 :=1+CreateParameterSelect('Kleur van MA-3 :',KleurKze,17,False);
RB.CLMa4 :=1+CreateParameterSelect('Kleur van MA-4 :',KleurKze,7 ,False);
RB.CLMa5 :=1+CreateParameterSelect('Kleur van MA-5 :',KleurKze,6 ,False);
RB.CLMa6 :=1+CreateParameterSelect('Kleur van MA-6 :',KleurKze,15,False);
RB.CLMa7 :=1+CreateParameterSelect('Kleur van MA-7 :',KleurKze,0 ,False);
RB.CLMa8 :=1+CreateParameterSelect('Kleur van MA-8 :',KleurKze, 2,False);
RB.CLMa9 :=1+CreateParameterSelect('Kleur van MA-9 :',KleurKze,10,False);
RB.CLMa10:=1+CreateParameterSelect('Kleur van MA-10:',KleurKze,12,False);
End;
//
{******************************************************************************}
{******************** Koppelen procedures *************************************}
Procedure Rainbow();
Begin
Indic_Waarden();
UserChoices()
vulseries();
Weergave(RB.MA1 , RB.CLMa1 ,1, 2 );
Weergave(RB.MA2 , RB.CLMa2 ,2, 1 );
Weergave(RB.MA3 , RB.CLMa3 ,3, 1 );
Weergave(RB.MA4 , RB.CLMa4 ,4, 1 );
Weergave(RB.MA5 , RB.CLMa5 ,5, 1 );
Weergave(RB.MA6 , RB.CLMa6 ,6, 1 );
Weergave(RB.MA7 , RB.CLMa7 ,7, 1 );
Weergave(RB.MA8 , RB.CLMa8 ,8, 1 );
Weergave(RB.MA9 , RB.CLMa9 ,9, 1 );
Weergave(RB.MA10, RB.CLMa10,10,1 );
End;
//
{******************************************************************************}
{************************** Hoofdprogramma*************************************}
Begin
Rainbow();
End.
////////////////////////////////////////////////////////////////////////////////
Code: Selecteer alles
{- Filename: Rainbow-Osc -}
{ Rainbow - Oscillator }
{ naar een idee van Mel Widner }
{ Vertaling: www.JSTAS.com }
{ *****************************************************************************}
Type
T_Rainbow = Record
High,Low,MaxC,MinC,TotalAVG,BandPl,BandMin,RO : TSeries;
SMA : Array [0..10] of TSeries;
SC : Array [1..11] of TSeries;
MaT,clUB,clLB,clOU,clOD,clZ0,RfO,RfB,ClRf,RLT : Integer;
RefUp,RefDwn : Tseries;
End;
Var
RB: T_Rainbow;
{******************************************************************************}
{* ---Functie om een TColor te selecteren doormiddel van een Integer getal----*}
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(255,127,39);
else
Result := clGray;
end;
End;
//
{******************************************************************************}
{****************** MA-type selectie ******************************************}
Function MaSelec(Selec:Integer):TMaType;
Begin
Case Selec Of
0 : Result := MaSimple;
1 : Result := MaWeighted;
2 : Result := MaExponential;
End;
End;
//
{*----------------------------------------------------------------------------*}
{*********************** Indicator eigenschappen ******************************}
Procedure Indic_Waarden();
Begin
With Indicator DO
Begin
NewBand := True;
RequiredBars := 20;
End;
End;
//
{******************************************************************************}
{************************** Hoog_laag-Series **********************************}
procedure
HighLowSeries(SeriesAr: array of TSeries; var HighSeries, LowSeries: TSeries);
var
BarCount, SCount, i, j: integer;
begin
SCount := GetArrayLength(SeriesAr);
if SCount = 0 then Exit;
BarCount := GetArrayLength(SeriesAr[0]);
HighSeries := CreateSeries(BarCount);
LowSeries := CreateSeries(BarCount);
for i:=0 to BarCount-1 do
begin
HighSeries[i] := SeriesAr[0][i];
LowSeries[i] := SeriesAr[0][i];
for j:=1 to SCount-1 do
begin
if IsValid(SeriesAr[j][i]) then
begin
if SeriesAr[j][i] > HighSeries[i] then HighSeries[i] := SeriesAr[j][i];
if SeriesAr[j][i] < LowSeries[i] then LowSeries[i] := SeriesAr[j][i];
end;
end;
end;
end;
//
{******************************************************************************}
{**************** Het gemiddelde van X-aantal-series***************************}
function AvgSeries(SeriesAr: array of TSeries; MAType: TMAType): TSeries;
var
BarCount, SCount, i, j: integer;
TmpSeries: TSeries;
begin
SCount := GetArrayLength(SeriesAr);
if SCount = 0 then Exit;
BarCount := GetArrayLength(SeriesAr[0]);
Result := CreateSeries(BarCount);
TmpSeries := CreateSeries(SCount);
for i:=0 to BarCount-1 do
begin
for j:=0 to SCount-1 do TmpSeries[j] := SeriesAr[j][i];
TmpSeries := MA(TmpSeries, MAType, SCount);
Result[i] := TmpSeries[SCount-1];
end;
end;
//
{*****************************************************************************}
{******************Fill Series ***********************************************}
Procedure vulseries();
Begin
RB.SMA[0] := Close ;
RB.SMA[1] := MA( Close,MaSelec(RB.MaT),2);
RB.SMA[2] := MA(RB.SMA[1],MaSelec(RB.MaT),2);
RB.SMA[3] := MA(RB.SMA[2],MaSelec(RB.MaT),2);
RB.SMA[4] := MA(RB.SMA[3],MaSelec(RB.MaT),2);
RB.SMA[5] := MA(RB.SMA[4],MaSelec(RB.MaT),2);
RB.SMA[6] := MA(RB.SMA[5],MaSelec(RB.MaT),2);
RB.SMA[7] := MA(RB.SMA[6],MaSelec(RB.MaT),2);
RB.SMA[8] := MA(RB.SMA[7],MaSelec(RB.MaT),2);
RB.SMA[9] := MA(RB.SMA[8],MaSelec(RB.MaT),2);
RB.SMA[10] := MA(RB.SMA[9],MaSelec(RB.MaT),2);
RB.SC[1 ] := Close ;
RB.SC[2 ] := ShiftSeries(Close,1);
RB.SC[3 ] := ShiftSeries(Close,2);
RB.SC[4 ] := ShiftSeries(Close,3);
RB.SC[5 ] := ShiftSeries(Close,4);
RB.SC[6 ] := ShiftSeries(Close,5);
RB.SC[7 ] := ShiftSeries(Close,6);
RB.SC[8 ] := ShiftSeries(Close,7);
RB.SC[9 ] := ShiftSeries(Close,8);
RB.SC[10] := ShiftSeries(Close,9);
RB.SC[11] := ShiftSeries(Close,10);
HighLowSeries(RB.SMA,RB.High,RB.Low);
HighLowSeries(RB.SC,RB.MaxC,RB.MinC);
RB.BandPl:=MultiplySeriesBy((DivideSeries((SubtractSeries(RB.High,RB.Low)),
(SubtractSeries(RB.MaxC,RB.MinC)))),100.0);
RB.BandMin := MultiplySeriesBy(RB.BandPl,-1.0);
RB.TotalAVG := AvgSeries(RB.SMA,MaSelec(RB.MaT));
RB.RO:= MultiplySeriesBy( (DivideSeries(SubtractSeries(Close,RB.TotalAVG),
SubtractSeries(RB.MaxC,RB.MinC))),100.0);
RB.RefUp := FillSeries((CreateSeries(BarCount)),RB.RfB);
RB.RefDwn:= FillSeries((CreateSeries(BarCount)),RB.RfO*-1.0);
End;
//
{******************************************************************************}
{*************************** weergave lijnen **********************************}
Procedure Weergave(Lijn:TSeries; Kleur, Lijnwrd, Lijntype : Integer);
Var
i: Integer;
Begin
With CreateLine(Lijn) Do
Begin
Color:= ClGray;
If (Lijntype=1) Then LineType := LTBar;
If (Lijntype=2) Then LineType := LTDot;
End;
For i := FirstValidIndex(Lijn) to BarCount-1 Do
Begin
SetBarColor(Lijnwrd,i,KleurSelec(Kleur));
If (Lijn[i] <0.0) And (Lijnwrd=2) Then
SetBarColor (Lijnwrd,i,KleurSelec(RB.clOD));
End;
End;
//
{******************************************************************************}
{**********************Gebruiker keuzes ***************************************}
Procedure UserChoices();
Var
KleurKze, MaKeuzes :String;
Begin
MaKeuzes := 'Gewoon' #9
'Gewogen' #9
'Exponentieel' ;
KleurKze := '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
'Orange' ;
RB.MaT:= CreateParameterSelect('Welk type gemiddelde :',MaKeuzes,0,False);
RB.clUB:=1+CreateParameterSelect('Kleur van de Upper-band:',KleurKze,6 ,False);
RB.clLB:=1+CreateParameterSelect('Kleur van de Lower-band:',KleurKze,13,False);
RB.clOU:=1+CreateParameterSelect('Kleur Oscillator Positief:',KleurKze,6,False);
RB.clOD:=1+CreateParameterSelect('Kleur oscillator Negatief:',KleurKze,13,False);
RB.ClZ0:=1+CreateParameterSelect('Kleur van de Nullijn:',KleurKze,2,False);
RB.RfB := CreateParameterInteger('Geef % bovenste Ref.lijn:',0,100,23,False);
RB.RfO := CreateParameterInteger('Geef % onderste Ref.lijn:',0,100,23,False);
RB.ClRf:=1+CreateParameterSelect('Kleur van de Ref. lijn:',KleurKze,3,False);
End;
//
{******************************************************************************}
{******************** Koppelen procedures *************************************}
Procedure RainbowOsc();
Begin
Indic_Waarden();
UserChoices();
vulseries();
Weergave(RB.BandPl ,RB.clUB,0,0);
Weergave(RB.BandMin,RB.clLB,1,0);
Weergave(RB.RO,RB.clOU,2,1);
Weergave(FillSeries(CreateSeries(Barcount),0),RB.clZ0,3,0);
Weergave(RB.RefUp,RB.clRf,4,2);
Weergave(RB.RefDwn,RB.clRF,5,2);
End;
//
{******************************************************************************}
{************************** Hoofdprogramma*************************************}
Begin
RainbowOsc();
End.
////////////////////////////////////////////////////////////////////////////////
.
Bovenstaand stukje code is de oscillator van de Rainbow code, welke gebruikt
kan worden samen met de Rainbow code.
.
.