probleempje

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Jannes
Berichten: 22
Lid geworden op: zo aug 13, 2006 8:11 pm

probleempje

Bericht door Jannes » do sep 14, 2006 12:33 am

Wie wil me even helpen, ik krijg het volgende niet voor elkaar, en zeer waarschijnlijk zal de for lus vervangen moeten worden door iets anders, maar 't lukt me effe niet.
Ik heb even een kleine opzet gemaakt:

Code: Selecteer alles

Var
  calc1,calc2,calc3 :Tseries;
  i: integer;
begin
  Calc1 := CreateSeries(Barcount);
  Calc2 := CreateSeries(Barcount);
  Calc3 := CreateSeries(Barcount);
    for i:=0 to (barcount-1) do
      calc3[i] := H[i]*0;

  i:=0;

for i:=0 to (barcount-1) do
  Begin
     Calc1[i] := (H[i]+L[i])/2 ;
     Calc2[i] := Calc1[i] *(Calc3[i]+0.5);
     
     if calc1[i] >400 then calc1[i]:=400;
     if calc1[i] <300 then calc1[i]:=300;
     
     Calc3[i] :=(Calc1[i]/300);
     if calc3[i] > 1.2 then calc3[1] :=1.2;
  End;
    
 With indicator do
  Begin
    Shortname := 'probeersel';
  End;
  
 With CreateLine(calc1) do
  Begin
    Color :=ClRed;
  End;
 With CreateLine(calc2) Do
  Begin
    Color :=ClYellow;
  End;

end.
Waar het nu omgaat, is dat Calc2 berekend moet worden uit calc1 en uit calc3.
Calc3 heeft al startwaarde 0, en wordt even later berekend uit calc1 .
Echter de lus zoals die nu is, voert voor calc2 de berekening uit met voor calc3 de waarde 0 en houdt daarna geen rekening meer met de gewijzigde waarde voor calc3.
Iemand een idee hoe ik dit oplos?
Bij voorbaat dank,
Jan ;)

Eric
Berichten: 2936
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: probleempje

Bericht door Eric » do sep 14, 2006 9:18 am

Jannes schreef:Waar het nu omgaat, is dat Calc2 berekend moet worden uit calc1 en uit calc3.
Calc3 heeft al startwaarde 0, en wordt even later berekend uit calc1 .
Echter de lus zoals die nu is, voert voor calc2 de berekening uit met voor calc3 de waarde 0 en houdt daarna geen rekening meer met de gewijzigde waarde voor calc3.


Je kan de berekening van Calc2 naturlijk als laatste doen, maar ik heb het idee dat dit niet de oplossing is...

Code: Selecteer alles

  for i:=0 to (barcount-1) do
  Begin 
     Calc1[i] := (H[i]+L[i])/2 ; 
     if calc1[i] >400 then calc1[i]:=400;
     if calc1[i] <300 then calc1[i]:=300;

     Calc3[i] :=(Calc1[i]/300);
     if calc3[i] > 1.2 then calc3[1] :=1.2;

     Calc2[i] := Calc1[i] *(Calc3[i]+0.5);
  End;
---
Eric

gldr
Berichten: 10
Lid geworden op: di mar 14, 2006 8:07 pm

Bericht door gldr » do sep 14, 2006 9:51 am

Volgens mij zit het probleem in the regels onder de Calc3 createseries want daar vul je calc3 voor alle i met 0. Dit moet je niet doen.

Jannes
Berichten: 22
Lid geworden op: zo aug 13, 2006 8:11 pm

Bericht door Jannes » do sep 14, 2006 12:06 pm

