IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Calculer un % dans un tableau


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Calculer un % dans un tableau
    Bonjour

    J aimerais calculer un % de perte maxi pour un systeme de trading. Cela s apelle le DrawDown maxi.
    (plus de deatils si interessés ici http://www.andlil.com/le-maximum-drawdown-277.html)

    Donc je vais reprendre cet exemple :
    trade 1 : +12€

    trade 2 : + 30€

    trade 3 : -33€

    trade 4: +5€

    trade 5 : -10€

    trade 6 :+20€

    trade 7 : +35€

    trade 8 : -25€

    Quel est le Max Drawdown ? 38 !

    Donc dans cette exemple au trade 3 on a -33€ en Max Drawdown,

    le trade 4 à +5€ nous fait un -28€ de drawdown (ce n'est plus le max) (-33+5=28)

    puis on repère -10€ au trade 5 ce qui fait un Max Drawdown à -38€ (-28-10=-38), le Max drawndown à -33€ est du passé,

    le trade 6 à +20€ nous fait un drawdown (non max) à -18€,

    le 7ème trade de +35€ nous fait un Drawdown à 0 (-18+50=32) car le drawdown est de base zéro et ne peut qu'être négatif.
    C est tres simple mais tellement simple que je ne parviens pas à le convertir en code delphi, je ne sais pas par quel bout le prendre.

    Un peu d aide serait la bienvenue (pas necessairement la solution clef en main mais une piste pke là j ai meme pas le debut d une idee de commencement de raisonnement...)

    Merci d'avance.

    stephane

  2. #2
    Invité
    Invité(e)
    Par défaut
    A tester, ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    procedure TForm1.Button3Click(Sender: TObject);
    var
       ColTrade: array [1..8] of integer;
       i, iMaxDown, iValue: integer;
       bPremier: boolean;
    begin
       ColTrade[1] := 12;
       ColTrade[2] := 30;
       ColTrade[3] := -33;
       ColTrade[4] := 5;
       ColTrade[5] := -10;
       ColTrade[6] := 20;
       ColTrade[7] := 35;
       ColTrade[8] := -25;
     
       iMaxDown := 0;
       iValue := 0;
       bPremier := True;
       for i := 1 to 8 do
       begin
          // premier resultat negatif
          if (ColTrade[i] < 0) and (bPremier) then
          begin
             iValue := ColTrade[i];
             bPremier := False;
          end
          else
          begin
             // addition normal
             if not bPremier then
             begin
                Inc(iValue, ColTrade[i]);
             end;
          end;
     
          // on garde le plus petit
          if iMaxDown > iValue then
             iMaxDown := iValue;
       end;
     
       ShowMessage(IntToStr(iMaxDown));
    end;

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Je te remercie mais cela ne fonctionne pas correctement
    En effet, si je poursuit un peu la serie en mettant 4 x -25 consecutivement, on devrait obtenir un -100 alors que le resultat affiché est-83.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    var
      ColTrade: array [1 .. 12] of integer;
      I, iMaxDown, iValue: integer;
      bPremier: Boolean;
    begin
      ColTrade[1] := 12;
      ColTrade[2] := 30;
      ColTrade[3] := -33;
      ColTrade[4] := 5;
      ColTrade[5] := -10;
      ColTrade[6] := 20;
      ColTrade[7] := 35;
      ColTrade[8] := -25;
      ColTrade[9] := -25;
      ColTrade[10] := -25;
      ColTrade[11] := -25;
      ColTrade[12] := 10;
      iMaxDown := 0;
      iValue := 0;
      bPremier := True;
     
      for I := 1 to 12 do
      begin
        // premier resultat negatif
        if (ColTrade[I] < 0) and (bPremier) then
        begin
          iValue := ColTrade[I];
          bPremier := false;
        end
        else
        begin
          // addition normal
          if not bPremier then
          begin
            inc(iValue, ColTrade[I]);
          end;
        end;
     
        // on garde le plus petit
        if iMaxDown > iValue then
          iMaxDown := iValue;
      end;
     
      ShowMessage(inttostr(iMaxDown));
    Je pourrais boucler sur la serie et determiner les plus haut et plus bas mais ce n est pas necessairement là que se trouve le DDMax.
    En effet pour une serie qui partirait de zero pour termier à 100, on pet tres bien avoir une pointe à 30, une chute jusqu'à -30 puis une montee sans discontinuee jusqu'à 100. Là le DDMax serait de 60...

    peut etre qu'à la place des valeurs je devrais prendre en compte la somme des valeurs puisque c est comme cela qu est representée la courbe....

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Bon j ai enfin trouvé, c etait pas bien compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    var
      ColTrade: array [1 .. 12] of integer;
      I, J, Id_Max, Id_Min, iMaxDown, Diff, Diff_Max: integer;
     
    begin
      ColTrade[1] := 12;
      ColTrade[2] := 42;
      ColTrade[3] := 9;
      ColTrade[4] := 14;
      ColTrade[5] := 4;
      ColTrade[6] := 24;
      ColTrade[7] := 59;
      ColTrade[8] := 34;
      ColTrade[9] := 9;
      ColTrade[10] := -16;
      ColTrade[11] := -41;
      ColTrade[12] := -31;
     
      iMaxDown := 0;
      Diff := 0;
      Diff_Max := 0;
      Id_Max := 1;
      Id_Min := 1;
     
      for I := 1 to 12 do
      begin
        Memo1.Lines.Add(inttostr(I) + #9 + inttostr(ColTrade[I]));
        for J := I + 1 to 12 do
        begin
          Diff := ColTrade[J] - ColTrade[I];
          if (Diff < Diff_Max) then
          begin
            Diff_Max := Diff;
            Id_Min := J;
            Id_Max := I;
          end;
        end;
      end;
     
      Memo1.Lines.Add('Id_Max ' + inttostr(Id_Max));;
      Memo1.Lines.Add('Id_Min ' + inttostr(Id_Min));
      iMaxDown := ColTrade[Id_Max] - ColTrade[Id_Min];
      Memo1.Lines.Add('DDMAX ' + inttostr(iMaxDown));
    Bon maintenant me reste plus qu'à implanter ça dans mon super logiciel d'analyse boursiere pour devenir millionnaire

    merci @retwas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul automatique dans un tableau dynamique
    Par samiker dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2014, 00h17
  2. [XL-2013] Calcul complexe dans un tableau
    Par DelilahH dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/11/2014, 12h34
  3. Calcul automatique dans un tableau
    Par valmeras dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/04/2014, 16h25
  4. [V5] Calcul % Somme dans un tableau
    Par MikaelBO dans le forum Deski
    Réponses: 8
    Dernier message: 25/06/2009, 12h06
  5. affichage et calcule de la date dans un tableau
    Par argon dans le forum Interfaces Graphiques en Java
    Réponses: 35
    Dernier message: 22/06/2006, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo