Stochastische MACD

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Plaats reactie
r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Stochastische MACD

Bericht door r.bruinsma » do okt 12, 2017 9:53 pm

Hallo Eric,

Ben nieuw op dit forum maar volg het forum al wel langer.
Vraag me af of er een handelssysteem(script) te maken is van

stochastic 5,3,3 %k %d van MACD ema13,26

De stochastische macd moet dan;

kopen wanneer waarde >0
verkopen wanneer waarde <100
(zouden bovenstaande signalen aan te passen zijn >0 tot 10 en <100 tot 90)

Dank voor de moeite,

Rens

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

Re: Stochastische MACD

Bericht door Eric » vr okt 13, 2017 8:58 am

Dat is zeker te maken:

Code: Selecteer alles

{- Filename: Stochastics van MACD -}

var
  i, nMACD1, nMACD2, nK, nKSlow, NDSlow, LineLo, LineHi: integer;
  sMACD, sSlowK, sSlowD, sLow, sHigh: TSeries;
  xLow, xHigh: TLineCrossings;
begin
  nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 13, True);
  nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 26, True);
  nK := CreateParameterInteger('%K', 1, 100, 5, True);
  nKSlow := CreateParameterInteger('%K-slow', 1, 100, 3, True);
  nDSlow := CreateParameterInteger('%D-slow', 1, 100, 3, True);
  LineLo := CreateParameterInteger('Drempel laag', 0, 50, 10, True);
  LineHi := CreateParameterInteger('Drempel hoog', 50, 100, 90, True);

  With Indicator Do
  Begin
    RequiredBars := 5*Round(nMACD1+nMACD2+Max((Max(nK,NKSlow)),nDSlow));
  End;

  sMACD := SubtractSeries(MA(Close, maExponential, nMACD1), MA(Close, maExponential, nMACD2));
  Stochastics(sMACD, sMACD, sMACD, nK, nKSlow, NDSlow, sSlowK, sSlowD);
  sLow := FillSeries(CreateSeries(BarCount), LineLo);
  sHigh := FillSeries(CreateSeries(BarCOunt), LineHi);
  xLow := Crossings(sSlowD, sLow);
  xHigh := Crossings(sSlowD, sHigh);
  
  for i:=0 to BarCount-1 do
  begin
    if xLow[i] = lc1Over2 then
    begin
      Signals[i] := sgEnterLong;
    end;
    if xHigh[i] = lc2Over1 then
    begin
      Signals[i] := sgEnterShort;
    end;
  end;

  with CreateLine(sSlowK) do
  begin
    Name := '%K';
    Color := ClRed;
  end;
  with CreateLine(sSlowD) do
  begin
    Name := '%D';
    Color := ClBlue;
  end;
  with CreateLine(sMACD) do
  begin
    Name := 'MACD';
    Color := ClLime;
    Visible := false;
  end;

  CreateLine(sLow).Color:= ClSilver;
  CreateLine(sHigh).Color:= ClSilver;
end.
---
Eric

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » vr okt 13, 2017 10:29 am

Eric,

Dank voor de snelle reactie.
Ik ga er mee stoeien.

Rens

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » vr okt 13, 2017 10:45 am

Eric,

Werkt perfect!
Alleen wanneer ik de drempelwaarden op 99 en 1 zet komen de signalen nog 1 bar te laat.
Is het niet mogelijk drempelwaarden op 0,01 of 0,1 en 99,9 0f 99,09 te zetten?

Rens

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

Re: Stochastische MACD

Bericht door Eric » vr okt 13, 2017 1:59 pm

Dat kan:

Code: Selecteer alles

{- Filename: Stochastics van MACD -}

var
  i, nMACD1, nMACD2, nK, nKSlow, NDSlow: integer;
  LineLo, LineHi: real;
  sMACD, sSlowK, sSlowD, sLow, sHigh: TSeries;
  xLow, xHigh: TLineCrossings;