Misschien moet ik het anders formuleren;
Stel het huidige record is 20
Record 21 moet dan berekend worden met de laatst berekende waarde van calc3, dus de bewerking moet weer vanaf "begin" starten.
Dus eigenlijk de bewerkingen in zijn totaliteit uitvoeren per record, dan weer een record opschuiven, weer de berekeningen uitvoeren, en dan net zolang totdat alle records bewerkt zijn.
Op dit moment, in mijn opzetje, wordt de berekende waarde van calc3 nooit verwerkt in calc2.
In easylanguage werkte dit vanzelf, omdat die taal record voor record afwerkt.
Dat moet toch ook kunnen in ta-script zou je dan denken.
Groet,
Jan.

Eric
Berichten: 2936
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Bericht door Eric » do sep 14, 2006 12:16 pm

Je kunt de vorige waarde benaderen met Calc[i-1]. Omdat je begint met i=0 en steeds omhoog gaat, is de waarde van Calc[i-1] in de vorige lus al berekend. Stel je wilt Calc1 het gemiddelde van High en Low maken, en Calc2 het gemiddelde van Calc1 van vandaag en gisteren, dan doe je:

Code: Selecteer alles

for i:=0 to BarCount-1 do
begin
  Calc1[i] := (High[i] + Low[i]) /2; 
  if i > 0 then Calc2[i] := (Calc1[i] + Calc1[i-1]) / 2;
end;
---
Eric

PaulM
Berichten: 431
Lid geworden op: do apr 06, 2006 11:56 pm
Locatie: Enschede

Bericht door PaulM » do sep 14, 2006 12:32 pm

Code: Selecteer alles

{- Filename: Jannes -}

Var
  calc1,calc2,calc3 :real;
  xcalc1,xcalc2,xcalc3 :TSeries;
  i: integer;
begin
  xCalc1 := CreateSeries(Barcount);
  xCalc2 := CreateSeries(Barcount);
  xCalc3 := CreateSeries(Barcount);

for i:=0 to (barcount-1) do
  Begin
     Calc1 := (H[i]+L[i])/2 ;
     Calc2 := Calc1 *(Calc3+0.5);

     if calc1 >400 then calc1:=400;
     if calc1 <300 then calc1:=300;

     Calc3 :=(Calc1/300);
     if calc3 > 1.2 then calc3 :=1.2;
     xCalc1[i]:=Calc1;
     xCalc2[i]:=Calc2;
     xCalc3[i]:=Calc3;
  End;

 With indicator do
  Begin
    Shortname := 'probeersel';
  End;

 With CreateLine(xcalc1) do
  Begin
    Color :=ClRed;
  End;
 With CreateLine(xcalc2) Do
  Begin
    Color :=ClYellow;
  End;

end.
Mvg,

Paul M

Jannes
Berichten: 22
Lid geworden op: zo aug 13, 2006 8:11 pm

Bericht door Jannes » do sep 14, 2006 1:28 pm

Bedankt voor de reacties, ik ga er vanavond weer even mee aan de gang, even zien of ik dit kan toepassen.
Vriendelijke groet,
Jan ;)

Jannes
Berichten: 22
Lid geworden op: zo aug 13, 2006 8:11 pm

Bericht door Jannes » di sep 19, 2006 2:34 am

Ik stel maar steeds vragen en vragen, en sommigen zullen denken: waar is die @#$#@ nu eigenlijk mee bezig :lol:
Wel, ik kan me iets redden in Clipper en iets in EasyLanguage, maar omdat ik heb gekozen voor WallStreet, en Wallstreet heeft gekozen voor TA-script, ben ik bezig met "vingeroefeningen" voor TA-script, en zoals zo vaak, alle begin is moelilijk.
Mijn opleiding heeft als grondslag electronica, en vanuit dat gezichtspunt benader ik veelal de grafieken.
Vandaar dat ik ook zeer gecharmeerd ben van het werk van J.F. ehlers, die veel electronica heeft toegepast bij zijn benadering van TA op de grafieken, en omdat ik altijd meen dat ik niet opnieuw het wiel hoef uit te vinden, maak ik ook in het hierna volgende geval gebruik van zijn werk.
*
De "beste" instelling voor een WMA is de halve-cycluslengte +1 leert de theorie.
Prima kruisingen voor gebruik met een een dual-wMA levert de combinatie met een 2-e WMA die de dubbele lengte heeft van de instelling van de eerste WMA.
*
Dat is het uitgangspunt wat ik heb gebruikt voor de hierna volgende benadering.
*
Voor de bepaling van de cycluslengte heb ik gebruik gemaakt van de Homodyne discriminator, omdat deze de beste gemiddelde benadering geeft, en voor de gemiddelde bepaling ben ik uit gegaan van het gewogen gemiddelde, omdat deze minimale lag combineert met een simpele berekening, en daar hou ik van als simpele boer :wink:

