macd combo

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

macd combo

Bericht door tesjoeva » di apr 03, 2018 3:35 pm

Hallo Eric,

Wil je zo vriendelijk zijn de volgende gedachtekronkel proberen tot leven te brengen?

Ik wil uitgaan van de Hull Macd Afgeleide en de reguliere Macd Afgeleide:

Long: Hull Macd Afgeleide geeft longsignaal plus reguliere macd afgeleide is groter dan 0 en stijgt.
Exit long: Hull Macd afgeleide geeft verkoopsignaal OF de reguliere macd afgeleide gaat onder 0.

Short: Hull macd afgeleide geeft short signaal plus de reguliere macd afgeleide is kleiner dan 0 en daalt.
Exit short: Hull macd afgeleide geeft koop signaal OF de reguliere macd afgeleide gaat boven 0.

Belangrijk dus dat het steeds gaat over de afgeleide en dat de exits steeds of/of zijn.

Ik hoop dat ik het voor de verandering nu een keer goed heb opgeschreven.

Vriendelijke groet, en mijn dank is nu al groot...............

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

Re: macd combo

Bericht door Eric » ma apr 09, 2018 9:12 am

Kijk maar eens of dit hem is:

Code: Selecteer alles

{- Filename: Tesjoeva's MACD system -}

function HullMA(Prices: TSeries; Period: integer): TSeries;
begin
// Integer (Square Root (Period)) WMA [2 x Integer (Period/2) WMA (Price) - Period WMA (Price)]
//  waverage(2 * waverage(close, period/2) - waverage(close,period), SquareRoot(Period))
  Result := MA(SubtractSeries(MultiplySeriesBy(MA(Prices, maWeighted, Period div 2), 2),
                              MA(Prices, maWeighted, Period)),
               maWeighted, trunc(sqrt(Period)));
end;

var
  nHullMA1, nHullMA2, nMA1, nMA2, i, iFirst: integer;
  sHullMACD, sMACD, sHullDiff, sDiff, sZero: TSeries;
begin
  nHullMA1 := CreateParameterInteger('Hull''s MA periode 1', 1, 999, 13, true);
  nHullMA2 := CreateParameterInteger('Hull''s MA periode 2', 1, 999, 26, true);
  nMA1 := CreateParameterInteger('MA periode 1', 1, 999, 13, true);
  nMA2 := CreateParameterInteger('MA periode 2', 1, 999, 26, true);

  with Indicator do
  begin
    RequiredBars := MaxInt(5*(nMA1+nMA2), nHullMA1+nHullMA2);
  end;
  
  sHullMACD := SubtractSeries(HullMA(Close, nHullMA1), HullMA(Close, nHullMA2));
  sHullDiff := Momentum(sHullMACD, 1);

  sMACD := MACD(Close, nMA1, nMA2);
  sDiff := Momentum(sMACD, 1);

  sZero := FillSeries(CreateSeries(BarCount), 0);
  
  iFirst := MaxInt(FirstvalidIndex(sHullDiff), FirstValidIndex(sDiff));
  for i:=iFirst+1 to BarCount-1 do
  begin
    if (sHullDiff[i] > 0) and (sDiff[i] > 0) and (sDiff[i] > sDiff[i-1]) then
      EnterLong(i)
    else
    if (sHullDiff[i] < 0) and (sDiff[i] < 0) and (sDiff[i] < sDiff[i-1]) then
      EnterShort(i)
    else
    if (sHullDiff[i] < 0) or (sDiff[i] < 0) then
      ExitLong(i)
    else
    if (sHullDiff[i] > 0) or (sDiff[i] > 0) then
      ExitShort(i);
  end;
  
  with CreateLine(sDiff) do
  begin
    Color := clLime;
  end;
  with CreateLine(sHullDiff) do
  begin
    Color := clYellow;
  end;
  with CreateLine(sZero) do
  begin
    Color := clSilver;
    LineContent := lcConstant;
  end;
end.
---
Eric

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » ma apr 09, 2018 11:28 am

Hallo Eric,

Dank, ik ga er mee aan de slag

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » ma apr 09, 2018 6:16 pm

Hallo Eric,

de macd combo ziet er goed uit, alleen de exits zijn in feite te choppy.....

Ik wil graag het volgende proberen:'

De entries mede bevestigen middels de trigger lines dus bij buy of sell OPEN.

De exits middels de macd's afgeleide vervangen door de trigger lines, dus closings alleen
door de signalen uit de trigger lines.

Als ik dan ook nog een profit target in punten kan toevoegen, ben ik helemaal happy.

dank, dank en vriendelijke groet.

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

Re: macd combo

Bericht door Eric » di apr 10, 2018 8:38 am

Dat is me niet helemaal duidelijk.

Welke lijnen bedoel je met trigger lines en aan welke voorwaarde moet dan worden voldaan?

---
Eric

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » di apr 10, 2018 8:50 am

Code: Selecteer alles

{- Filename: T3-TriggerLines-LRF -}
                        
var 
  Period, Displace, Trigger, nBar, i         : integer; 
  sLR, sLRSlope, sForecast, sMAFc, sDotLine  : TSeries; 
  SetBarCl, Dots, bBGC                       : boolean; 
  UpCol, DwCol                               : TColor;
  

begin 
  Period   := CreateParameterInteger(' Period', 1, 999, 20, true); 
  Displace := CreateParameterInteger(' Displace LRF', 0, 999, 0, false); 
  Trigger  := CreateParameterInteger(' EMA over LRF', 1, 999, 5, true); 
  SetBarCl := CreateParameterBoolean(' SetBarColors?', false, false); 
  Dots     := CreateParameterBoolean(' Dots?', false, false);
  bBGC     := CreateParameterBoolean(' BackGround Colors?' ,false,false);
  UpCol    := CreateParameterColor('       BackGround Up', clGreen);
  DwCol    := CreateParameterColor('       BackGround Down', clMaroon);   
  nBar     := CreateParameterInteger('       Extend BackGround',1,99,5,false);
  
  with Indicator do 
  begin 
    ShortName      := 'TriggerLine'; 
    RequiredBars   := Period*5; 
    NewBand        := false; 
    ScaleRange     := srCommon;
    SignalView     := svHide;  
    HiddenParams   := true;
  end; 

  sLR       := MovingRegression(Close,Period); 
  sLRSlope  := MovingRegressionSlope(Close,Period); 
  sForecast := ShiftSeries(AddSeries(sLR,sLRSlope),Displace); 
  sMAFc     := MA(sForecast,MaExponential,Trigger); 
    
  //----- Condities TriggerLineColors + Signals ---- 
  for i:=FirstValidIndex(sMAFc) to BarCount-1 do 
  begin 
    if (sMAFc[i] >= sForecast[i]) then 
    begin 
      SetBarColor(0, i, clRed); 
      SetBarColor(1, i, clRed); 
      EnterShort(i); 
      if bBGC then 
        with CreateRectangle(BarPosition[i-1],0,BarPosition[i]+nBar,0) do 
        begin 
          Color           := DwCol;
          BkColor         := DwCol;
          Y1Pct           := 0; 
          Y2Pct           := 100; 
          DrawBehindChart := true; 
        end;
      if SetBarCl then SetParentBarColor(i, clRed); 
    end else 
    begin 
      SetBarColor(0, i, clLime); 
      SetBarColor(1, i, clLime); 
      EnterLong(i); 
      if bBGC then
        with CreateRectangle(BarPosition[i-1],0,BarPosition[i]+nBar,0) do 
        begin 
          Color           := UpCol;
          BkColor         := UpCol;
          Y1Pct           := 0; 
          Y2Pct           := 100; 
          DrawBehindChart := true; 
        end;
      if SetBarCl then SetParentBarColor(i, clLime); 
    end; 
  end; 

  //----------- DotColors -------------------- 
  for i:=0 to BarCount-1 do 
  begin 
   if IsValid(sMAFc[i]) and Dots then 
   begin 
     if (sMAFc[i] >= sForecast[i]) and 
        (close[i] <= sForecast[i]) and 
        (close[i] <= sMAFc[i])     then 
     begin 
       SetBarColor(3, i, clRed); 
     end else 
     if (sMAFc[i] >= sForecast[i]) and 
        (close[i] > sForecast[i])  and 
        (close[i] <= sMAFc[i])     then 
     begin 
       SetBarColor(3, i, RGB(158,0,0)); 
     end else 
     if (sMAFc[i] < sForecast[i])  and 
        (close[i] >= sForecast[i]) and 
        (close[i] >= sMAFc[i])     then 
     begin 
       SetBarColor(3, i, clLime); 
     end else 
     if (sMAFc[i] < sForecast[i])  and 
        (close[i] < sForecast[i])  and 
        (close[i] >= sMAFc[i])     then 
     begin 
       SetBarColor(3, i, clGreen); 
     end; 
    end; 
  end; 

  if Dots then sDotLine := Close 
          else sDotLine := CreateSeries(BarCount); 

  // ----- Weergave ----- 

  with CreateLine(sForecast) do 
  begin 
    Name     := 'Lineaire Regressie Forecast'; 
    Color    := clBlack; 
    Width    := 2; 
   end; 

  with CreateLine(sMAFc) do 
  begin 
    Name     := 'Trigger'; 
    Color    := clLime; 
    Width    := 2;      
  end; 

  with CreateLine(sDotLine) do 
  begin 
    Name     := 'Dot'; 
    LineType := ltDot; 
    Color    := clBlack; 
    Width    := 3; 
  end; 
  
  with CreateLine(sDotLine) do 
  begin 
    Name     := 'Dot-color'; 
    LineType := ltDot; 
    Color    := clYellow; 
    Width    := 2; 
  end;  
    
END.  [code/]

Bij de entry dient er een bevestiging te zijn uit deze indicator.
Dus zowel de macd's afgeleide als deze moet long of short gaan.

De exit alléén obv deze indicator, die dus in feite de exits uit de macd's afgeleide over ruled.

dus; long 2 maal koop, short 2 maal verkoop, exit/neutraal 1 maal long+sell uit deze indicator of
1 maal short en koop uit deze.

vriendelijke groet,

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

Re: macd combo

Bericht door Eric » di apr 10, 2018 9:19 am

Code: Selecteer alles

{- Filename: Tesjoeva's MACD system -}

function HullMA(Prices: TSeries; Period: integer): TSeries;
begin
// Integer (Square Root (Period)) WMA [2 x Integer (Period/2) WMA (Price) - Period WMA (Price)]
//  waverage(2 * waverage(close, period/2) - waverage(close,period), SquareRoot(Period))
  Result := MA(SubtractSeries(MultiplySeriesBy(MA(Prices, maWeighted, Period div 2), 2),
                              MA(Prices, maWeighted, Period)),
               maWeighted, trunc(sqrt(Period)));
end;

var
  nHullMA1, nHullMA2, nMA1, nMA2, i, iFirst, Period, Displace, Trigger, MP: integer;
  TPLevel, TP: real;
  sHullMACD, sMACD, sHullDiff, sDiff, sZero: TSeries;
  sLR, sLRSlope, sForecast, sMAFc: TSeries;
begin
  nHullMA1 := CreateParameterInteger('Hull''s MA periode 1', 1, 999, 13, true);
  nHullMA2 := CreateParameterInteger('Hull''s MA periode 2', 1, 999, 26, true);
  nMA1 := CreateParameterInteger('MA periode 1', 1, 999, 13, true);
  nMA2 := CreateParameterInteger('MA periode 2', 1, 999, 26, true);
  Period   := CreateParameterInteger('T3 Period', 1, 999, 20, true);
  Displace := CreateParameterInteger('T3 Displace LRF', 0, 999, 0, false);
  Trigger  := CreateParameterInteger('T3 EMA over LRF', 1, 999, 5, true);
  TP  := CreateParameterReal('Take profit (pt)', 0, 9999, 10, true);

  with Indicator do
  begin
    RequiredBars := MaxInt(MaxInt(5*(nMA1+nMA2), nHullMA1+nHullMA2), 5*Period);
  end;
  
  sHullMACD := SubtractSeries(HullMA(Close, nHullMA1), HullMA(Close, nHullMA2));
  sHullDiff := Momentum(sHullMACD, 1);

  sMACD := MACD(Close, nMA1, nMA2);
  sDiff := Momentum(sMACD, 1);
  sZero := FillSeries(CreateSeries(BarCount), 0);

  sLR       := MovingRegression(Close,Period);
  sLRSlope  := MovingRegressionSlope(Close,Period);
  sForecast := ShiftSeries(AddSeries(sLR,sLRSlope),Displace);
  sMAFc     := MA(sForecast,MaExponential,Trigger);

  iFirst := MaxInt(MaxInt(FirstvalidIndex(sHullDiff), FirstValidIndex(sDiff)), FirstValidIndex(sMAFc));
  for i:=iFirst+1 to BarCount-1 do
  begin
    if (MP > 0) and (Close[i] >= TPLevel) then
    begin
      ExitLong(i);
      MP := 0;
    end else
    if (MP < 0) and (Close[i] <= TPLevel) then
    begin
      ExitShort(i);
      MP := 0;
    end else
    if (sHullDiff[i] > 0) and (sDiff[i] > 0) and (sDiff[i] > sDiff[i-1]) and (sMAFc[i] < sForecast[i]) then
    begin
      if EnterLong(i) then
      begin
        MP := 1;
        TPLevel := Close[i] + TP;
      end;
    end else
    if (sHullDiff[i] < 0) and (sDiff[i] < 0) and (sDiff[i] < sDiff[i-1]) and (sMAFc[i] >= sForecast[i]) then
    begin
      if EnterShort(i) then
      begin
        MP := -1;
        TPLevel := Close[i] - TP;
      end;
    end else
    if (sMAFc[i] >= sForecast[i]) then
    begin
      ExitLong(i);
      MP := 0;
    end else
    if (sMAFc[i] < sForecast[i]) then
    begin
      ExitShort(i);
      MP := 0;
    end;
  end;
  
  with CreateLine(sDiff) do
  begin
    Color := clLime;
  end;
  with CreateLine(sHullDiff) do
  begin
    Color := clYellow;
  end;
  with CreateLine(sZero) do
  begin
    Color := clSilver;
    LineContent := lcConstant;
  end;
end.
---
Eric

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » di apr 10, 2018 9:56 am

Hallo Eric,

Dank je voor de snelle aanpak, geweldig!

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » di apr 10, 2018 10:20 am

Hallo Eric,

Er lijkt toch nog een schoonheidsfoutje in te zitten.

Er ontstaan naar mijn mening nog exits obv de triggerlines (perfect) maar ook nog obv de macd's afgeleiden.

Kun je mij zeggen hoe ik een screendumpje kan toevoegen, dan kan ik het even laten zien, maar ik neem
aan dat je het zo ook wel begrijpt.

Het kan ook nog ergens anders vandaan komen, want helemaal sluitend krijg ik de extra signalen niet.

vriendelijke groet

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » di apr 10, 2018 10:37 am

Hallo Eric,

Excuus, ik geloof dat ik verkeerd heb gekeken en dat de extra signalen voortkomen uit de profit taking.

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » wo apr 11, 2018 10:25 am

Hallo Eric,

Zou je zo vriendelijk willen zijn nóg een macd combo te maken (een nieuwe dus) obv:

De huidige tesjoeva macd systeem uitgebreid met een bevestiging vanuit PETDEV (zonder toevoeging 1).

De entries uit het macd systeem bevestigd met groene of rode bars uit de petdev.

Geen exits bij kleurverandering in de petdev, exits alleen obv de triggerlines.
of eerder uit profit taking.

ik zie in een grote trend waarbij de beide macd's positief of negatief zijn en de triggerlines óók,
dat er winst wordt genomen en er weer een re-entry verschijnt, zonder dat de indicatoren aar aanleiding toe geven.

Natuurlijk prachtig, schitterend, maar waar kan dit vandaan komen?

vriendelijke groet

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » wo apr 11, 2018 1:08 pm

Hallo Eric,

Toch nog even een verzoekje cq laatste aanpassing op mijn vorige verzoek:

Als aan alle voorwaarden is voldaan bijv. voor een LONG; tesjoeva macd's geeft koopsignaal én
de triggerlines zijn positief én petdev is groen, dan is dat de breakout bar.

Ik zou deze willen effectueren met een slot boven de high van deze bar; dat kan dus best enige bars duren...

Short spreekt natuurlijk voor zichzelf.

Exits blijven hetzelfde, of profit taking of triggerlines draaien.

vriendelijke groet,

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

Re: macd combo

Bericht door Eric » do apr 12, 2018 8:43 am

tesjoeva schreef:
wo apr 11, 2018 10:25 am
De huidige tesjoeva macd systeem uitgebreid met een bevestiging vanuit PETDEV (zonder toevoeging 1).
Het zou mij zoekwerk besparen als je een linkje hebt naar die indicator.

---
Eric

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » do apr 12, 2018 9:15 am

Code: Selecteer alles

{- Filename: PetDev's system -}

function RSI2(Price: TSeries; Periode: integer): TSeries;
var
  Count, i, n: integer;
  Diff: TSeries;
  Up, Down: real;
begin
  Count := GetArrayLength(Price);
  Result := CreateSeries(Count);
  Diff := Momentum(Price, 1);
  Up := 0;
  Down := 0;
  n := 0;
  for i:=FirstValidIndex(Diff) to Count-1 do
  begin
    if Diff[i] > 0 then Up := Up + Diff[i] else Down := Down - Diff[i];
    if n <= Periode then
    begin
      n := n+1;
    end else
    begin
      if Diff[i-Periode-1] > 0 then Up := Up - Diff[i-Periode-1] else Down := Down + Diff[i-Periode-1];
    end;
    if Down <> 0 then Result[i] := 100 * (Up/Down) / (1+Up/Down);
  end;
end;

type
  TState = (stNeutral, stSetupLong, stSetupShort);
  
var
  nRSI, nRSILo, nRSIHi, nMACD1, nMACD2, nMACD3, nEMA1, nEMA2, nMA, i, iFirst: integer;
  sRSI, sMACD1, sMACD, sEMA1, sEMA2, sMA, s0, s100: TSeries;
  BuyScore, SellScore, LongTrigger, ShortTrigger: real;
  cCol3, cCol2, cCol1, cCol0: TColor;
  bExpRSI: boolean;
  State: TState;
begin
{ Indicator parameters }
  nRSI := CreateParameterInteger('RSI', 1, 999, 14, true);
  bExpRSI := CreateParameterBoolean('Exponentiele berekening', true, true);
  nRSILo := CreateParameterInteger('RSI low level', 0, 100, 50, true);
  nRSIHi := CreateParameterInteger('RSI high level', 0, 100, 50, true);
  nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 12, true);
  nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 26, true);
  nMACD3 := CreateParameterInteger('MACD 3', 1, 999, 9, true);
  nEMA1 := CreateParameterInteger('EMA 1', 1, 999, 5, true);
  nEMA2 := CreateParameterInteger('EMA 2', 1, 999, 20, true);
  cCol3 := CreateParameterColor('3x Buy', clLime);
  cCol2 := CreateParameterColor('2x Buy', RGB(200, 255, 0));
  cCol1 := CreateParameterColor('1x Buy', RGB(255, 128, 0));
  cCol0 := CreateParameterColor('0x Buy', clRed);
  nMA := CreateParameterInteger('MA', 1, 999, 30, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
    RequiredBars := 5*MaxInt(MaxInt(MaxInt(nRSI, nEMA1+nEMA2), nMACD1+nMACD2+nMACD3), nMA);
    SignalView := svShowInMain;
  end;

{ Indicatorberekening }
  if bExpRSI then
    sRSI := RSI(Close, nRSI)
  else
    sRSI := RSI2(Close, nRSI);
  sMACD1 := MACD(Close, nMACD1, nMACD2);
  sMACD := MA(sMACD1, maExponential, nMACD3);
  sEMA1 := MA(Close, maExponential, nEMA1);
  sEMA2 := MA(Close, maExponential, nEMA2);
  sMA := MA(Close, maSimple, nMA);

{ signalen bepalen }
  iFirst := FirstValidIndex(sRSI);
  iFirst := MaxInt(iFirst, FirstValidIndex(sMACD));
  iFirst := MaxInt(iFirst, FirstValidIndex(sEMA1));
  iFirst := MaxInt(iFirst, FirstValidIndex(sEMA2));
  iFirst := MaxInt(iFirst, FirstValidIndex(sMA));
  s0 := FillSeries(CreateSeries(BarCount), 0);
  s100 := FillSeries(CreateSeries(BarCount), 100);
  for i:=iFirst to BarCount-1 do
  begin
    BuyScore := 0;
    SellScore := 0;
    if sRSI[i] > nRSIHi then BuyScore := BuyScore+1 else
      if sRSI[i] < nRSILo then SellScore := SellScore-1;

    if sMACD1[i] > sMACD[i] then BuyScore := BuyScore+1 else
      if sMACD1[i] < sMACD[i] then SellScore := SellScore-1;

    if sEMA1[i] > sEMA2[i] then BuyScore := BuyScore+1 else
      if sEMA1[i] < sEMA2[i] then SellScore := SellScore-1;

    if BuyScore = 3 then
      SetBarColor(0, i, cCol3)
    else if BuyScore = 2 then
      SetBarColor(0, i, cCol2)
    else if BuyScore = 1 then
      SetBarColor(0, i, cCol1)
    else
      SetBarColor(0, i, cCol0);

    if (State = stSetupLong) and (Close[i] > LongTrigger) then
    begin
      EnterLong(i);
      State := stNeutral;
    end else
    if (State = stSetupShort) and (Close[i] < ShortTrigger) then
    begin
      EnterShort(i);
      State := stNeutral;
    end else
    if BuyScore >= 3 then
    begin
      if Close[i] > sMA[i] then
      begin
        if State = stSetupLong then
          LongTrigger := Min(LongTrigger, High[i])
        else
          LongTrigger := High[i];
        State := stSetupLong;
      end;
    end else
    if BuyScore <= 0 then
    begin
      if Close[i] < sMA[i] then
      begin
        if State = stSetupShort then
          ShortTrigger := Max(ShortTrigger, Low[i])
        else
          ShortTrigger := Low[i];
        State := stSetupShort;
      end;
    end else
    begin
      ExitAny(i);
      State := stNeutral;
    end;
  end;
  
  with CreateLineOHLC(s100, s100, s0, s0) do
  begin
    Name := 'Score';
    Color := clLime;
    LineType := ltCandleStick;
  end;
end.

tesjoeva
Berichten: 145
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: macd combo

Bericht door tesjoeva » vr apr 13, 2018 1:01 pm

Hallo Eric,

Heb ik zo het juiste aangeleverd waar je om vroeg?

vr gr,

Plaats reactie