begin
  nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 13, True);
  nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 26, True);
  nK := CreateParameterInteger('%K', 1, 100, 5, True);
  nKSlow := CreateParameterInteger('%K-slow', 1, 100, 3, True);
  nDSlow := CreateParameterInteger('%D-slow', 1, 100, 3, True);
  LineLo := CreateParameterReal('Drempel laag', 0, 50, 10, True);
  LineHi := CreateParameterReal('Drempel hoog', 50, 100, 90, True);

  With Indicator Do
  Begin
    RequiredBars := 5*Round(nMACD1+nMACD2+Max((Max(nK,NKSlow)),nDSlow));
  End;

  sMACD := SubtractSeries(MA(Close, maExponential, nMACD1), MA(Close, maExponential, nMACD2));
  Stochastics(sMACD, sMACD, sMACD, nK, nKSlow, NDSlow, sSlowK, sSlowD);
  sLow := FillSeries(CreateSeries(BarCount), LineLo);
  sHigh := FillSeries(CreateSeries(BarCOunt), LineHi);
  xLow := Crossings(sSlowD, sLow);
  xHigh := Crossings(sSlowD, sHigh);
  
  for i:=0 to BarCount-1 do
  begin
    if xLow[i] = lc1Over2 then
    begin
      Signals[i] := sgEnterLong;
    end;
    if xHigh[i] = lc2Over1 then
    begin
      Signals[i] := sgEnterShort;
    end;
  end;

  with CreateLine(sSlowK) do
  begin
    Name := '%K';
    Color := ClRed;
  end;
  with CreateLine(sSlowD) do
  begin
    Name := '%D';
    Color := ClBlue;
  end;
  with CreateLine(sMACD) do
  begin
    Name := 'MACD';
    Color := ClLime;
    Visible := false;
  end;

  CreateLine(sLow).Color:= ClSilver;
  CreateLine(sHigh).Color:= ClSilver;
end.
Het signaal kan ook nog getriggerd worden door de rode (snelle) %K lijn als je wilt, nu is de rode %D lijn bepalend. Dan komt het signaal nog eerder.

---
Eric

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » za okt 14, 2017 11:20 am

Dank!

Rens

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » za okt 14, 2017 11:23 am

Hallo Eric,

"Het signaal kan ook nog getriggerd worden door de rode (snelle) %K lijn als je wilt, nu is de rode %D lijn bepalend. Dan komt het signaal nog eerder."

Zou je dat willen doen?

Rens

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

Re: Stochastische MACD

Bericht door Eric » za okt 14, 2017 3:29 pm

Bij deze:

Code: Selecteer alles

{- Filename: Stochastics van MACD -}

var
  i, nMACD1, nMACD2, nK, nKSlow, NDSlow: integer;
  LineLo, LineHi: real;
  sMACD, sSlowK, sSlowD, sLow, sHigh: TSeries;
  xLow, xHigh: TLineCrossings;
begin
  nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 13, True);
  nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 26, True);
  nK := CreateParameterInteger('%K', 1, 100, 5, True);
  nKSlow := CreateParameterInteger('%K-slow', 1, 100, 3, True);
  nDSlow := CreateParameterInteger('%D-slow', 1, 100, 3, True);
  LineLo := CreateParameterReal('Drempel laag', 0, 50, 10, True);
  LineHi := CreateParameterReal('Drempel hoog', 50, 100, 90, True);

  With Indicator Do
  Begin
    RequiredBars := 5*Round(nMACD1+nMACD2+Max((Max(nK,NKSlow)),nDSlow));
  End;

  sMACD := SubtractSeries(MA(Close, maExponential, nMACD1), MA(Close, maExponential, nMACD2));
  Stochastics(sMACD, sMACD, sMACD, nK, nKSlow, NDSlow, sSlowK, sSlowD);
  sLow := FillSeries(CreateSeries(BarCount), LineLo);
  sHigh := FillSeries(CreateSeries(BarCOunt), LineHi);
  xLow := Crossings(sSlowK, sLow);
  xHigh := Crossings(sSlowK, sHigh);
  
  for i:=0 to BarCount-1 do
  begin
    if xLow[i] = lc1Over2 then
    begin
      Signals[i] := sgEnterLong;
    end;
    if xHigh[i] = lc2Over1 then
    begin
      Signals[i] := sgEnterShort;
    end;
  end;

  with CreateLine(sSlowK) do
  begin
    Name := '%K';
    Color := ClRed;
  end;
  with CreateLine(sSlowD) do
  begin
    Name := '%D';
    Color := ClBlue;
  end;
  with CreateLine(sMACD) do
  begin
    Name := 'MACD';
    Color := ClLime;
    Visible := false;
  end;

  CreateLine(sLow).Color:= ClSilver;
  CreateLine(sHigh).Color:= ClSilver;