Code: Selecteer alles

Var
  Calc1,Calc2,Calc3,Calc5,Calc6,Calc7,Calc8,Calc9,Ber    :Real   ;
  Calc10,Calc11,Calc12,C1,C2,C3,Opt,Opt2,Dlf,Peri,Peri2  :Real   ;
  Dt,i,Ofset1,Multpl                                     :Integer;
  Scalc1,Scalc2,Scalc3,Scalc5,Scalc6,Scalc7              :Tseries;
  Scalc8,Scalc9,Scalc10,Scalc11,Scalc12,Swma,Swma2       :TSeries;
  Highk,Highk2                                           :Boolean;
begin
  With Indicator do Begin
      Newband    :=false;
      ScaleRange :=SrCommon;
    End;
  Scalc1 := FillSeries(CreateSeries(Barcount),1);
  Scalc2 := FillSeries(CreateSeries(Barcount),1);
  Scalc3 := FillSeries(CreateSeries(Barcount),1);
  Scalc5 := FillSeries(CreateSeries(Barcount),1);
  Scalc6 := FillSeries(CreateSeries(Barcount),1);
  Scalc7 := FillSeries(CreateSeries(Barcount),1);
  Scalc8 := FillSeries(CreateSeries(Barcount),1);
  Scalc9 := FillSeries(CreateSeries(Barcount),1);
  Scalc10:= FillSeries(CreateSeries(Barcount),1);
  Scalc11:= FillSeries(CreateSeries(Barcount),1);
  Scalc12:= FillSeries(CreateSeries(barcount),1);
  Swma   := FillSeries(CreateSeries(barcount),1);
  Swma2  := FillSeries(CreateSeries(barcount),1);
  C1 :=0.0962;
  C2 :=0.5769;
  Ofset1 :=CreateParameterInteger
              ('Afw.gem-1_halve cyclus+1 % ',-50,50,0,True)          ;
  Multpl :=CreateParameterInteger
                  ('Factor Gem2X(Cyclus+1) X % ',60,400,100,True)    ;
  Highk :=CreateParameterBoolean
       ('Gemiddelde-koers-1 ipv. hoogste-koers-1 (rood)',False,False);
  Highk2 :=CreateParameterBoolean
      ('Hoogste-koers-2 ipv. gemiddelde-koers-2 (geel) ',True,False);

  for i:=50 to (barcount-1) do
  Begin
    C3 :=(Scalc3[i-1]*0.075+0.54);
    Calc1 :=((H[i]+L[i])*2+(H[i-1]+L[i-1])*1.5+(H[i-2]+L[i-2])+
                                          (H[i-3]+L[i-3])/2)/10             ;
    Calc2 :=(Calc1*C1+Scalc1[i-2]*C2-Scalc1[i-4]*C2-Scalc1[i-6]*C1)*C3      ;
    Calc7 :=(Calc2*C1+Scalc2[i-2]*C2-Scalc2[i-4]*C2-Scalc2[i-6]*C1)*C3      ;
    Calc5 :=(Scalc2[i-3]*C1+Scalc2[i-5]*C2-Scalc2[i-7]*C2-Scalc2[i-9]*C1)*C3;
    Calc6 :=(Calc7*C1+Scalc7[i-2]*C2-Scalc7[i-4]*C2-Scalc7[i-6]*C1)*C3      ;
    Calc8 :=(Scalc2[i-3]-Calc6)*0.2+Scalc8[i-1]*0.8                         ;
    Calc9 :=(Calc7+Calc5)*0.2+Scalc9[i-1]*0.8                               ;
    Calc10:=(Calc8*Scalc8[i-1]+Calc9*Scalc9[i-1])*0.2+Scalc10[i-1]*0.8      ;
    Calc11:=(Calc8*Scalc9[i-1]-Calc9*Scalc8[i-1])*0.2+Scalc11[i-1]*0.8      ;
      If Calc10 = 0 Then Calc10 := 0.0001                                   ;
      If Calc11 = 0 Then Calc11 := 0.0001                                   ;
      Calc3 :=(360/((arctan(Calc11/Calc10))*180/Pi))                        ;
      If Calc3 > (Scalc3[i-1]*1.5)  then Calc3 := Scalc3[i-1]*1.5           ;
      If Calc3 < (Scalc3[i-1]*0.67) then Calc3 := Scalc3[i-1]*0.67          ;
      If Calc3 < 6  then Calc3 :=6                                          ;
      If Calc3 > 50 then Calc3 :=50                                         ;
    Calc3 := 0.2*Calc3+(Scalc3[i-1]*0.8)                                    ;
    Calc12 := 0.33*Calc3+(Scalc12[i-1]*0.67)                                ;

    Scalc1[i] :=Calc1  ;  Scalc2[i] :=Calc2 ;
    Scalc3[i] :=Calc3  ;  Scalc7[i] :=Calc7 ;
    Scalc5[i] :=Calc5  ;  Scalc6[i] :=Calc6 ;
    Scalc8[i] :=Calc8  ;  Scalc9[i] :=Calc9 ;
    Scalc10[i]:=Calc10 ;  Scalc11[i]:=Calc11;
    Scalc12[i]:=Calc12 ;
    
    Ber := (Calc12/2)+1;
    Peri := round(ber+ofset1*Ber/100)  ;
    Peri2:= round((2*Ber)*(Multpl/100));
    Opt:=0; Opt2:=0; Dt:=0             ;
     While peri >0 Do
      Begin
      If NOT Highk then Opt := High[i-Dt]*Peri
      Else Opt:= Scalc1[i-Dt]*Peri
      Dt := Dt +1
      Opt2 :=Opt +Opt2
      Peri := Peri -1
      End;
    Dlf := ((SQR(Dt)+Dt)/2);
    Swma[i] := Opt2/Dlf    ;
    Opt:=0; Opt2:=0; Dt:=0 ;
     While peri2>0 Do
      Begin
      If Not Highk2 Then Opt := Scalc1[i-Dt]*Peri2
      Else Opt := High[i-Dt]*Peri2
      Dt :=Dt+1
      Opt2 :=Opt+Opt2
      Peri2 :=Peri2-1
      End;
    Dlf :=((SQR(Dt)+Dt)/2);
    Swma2[i] := Opt2/Dlf  ;

  End;
  With indicator do  Begin
    Shortname := 'JSTAS.com - Auto_MA';
  End;
  With CreateLine(Swma) Do  Begin
    Color :=ClRed;
  End;
  With CreateLine(Swma2)Do  Begin
    Color :=ClYellow;
  End;
end.
*
Als eerste: elk commentaar is welkom --> daar hoop ik als simpele boer veel van te leren.
Echt, eerlijk, lever het commentaar wat je te binnen schiet, daar leert iedereen van , bedenk, domme vragen/opmerkingen bestaan niet.
.
Verder, bovenstaande inidicator is natuurlijk niet het ei van Columbus, maar, denk ik, best wel een leuke opzet naar iets wat heel mooi kan worden :lol:
Dus denk a.u.b. allemaal even lekker mee !
Wat wil je bijv. graag gewijzigd of toegevoegd zien???
Dit is je kans... stel je vraag ...
Nog één opmerking voordat jullie me lek schieten, en dat is de reactietijd van de indicator bij tragere computers ....
Alles ging vlot, tot dat ik de berekening van de WMA toepaste ....
Sinds die tijd kost elke wijizging "seconden" voordat deze zichtbaar wordt, vanwege de vele berekeningen.
Heeft iemand daarvoor een "slimme" oplossing ??
*
Bovenstaande cyclus berekening heeft een "lag" van pakweg 17 koersbars.
Dat lijkt veel, en is inderdaad niet weinig ;--)
bedenk echter: om de gemiddelde snelheid te berekenen die geldt voor jouw rit vanaf Eindhoven naar Amsterdam, zul je die toch eerst afgelegd moeten hebben voordat je die kan berekenen.
Het vooraf berekenen van je gemiddelde snelheid, daar ken ik helaas de formule niet voor.
Dus: lag is onvermijdelijk in dit geval.
Verder, bovenstaande is slechts één van de vele mogelijkheden van TA-script, en voor mij één van de eerste vinger oefeningen, dus (ver)oordeel me niet te hard a.u.b. :roll:
.
Gaarne reactie, is 't wat --- en kan ik daarmee verder voor jullie, of is't niks, en waarom is 't dan niks ?
.
Vriendelijke groet,
Jan ;)
.
www.jstas.com
.