end.
---
Eric

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » za okt 14, 2017 5:29 pm

hartelijk dank voor de snelheid

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » vr okt 20, 2017 10:04 am

Hallo Eric,

Zou er een EMA-filter op kunnen voor koop en verkoopsignalen.
Kopen wanneer de koers boven een instelbaar EMA is en verkopen wanneer het eronder is.
Het zou mooi zijn wanneer ik het zelf in zou kunnen stellen. Anders 25.

Dank voor de moeite,
Rens

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

Re: Stochastische MACD

Bericht door Eric » vr okt 20, 2017 7:46 pm

Dat kan ook:

Code: Selecteer alles

{- Filename: Stochastics van MACD -}

type
  TState = (stNone, stStoLong, stStoShort);
  
var
  i, nMACD1, nMACD2, nEMA, nK, nKSlow, NDSlow: integer;
  LineLo, LineHi: real;
  sMACD, sEMA, sSlowK, sSlowD, sLow, sHigh: TSeries;
  xLow, xHigh: TLineCrossings;
  State: TState;
begin
  nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 13, True);
  nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 26, True);
  nK := CreateParameterInteger('%K', 1, 100, 5, True);
  nKSlow := CreateParameterInteger('%K-slow', 1, 100, 3, True);
  nDSlow := CreateParameterInteger('%D-slow', 1, 100, 3, True);
  nEMA := CreateParameterInteger('EMA filter', 1, 9999, 25, True);
  LineLo := CreateParameterReal('Drempel laag', 0, 50, 10, True);
  LineHi := CreateParameterReal('Drempel hoog', 50, 100, 90, True);

  With Indicator Do
  Begin
    RequiredBars := 5*Round(nEMA+nMACD1+nMACD2+Max((Max(nK,NKSlow)),nDSlow));
  End;

  sMACD := SubtractSeries(MA(Close, maExponential, nMACD1), MA(Close, maExponential, nMACD2));
  Stochastics(sMACD, sMACD, sMACD, nK, nKSlow, NDSlow, sSlowK, sSlowD);
  sEMA := MA(Close, maExponential, nEMA);
  sLow := FillSeries(CreateSeries(BarCount), LineLo);
  sHigh := FillSeries(CreateSeries(BarCOunt), LineHi);
  xLow := Crossings(sSlowK, sLow);
  xHigh := Crossings(sSlowK, sHigh);
  
  for i:=0 to BarCount-1 do
  begin
    if xLow[i] = lc1Over2 then
    begin
      State := stStoLong;
    end else
    if xHigh[i] = lc2Over1 then
    begin
      State := stStoShort;
    end;
    
    if (State = stStoLong) and (IsValid(sEMA[i])) and (Close[i] > sEMA[i]) then
    begin
      EnterLong(i);
      State := stNone;
    end else
    if (State = stStoShort) and (IsValid(sEMA[i])) and (Close[i] < sEMA[i]) then
    begin
      EnterShort(i);
      State := stNone;
    end;
  end;

  with CreateLine(sSlowK) do
  begin
    Name := '%K';
    Color := ClRed;
  end;
  with CreateLine(sSlowD) do
  begin
    Name := '%D';
    Color := ClBlue;
  end;
  with CreateLine(sMACD) do
  begin
    Name := 'MACD';
    Color := ClLime;
    Visible := false;
  end;

  CreateLine(sLow).Color:= ClSilver;
  CreateLine(sHigh).Color:= ClSilver;