Eric
Berichten: 2936
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Bericht door Eric » di sep 19, 2006 9:54 pm

Jan,

Een indrukwekkend 'eerste probeersel', en een leuk thema. In feite een zelf-regelend WMA systeem, gebaseerd op de veronderstelling dat de dominante cyclustijd fluctueert, neem ik aan.

Kleine verbetering: Indicator.RequiredBars := 50 opnemen, dan begint de indicator niet met een rijtje 1-en.

De performance zal met name te verbeteren zijn door de loop van de WMA berekening weg te werken. Het snelste is denk ik om de standaard MA() functie aan te roepen in plaats van de while-loop. Je krijgt dan zoiets:

Code: Selecteer alles

    if not Highk then
      sTempMA := MA(High, maWeighted, peri)
    else
      sTempMA := MA(Scalc1, maWeighted, peri);
    Swma[i] := sTempMA[i];
    if Highk2 then
      sTempMA := MA(High, maWeighted, peri2)
    else
      sTempMA := MA(Scalc1, maWeighted, peri2);
    Swma2[i] := sTempMA[i];
---
Eric

Jannes
Berichten: 22
Lid geworden op: zo aug 13, 2006 8:11 pm

Bericht door Jannes » di sep 19, 2006 11:21 pm

Bedankt voor de toevoegingen Eric, ik zal ze in de loop van de week even verwerken en "meten" of dit sneller werkt. Voordeel van gebruik van de MA functie is natuurlijk dat je ook kan werken met EMA, om te zien welk gemiddelde het beste bij het profiel van een bepaald fonds of index past.
.
Inderdaad wordt de lengte van de MA ingesteld door de dominante cycluslengte, welke fors wijzigt. Ik heb daar een tijdje geleden al eens een internet pagina aangewijd, welke nog steeds te lezen is onder de link http://www.jstas.com/tradingtrending/tr ... rading.htm
De lengte van de dominante cyclus is goed te zien door Scalc12 weer te geven onder de grafiek.
.
Ik pruts intussen weer rustig verder,
Vriendelijke groet,
Jan ;)

Jannes
Berichten: 22
Lid geworden op: zo aug 13, 2006 8:11 pm

Bericht door Jannes » ma sep 25, 2006 1:43 am

Ik heb de programma code iets aangepast, waardoor de EMA's beter instelbaar zijn en de snelheid is vergroot.
Verder worden de EMA lijnen nu pas getekend in de grafiek nadat de berekening is gestart, dit voorkomt de verticale lijn omlaag aan het begin van de grafiek.
Verder even aankoop en verkoop signalen in de grafiek gezet (code overgenomen van Paul).
De snelheidswinst is bereikt door alleen over de opgegeven periode de code uit te laten voeren.
Ik herinner u er nog even aan, dat gemiddelden alleen bruikbaar zijn om op te handelen in een trendfase van de grafiek, in een zijwaartse periode zullen ze verlies opleveren.

Code: Selecteer alles

Var
  Calc1,Calc2,Calc3,Calc5,Calc6,Calc7,Calc8,Calc9,Ber,Hlp:Real   ;
  Calc10,Calc11,Calc12,C1,C2,C3,Opt,Opt2,Dlf,Peri,Peri2  :Real   ;
  Dt,i,Ofset1,Multpl,Periode,Helplengte                  :Integer;
  Scalc1,Scalc2,Scalc3,Scalc5,Scalc6,Scalc7              :Tseries;
  Scalc8,Scalc9,Scalc10,Scalc11,Scalc12,Swma,Swma2       :TSeries;
  Highk,Highk2                                           :Boolean;