end.
---
Eric

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » za okt 21, 2017 8:34 am

Dank,

Rens

r.bruinsma
Berichten: 9
Lid geworden op: vr apr 10, 2015 7:01 pm

Re: Stochastische MACD

Bericht door r.bruinsma » di okt 24, 2017 9:25 pm

Hallo Eric,

Dank voor het filter.
Nu komen de signalen later namelijk wanneer boven of onder het EMA geraakt wordt.
Ik zou graag willen dat de signalen niet later komen maar vervallen wanneer ze niet voldoen aan de voorwaarde.
De stochastic geeft het signaal maar het is alleen maar geldig wanneer aan de EMA voorwaarde is voldaan, anders komt er geen signaal.
Zou dat kunnen??

Dank voor de moeite,

Rens

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

Re: Stochastische MACD

Bericht door Eric » di okt 24, 2017 9:41 pm

Code: Selecteer alles

{- Filename: Stochastics van MACD -}

var
  i, nMACD1, nMACD2, nEMA, nK, nKSlow, NDSlow: integer;
  LineLo, LineHi: real;
  sMACD, sEMA, sSlowK, sSlowD, sLow, sHigh: TSeries;
  xLow, xHigh: TLineCrossings;
begin
  nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 13, True);
  nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 26, True);
  nK := CreateParameterInteger('%K', 1, 100, 5, True);
  nKSlow := CreateParameterInteger('%K-slow', 1, 100, 3, True);
  nDSlow := CreateParameterInteger('%D-slow', 1, 100, 3, True);
  nEMA := CreateParameterInteger('EMA filter', 1, 9999, 25, True);
  LineLo := CreateParameterReal('Drempel laag', 0, 50, 10, True);
  LineHi := CreateParameterReal('Drempel hoog', 50, 100, 90, True);

  With Indicator Do
  Begin
    RequiredBars := 5*Round(nEMA+nMACD1+nMACD2+Max((Max(nK,NKSlow)),nDSlow));
  End;

  sMACD := SubtractSeries(MA(Close, maExponential, nMACD1), MA(Close, maExponential, nMACD2));
  Stochastics(sMACD, sMACD, sMACD, nK, nKSlow, NDSlow, sSlowK, sSlowD);
  sEMA := MA(Close, maExponential, nEMA);
  sLow := FillSeries(CreateSeries(BarCount), LineLo);
  sHigh := FillSeries(CreateSeries(BarCOunt), LineHi);
  xLow := Crossings(sSlowK, sLow);
  xHigh := Crossings(sSlowK, sHigh);
  
  for i:=FirstValidIndex(sEMA) to BarCount-1 do
  begin
    if (xLow[i] = lc1Over2) and (Close[i] > sEMA[i]) then
    begin
      Signals[i] := sgEnterLong;
    end else
    if (xHigh[i] = lc2Over1) and (Close[i] < sEMA[i]) then
    begin
      Signals[i] := sgEnterShort;
    end;
  end;

  with CreateLine(sSlowK) do
  begin
    Name := '%K';
    Color := ClRed;
  end;
  with CreateLine(sSlowD) do
  begin
    Name := '%D';
    Color := ClBlue;
  end;
  with CreateLine(sMACD) do
  begin
    Name := 'MACD';
    Color := ClLime;
    Visible := false;
  end;

  CreateLine(sLow).Color:= ClSilver;
  CreateLine(sHigh).Color:= ClSilver;
end.
---
Eric

Plaats reactie

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 5 gasten