begin
  With Indicator do
    Begin
      Newband    :=false;
      ScaleRange :=SrCommon;
    End;
  Scalc1 := FillSeries(CreateSeries(Barcount),1);
  Scalc2 := FillSeries(CreateSeries(Barcount),1);
  Scalc3 := FillSeries(CreateSeries(Barcount),6);
  Scalc5 := FillSeries(CreateSeries(Barcount),1);
  Scalc6 := FillSeries(CreateSeries(Barcount),1);
  Scalc7 := FillSeries(CreateSeries(Barcount),1);
  Scalc8 := FillSeries(CreateSeries(Barcount),1);
  Scalc9 := FillSeries(CreateSeries(Barcount),1);
  Scalc10:= FillSeries(CreateSeries(Barcount),1);
  Scalc11:= FillSeries(CreateSeries(Barcount),1);
  Scalc12:= FillSeries(CreateSeries(barcount),10);
  Swma   := CreateSeries(barcount);
  Swma2  := CreateSeries(barcount);
  C1 :=0.0962;
  C2 :=0.5769;
  
  Ofset1 :=CreateParameterInteger
              ('Afw. Fast-WMA % ',-50,50,0,True);
  Multpl :=CreateParameterInteger
                  ('Factor Slow-WMA % ',60,400,100,True);
  Periode:=CreateParameterInteger('Te meten periode',200,300000,300,False);
  Highk :=CreateParameterBoolean
       ('Gemiddelde-koers-1 ipv. hoogste-koers-1 (rood)',False,False);
  Highk2 :=CreateParameterBoolean
      ('Hoogste-koers-2 ipv. gemiddelde-koers-2 (geel) ',True,False);

  Helplengte := Barcount - Periode;
  If (helplengte < 10) then  helplengte :=10;
  
  for i:= Helplengte to (barcount-1) do
  Begin
    C3 :=(Scalc3[i-1]*0.075+0.54);
    Calc1 :=((H[i]+L[i])*2+(H[i-1]+L[i-1])*1.5+(H[i-2]+L[i-2])+
                                          (H[i-3]+L[i-3])/2)/10;
    Calc2 :=(Calc1*C1+Scalc1[i-2]*C2-Scalc1[i-4]*C2-Scalc1[i-6]*C1)*C3;
    Calc7 :=(Calc2*C1+Scalc2[i-2]*C2-Scalc2[i-4]*C2-Scalc2[i-6]*C1)*C3;
    Calc5 :=(Scalc2[i-3]*C1+Scalc2[i-5]*C2-Scalc2[i-7]*C2-Scalc2[i-9]*C1)*C3;
    Calc6 :=(Calc7*C1+Scalc7[i-2]*C2-Scalc7[i-4]*C2-Scalc7[i-6]*C1)*C3;
    Calc8 :=(Scalc2[i-3]-Calc6)*0.2+Scalc8[i-1]*0.8;
    Calc9 :=(Calc7+Calc5)*0.2+Scalc9[i-1]*0.8;
    Calc10:=(Calc8*Scalc8[i-1]+Calc9*Scalc9[i-1])*0.2+Scalc10[i-1]*0.8;
    Calc11:=(Calc8*Scalc9[i-1]-Calc9*Scalc8[i-1])*0.2+Scalc11[i-1]*0.8;
      If Calc10 = 0 Then Calc10 := 0.0001;
      If Calc11 = 0 Then Calc11 := 0.0001;
      Calc3 :=(360/((arctan(Calc11/Calc10))*180/Pi));
      If Calc3 > (Scalc3[i-1]*1.5)  Then Calc3 := Scalc3[i-1]*1.5;
      If Calc3 < (Scalc3[i-1]*0.67) Then Calc3 := Scalc3[i-1]*0.67;
      If Calc3 < 6  Then Calc3 :=6;
      If Calc3 > 50 Then Calc3 :=50;
    Calc3 := 0.2*Calc3+(Scalc3[i-1]*0.8);
    Calc12 := 0.33*Calc3+(Scalc12[i-1]*0.67);

    Scalc1[i] :=Calc1 ;
    Scalc2[i] :=Calc2 ;
    Scalc3[i] :=Calc3 ;
    Scalc5[i] :=Calc5 ;
    Scalc6[i] :=Calc6 ;
    Scalc7[i] :=Calc7 ;
    Scalc8[i] :=Calc8 ;
    Scalc9[i] :=Calc9 ;
    Scalc10[i]:=Calc10;
    Scalc11[i]:=Calc11;
    Scalc12[i]:=Calc12;

    Ber := (Calc12/2)+1;
    Peri := Round(ber+ofset1*Ber/100);
    Opt2 :=0;
    Dt   :=0;
    Dlf  :=0;
    While Peri >0 Do
      Begin
      If NOT Highk then Opt := High[i-Dt]*Peri
      Else Opt:= Scalc1[i-Dt]*Peri
      Dt := Dt +1
      Opt2 :=Opt +Opt2
      Peri := Peri -1
      End;
    Dlf := ((SQR(Dt)+Dt)/2);
    Swma[i] := Opt2/Dlf;
    
    Opt2 :=0;
    Dt   :=0;
    Hlp  :=Multpl/100 ;
    Ber  :=Ber*2;
    Peri2:= Round(Ber*Hlp) ;
    While Peri2>0 Do
      Begin
      If Not Highk2 Then Opt := Scalc1[i-Dt]*Peri2
      Else Opt := High[i-Dt]*Peri2
      Dt :=Dt+1
      Opt2 :=Opt +Opt2
      Peri2 :=Peri2-1
      End;
    Dlf := ((SQR(Dt)+Dt)/2);
    Swma2[i] := Opt2/Dlf;

    If IsValid(Swma[i-1]) And IsValid(Swma2[i-1]) Then
    Begin
      If ((Swma[i] > Swma2[i]) And (Swma[i-1] < Swma2[i-1])) Then EnterLong(i);
      If ((Swma[i] < Swma2[i]) And (Swma[i-1] > Swma2[i-1])) Then EnterShort(i);
    End;

  End;
  With indicator do
  Begin
    Shortname := 'JSTAS.com - Auto_MA';
  End;
  With CreateLine(Swma) Do
  Begin
    Color :=ClRed;
  End;
  With CreateLine(Swma2) Do
  Begin
    Color :=ClYellow;
  End;
End.
Vriendelijke groet,
Jan ;)

Janus
Berichten: 1221
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Bericht door Janus » za aug 16, 2008 12:19 am

Ik heb weer een probleempje,
Deze keer met de functie CreateTrendline.
Wanneer ik deze functie gebruik krijg ik keurig een doorgetrokken lijn.
Wat moet ik nu invullen om die lijn bijvoorbeeld als een stippellijn weergegeven te krijgen ?
Ik heb al van alles geprobeerd, maar bij elke poging staat het scherm mij bedroefd aan te kijken ;)

Code: Selecteer alles

With CreateTrendLine (*,*,*,*)  do
  Begin
    Color :=ClBlue;
    * hoe geef ik op deze plaats het lijn-type in ?*
  End;
Hoe een mens toch kan worstelen met simpele dingen ....
.
Vriendelijke groet,
JanS ;)

Eric
Berichten: 2936
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Bericht door Eric » za aug 16, 2008 8:42 am

Janus,

Dat gaat met b.v. Style = lsDot;

Als je in de help naar de CreateTrendline functie gaat, doorklikt op TTrendline en vervolgens op TTrendlineStyle krijg je alle mogelijkheden te zien. Let wel: het soort lijn kan alleen worden ingesteld bij een lijndikte van 1, voor vette lijnen werkt het niet.

---
Eric

Janus
Berichten: 1221
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Bericht door Janus » za aug 16, 2008 9:59 am

Bedankt weer Eric, ik zie het nu, ik plaatste steeds een I ipv. een l als eerste letter, het werkt nu.
.
Vriendelijke groet,
JanS ;)

Janus
Berichten: 1221
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Bericht door Janus » vr jul 10, 2009 11:12 pm

Ben ik weer, wel op vakantie maar toch altijd weer bezig in de 'vrije uurtjes'.

Ik denk dat ik weer iets wil wat niet kan, maar niet gevraagd is oerdom, dus hierbij een poging :)

Excel heeft de mogelijkheid om daar eenvoudig een kalender in te plaatsen.
Je kan dan snel op een datum klikken, en de waarde van die datum als getal naar een cel kopïeren.

Zie onderstaande figuur.

Afbeelding


De waarde van de datum staat in dit geval in cel B2

Nu had ik als idee, om de datum selectie welke ik in veel Gann toepassingen en ook andere gebruik, te vervangen door deze kalender.

Je klikt dus op de gewenste datum in de kalender, er wordt dan een waarde in een opgegeven cel in Excel geprojecteerd, en met die waarde wordt verder gerekend in mijn ta-script.

Nu kan ik vanuit mijn ta-script prima die calender opstarten met bijvoorbeeld de volgende regel:

Code: Selecteer alles

RunProgram('"C:\Program Files\Microsoft Office\Office\Excel.exe"c:\proefcalender.xls');
In dat geval wordt Excel opgestart, er wordt een kalender weergegeven zoals in bovenstaande figuur, en cel B2 varieert aan de hand waar er op de kalender wordt geklikt.

Mijn vraag is nu of het mogelijk is die waarde in dit opgegeven geval terug te krijgen in TA-script voor verdere bewerking.

Dit met als achterliggend idee het kiezen van datums te vereenvoudigen.

Ik zag in mijn oude ta-script boekje ( de nieuwe heb ik inmiddels besteld) een opdrachtregel in de trant van GetActiveOleObject, een functie, maar ik denk dat door de zon deze opdrachtregel voor mij niet geheel duidelijk is, zal wel aan de zon EN de drank liggen., maar toch ..
Is deze opdracht bruikbaar daarvoor, en hoe luidt dan de code ruwweg ...?

Mooier zou zijn indien een muisklik op het scherm als ingegeven waarde kon worden overgenomen, maar dat is voor zover ik weet helaas niet mogelijk.

Een ieder een prettig weekend, en na mijn vakantie ga ik weer verder met een en ander, af en toe post ik tijdens mijn vakantie wel wat in de dagelijkse grafieken update, link: --> http://www.jstas.com/2009/Dageljiks%20v ... fieken.htm ; die tijdens mijn vakantie eerder wekelijks dan dagelijks wordt bijgehouden :)
Vriendelijke groet,
JanS ;)

Plaats reactie