Coder en MQL5 le Portefeuille Permanent de Harry Browne

Présentation, Développement, Améliorations et Ressources pour les Stratégies de Trading Automatique.

Modérateur : Administrateurs

Message
Auteur
Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#26 Message par Trader55 »

Voilà , j'ai MT5, tout est pret

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#27 Message par Pierre8r »

Je vais essayer de coder aujourd'hui vendredi 16 novembre jusqu'à 11H30.
Si vous souhaitez coder avec moi, ou me regarder coder en partage d'écran sous Skype ou Hangouts,
je suis dispo.
Mon pseudo Skype Pierre8r
Préciser que c'est pour MQL5.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#28 Message par Pierre8r »

Je vais essayer de coder aujourd'hui vendredi 16 novembre jusqu'à 16H30.
Si vous souhaitez coder avec moi, ou me regarder coder en partage d'écran sous Skype ou Hangouts,
je suis dispo.
Mon pseudo Skype Pierre8r
Préciser que c'est pour MQL5.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#29 Message par Pierre8r »

ça progresse, mais il y a encore du boulot.

Code : Tout sélectionner

//+------------------------------------------------------------------+
//|                                         eaPermanentPortfolio.mq5 |
//|                                   Copyright 2018, Pierre Rougier |
//|                                    http://www.apprendre-mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Pierre Rougier"
#property link      "http://www.apprendre-mql5.com"
#property version   "1.00"

#include <Trade\Trade.mqh>

CTrade myTradingControlPanel;

input  int  capital_dedicated_to_strategy=10000;

input string stocks= "VTI";
input string bonds ="TLTUS";
input string cash = "SHY";
input string gold = "GLD";

input int      magicNumber=12345;

int year_saved=0;
bool is_trades_already_open=false;

double total_current_value=0;
double target_value=0;
double current_value_stocks= 0;
double current_value_bonds = 0;
double current_value_cash = 0;
double current_value_gold = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MqlDateTime mql_datetime;
   TimeToStruct(iTime(_Symbol,_Period,0),mql_datetime);
   year_saved=mql_datetime.year;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(isNewYear())
     {
      if(!is_trades_already_open)
        {StartStrategy();}
      else
        {RebalanceAllAssetsClass();}
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isNewYear()
  {

   MqlDateTime mql_datetime;
   TimeToStruct(iTime(_Symbol,_Period,0),mql_datetime);

   if(mql_datetime.year!=year_saved)
     {
      year_saved=mql_datetime.year;
      return true;
     }
   else
     {return false;}
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartStrategy()
  {
  
   target_value=capital_dedicated_to_strategy/4;

   Print("/*§§*/ total_current_value :"+DoubleToString(total_current_value));
   Print("/*§§*/ target_value :"+DoubleToString(target_value));

   Rebalance(stocks,0);
   Rebalance(bonds,0);
   Rebalance(cash,0);
   Rebalance(gold,0);

   is_trades_already_open=true;

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RebalanceAllAssetsClass()
  {
   ComputeValuePositionsByAssetsClass();
   total_current_value=current_value_stocks+current_value_bonds+current_value_cash+current_value_gold;
   target_value=total_current_value/4;

   Print("/*§§*/ total_current_value :"+DoubleToString(total_current_value));
   Print("/*§§*/ target_value :"+DoubleToString(target_value));

   Rebalance(stocks,current_value_stocks);
   Rebalance(bonds,current_value_bonds);
   Rebalance(cash,current_value_cash);
   Rebalance(gold,current_value_gold);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Rebalance(string asset_class_type,double current_value_asset)
  {

   double amount=0;
   int  quantity=0;
   double  ask=SymbolInfoDouble(asset_class_type,SYMBOL_ASK);

   if(current_value_asset>target_value)
     {
      amount=current_value_asset-target_value;
      quantity=(int)NormalizeDouble((amount/ask),0);
      if(quantity>0)
        {
         SellSurplusAssetClass(asset_class_type,quantity);
        }
     }
   else
     {
      amount=target_value-current_value_asset;
      quantity=(int)NormalizeDouble((amount/ask),0);
      if(quantity>0)
        {
         BuyMissingPartAssetClass(asset_class_type,quantity);
        }
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BuyMissingPartAssetClass(string asset_class_type,int quantity)
  {

// Open a Buy (i.e. long) position
   myTradingControlPanel.PositionOpen(asset_class_type,ORDER_TYPE_BUY,quantity,
                                      0,
                                      //                                      SymbolInfoDouble(asset_class_type,SYMBOL_ASK),
                                      0,0,"Buy Trade. Magic Number #"
                                      +(string) myTradingControlPanel.RequestMagic());
// Request is completed or order placed
   if(myTradingControlPanel.ResultRetcode()==TRADE_RETCODE_PLACED || myTradingControlPanel.ResultRetcode()==TRADE_RETCODE_DONE)
     {
      Print("Entry rules: A ",asset_class_type," Buy order has been successfully placed with Ticket#: ",myTradingControlPanel.ResultOrder());
     }
   else
     {
      Print("Entry rules: A ",asset_class_type," Buy order request could not be completed. Error: ",GetLastError());
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellSurplusAssetClass(string asset_class_type,int quantity)
  {
// Close position
   myTradingControlPanel.PositionOpen(asset_class_type,ORDER_TYPE_SELL,quantity,
                                      0,
                                      //                                      SymbolInfoDouble(asset_class_type,SYMBOL_ASK),
                                      0,0,"Sell Trade. Magic Number #"
                                      +(string) myTradingControlPanel.RequestMagic());
// Request is completed or order placed
   if(myTradingControlPanel.ResultRetcode()==TRADE_RETCODE_PLACED || myTradingControlPanel.ResultRetcode()==TRADE_RETCODE_DONE)
     {
      Print("Entry rules: A ",asset_class_type," Sell order has been successfully placed with Ticket#: ",myTradingControlPanel.ResultOrder());
     }
   else
     {
      Print("Entry rules: A ",asset_class_type," Sell order request could not be completed. Error: ",GetLastError());
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ComputeValuePositionsByAssetsClass()
  {
// Loop through all open positions 
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      ulong ticketNumber=0;
      // This selects open position by the order they appear in our list of positions
      ticketNumber=PositionGetTicket(i);
      if(ticketNumber==0)
        {
         Print("Exit rules: Position exists but not selected. Error: ",GetLastError());
         ResetLastError();
         continue;
        }

      if(PositionGetInteger(POSITION_MAGIC)==magicNumber)
        {
         string symbol=PositionGetString(POSITION_SYMBOL);

         if(symbol==stocks)
           {
            current_value_stocks=current_value_stocks+PositionGetDouble(POSITION_PRICE_CURRENT);
           }
         else if(symbol==bonds)
           {
            current_value_bonds=current_value_bonds+PositionGetDouble(POSITION_PRICE_CURRENT);
           }
         else if(symbol==cash)
           {
            current_value_cash=current_value_cash+PositionGetDouble(POSITION_PRICE_CURRENT);
           }
         else if(symbol==gold)
           {
            current_value_gold=current_value_gold+PositionGetDouble(POSITION_PRICE_CURRENT);
           }
        }
     }

  };
//+------------------------------------------------------------------+

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#30 Message par Pierre8r »

Bonjour,

C'est la première version qui semble tourner.

Image

Code : Tout sélectionner

//+------------------------------------------------------------------+
//|                                         eaPermanentPortfolio.mq5 |
//|                                   Copyright 2018, Pierre Rougier |
//|                                    http://www.apprendre-mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Pierre Rougier"
#property link      "http://www.apprendre-mql5.com"
#property version   "1.00"

#include <Trade\Trade.mqh>

CTrade trade_control;

input  int  capital_dedicated_to_strategy=10000;

input string stocks= "VTI";
input string bonds ="TLTUS";
input string cash = "SHY";
input string gold = "GLD";

input int      magicNumber=12345;

int year_saved=0;
bool is_trades_already_open=false;

double total_current_value=0;
double target_value=0;
double current_value_stocks= 0;
double current_value_bonds = 0;
double current_value_cash = 0;
double current_value_gold = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

   trade_control.SetExpertMagicNumber(magicNumber); // Set Magic Number

   MqlDateTime mql_datetime;
   TimeToStruct(iTime(_Symbol,_Period,0),mql_datetime);
   year_saved=mql_datetime.year;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(isNewYear())
     {
      if(!is_trades_already_open)
        {StartStrategy();}
      else
        {RebalanceAllAssetsClass();}
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isNewYear()
  {

   MqlDateTime mql_datetime;
   TimeToStruct(iTime(_Symbol,_Period,0),mql_datetime);

   if(mql_datetime.year!=year_saved)
     {
      year_saved=mql_datetime.year;
      return true;
     }
   else
     {return false;}
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartStrategy()
  {

   target_value=capital_dedicated_to_strategy/4;

   Print("/*§§*/ total_current_value :"+DoubleToString(total_current_value));
   Print("/*§§*/ target_value :"+DoubleToString(target_value));

   Rebalance(stocks,0);
   Rebalance(bonds,0);
   Rebalance(cash,0);
   Rebalance(gold,0);

   is_trades_already_open=true;

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RebalanceAllAssetsClass()
  {
   ComputeValuePositionsByAssetsClass();
   total_current_value=current_value_stocks+current_value_bonds+current_value_cash+current_value_gold;
   target_value=total_current_value/4;

   Print("/*§§*/ total_current_value :"+DoubleToString(total_current_value));
   Print("/*§§*/ target_value :"+DoubleToString(target_value));

   Rebalance(stocks,current_value_stocks);
   Rebalance(bonds,current_value_bonds);
   Rebalance(cash,current_value_cash);
   Rebalance(gold,current_value_gold);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Rebalance(string asset_class_type,double current_value_asset)
  {

   double amount=0;
   int  quantity=0;
   double  ask=SymbolInfoDouble(asset_class_type,SYMBOL_ASK);

   if(current_value_asset>target_value)
     {
      amount=current_value_asset-target_value;
      quantity=(int)NormalizeDouble((amount/ask),0);
      if(quantity>0)
        {
         SellSurplusAssetClass(asset_class_type,quantity);
        }
     }
   else
     {
      amount=target_value-current_value_asset;
      quantity=(int)NormalizeDouble((amount/ask),0);
      if(quantity>0)
        {
         BuyMissingPartAssetClass(asset_class_type,quantity);
        }
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BuyMissingPartAssetClass(string asset_class_type,int quantity)
  {

// Open a Buy (i.e. long) position
   trade_control.PositionOpen(asset_class_type,ORDER_TYPE_BUY,quantity,
                              0,
                              //                                      SymbolInfoDouble(asset_class_type,SYMBOL_ASK),
                              0,0,"Buy Trade. Magic Number #"
                              +(string) trade_control.RequestMagic());
// Request is completed or order placed
   if(trade_control.ResultRetcode()==TRADE_RETCODE_PLACED || trade_control.ResultRetcode()==TRADE_RETCODE_DONE)
     {
      Print("Entry rules: A ",asset_class_type," Buy order has been successfully placed with Ticket#: ",trade_control.ResultOrder());
     }
   else
     {
      Print("Entry rules: A ",asset_class_type," Buy order request could not be completed. Error: ",GetLastError());
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellSurplusAssetClass(string asset_class_type,int quantity)
  {
// Close position
   trade_control.PositionClosePartial(asset_class_type,quantity);
// Request is completed or order placed
   if(trade_control.ResultRetcode()==TRADE_RETCODE_PLACED || trade_control.ResultRetcode()==TRADE_RETCODE_DONE)
     {
      Print("Entry rules: A ",asset_class_type," Sell order has been successfully placed with Ticket#: ",trade_control.ResultOrder());
     }
   else
     {
      Print("Entry rules: A ",asset_class_type," Sell order request could not be completed. Error: ",GetLastError());
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ComputeValuePositionsByAssetsClass()
  {
// Loop through all open positions 
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      ulong ticketNumber=0;
      // This selects open position by the order they appear in our list of positions
      ticketNumber=PositionGetTicket(i);
      if(ticketNumber==0)
        {
         Print("Exit rules: Position exists but not selected. Error: ",GetLastError());
         ResetLastError();
         continue;
        }

      if(PositionGetInteger(POSITION_MAGIC)==magicNumber)
        {
         string symbol=PositionGetString(POSITION_SYMBOL);

         if(symbol==stocks)
           {
            current_value_stocks=current_value_stocks+PositionGetDouble(POSITION_PROFIT);
           }
         else if(symbol==bonds)
           {
            current_value_bonds=current_value_bonds+PositionGetDouble(POSITION_PROFIT);
           }
         else if(symbol==cash)
           {
            current_value_cash=current_value_cash+PositionGetDouble(POSITION_PROFIT);
           }
         else if(symbol==gold)
           {
            current_value_gold=current_value_gold+PositionGetDouble(POSITION_PROFIT);
           }
        }
     }

  };
//+------------------------------------------------------------------+
Pièces jointes
PPDaily.jpg

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#31 Message par Trader55 »

C'est super Pierre !!!
Je vais essayer de mon coté.

Pas de problèmes particuliers pour backtester en multipaires ?

Au fait, en sortant juste un peu du sujet, quel retour d’expérience avec angevoyageur de mql ?
Je sais qu'il est top pour résoudre les pb sur le forum , et en temps que développeur ?

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#32 Message par Pierre8r »

Trader55 a écrit :C'est super Pierre !!!
Merci.
Trader55 a écrit :Pas de problèmes particuliers pour backtester en multipaires ?
Il faut faire un back test en daily, sinon le back test démarre plus tard.
Ce n’est pas multipaires, c'est multi ETF ;-)
Je n'ai pas encore trouvé la combine pour que le back test ouvre plusieurs graphes, sinon oui il trade muti ETF.
Trader55 a écrit :Au fait, en sortant juste un peu du sujet, quel retour d’expérience avec angevoyageur de mql ?
Je sais qu'il est top pour résoudre les pb sur le forum , et en temps que développeur ?
Il a travaillé 2 fois pour moi.
A chaque fois je lui ai mis 5 étoiles.

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#33 Message par Trader55 »

Pour le BT, je vais regarder, ce soir ou demain.

Bonne soirée à toi

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#34 Message par Trader55 »

Moi çà donne çà :
Rougier.JPG
Bizarre on a pas les mêmes resultats +20% de 2005 à 2018 pour moi. Je te joins la config du StratTester en PJ.

Mais je pensais que le BT multipaire fonctionnait ainsi :
On désigne un EA et on désigne différentes devises/ETF etc... et L'EA s’exécute sur ces devises.

Or là tu as codé les 4 ETF dans le programme de l'EA.

Tu comprends ce que je veux dire ?
ReportTester-40511162.zip
(5.66 Kio) Téléchargé 307 fois

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#35 Message par Pierre8r »

Moi ça donne ça avec capital de 10 000 $ et en H1.
En principe H1 ne devrait rien changer.
Dans ton fichier zip il n'y a pas les images.


Image
ReportTester-40507754.zip
(47.37 Kio) Téléchargé 320 fois
Pièces jointes
PPReportH1.jpg

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#36 Message par Trader55 »

Ce qui est important ce n'est pas le graphique mais le rport.

Regardes le tien, tu as pris le gold comme chart source et ton history quality est de 2% vs le mien de 94%...

Il faut au moins un history qualtity de 90%, le mieux c'est 99%

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#37 Message par Pierre8r »

Trader55 a écrit :Ce qui est important ce n'est pas le graphique mais le rport.
Regardes le tien, tu as pris le gold comme chart source et ton history quality est de 2% vs le mien de 94%...
Il faut au moins un history qualtity de 90%, le mieux c'est 99%
L'history quality pour une stratégie qui ouvre des ordres une fois par an est à mon avis sans importance.

J'ai refait le backtest SHY en daily, départ du BT le 01 06 2004
Si on regarde ton report on constate 2 choses :
Pas d'ordre GLD ouvert en janvier 2005, c'est un problème.
Les ordres peuvent s'ouvrirent vers 10h, nous n'avons donc pas les mêmes prix.
Pièces jointes
2004-06-01-SHY.zip
(45.44 Kio) Téléchargé 292 fois
ReportTester-40511162.jpg
2004-06-01-SHY.jpg

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#38 Message par Trader55 »

Pour mettre au point, et si tu le veux bien, on va partir sur les mêmes setup à commencer par les dates de départ et fin :)
Mon compte AM est en euros mais pour le strategy tester j'ai pris 10000$ de 06/2004 à aujourd'hui.
J'obtiens ce résultat : GrossProfit 2678 ( en gros 26% sur 14 ans).
On devrait trouver exactement la même chose, mais en effet il y a un problème sur l'EA, certaines années il n'achète que 3 ETF, (mais c'est peut être normal) , j'ai pas encore regardé le code. :(

Le mieux pour comparer est d’échanger cette première page puis analyser trade par trade pour comprendre . Mais çà va aller, 4 trades par an !! :)
Capture.JPG
Capture1.JPG

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#39 Message par Pierre8r »

Trader55 pourais-tu faire un test avec exactement mes options ?

Symbol SHY
Période du 01 06 2004 à aujourd'hui

Currency USD
Capital 10 000
Pièces jointes
PP-VB.jpg
PP-VB.jpg (32.5 Kio) Consulté 14598 fois

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#40 Message par Trader55 »

Et voici...
Les resultats c'est n'importe quoi avec un quality history de 0% !!!
ReportTester-40511162.zip
(5.33 Kio) Téléchargé 301 fois

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#41 Message par Trader55 »

Bon, pas trop le temps en ce moment de creuser mais si je lis ci dessous, la mauvaise qualité de l'histo----------> broker.
Faudrait tester avec un autre.

A lire

https://www.mql5.com/en/forum/7028

Qu'en penses tu ?

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#42 Message par Pierre8r »

https://www.portfoliovisualizer.com/
ça a l'air intéressant.
A voir à l'usage.
Portfolio_20181127104932.pdf
(173.84 Kio) Téléchargé 214 fois
https://www.portfoliovisualizer.com/bac ... tion4_1=25

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#43 Message par Trader55 »

Oui c'est bien pour ton cas spécifique de ce portefeuille.

Pour tester un EA, il va bien falloir passer par le strategy tester de mql...

Maintenant , on voit que ce portefeuille d'Harry Browne tient en effet la route sur le long terme.
J'envisage d'ouvrir une petite assurance vie supplémentaire et y repartir ce modèle en UC. Je vais regarder chez Lynxea si ils ont les UC adéquates et si il y a une petite promo en ce moment ;)

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#44 Message par Pierre8r »

Trader55 a écrit : J'envisage d'ouvrir une petite assurance vie supplémentaire et y repartir ce modèle en UC.
Attention !!! , ma file n'est pas une incitation d'investir dans un portefeuille permanent, ou un autre genre de placement.
Je n'ai pas le droit de conseiller des particuliers pour leurs investissements.
Je ne pense pas en avoir les compétences.
Je n'en n'ai pas le souhait.

A titre personnel, oui la démarche du HBPP m'intéresse, mais à ce jour je ne suis nullement déterminé à placer une partie de mon patrimoine financier dans un HBPP.
Je rappelle mes motivations indiquées dans le premier post de la file.

Mes motivations :
  • Backtester moi-même le Portefeuille Permanent de Harry Browne.
    Tester la fonctionnalité backtest multi-produits de MetaTrader 5.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#45 Message par Pierre8r »

Je pense créer un backtest du permanent portfolio de Harry Browne sous Google Sheets.
L'idée c'est de pouvoir comparer les résultats du backtest sous Google Sheets et ceux sous MT5.

J'ai "commencé" à le coder, c'est juste un début, pour le moment il n'y a presque rien.
https://docs.google.com/spreadsheets/d/ ... sp=sharing

Si quelqu'un souhaite m'aider il est le bienvenu.
:D :D :D :D :D :D

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#46 Message par Pierre8r »

Pour cette première version du backtest Google Sheets,
https://docs.google.com/spreadsheets/d/ ... sp=sharing

je n'obtiens pas les memes résultats que ceux de http://www.portfoliovisualizer.com
19130,98 $ et $24,915

https://www.portfoliovisualizer.com/bac ... tion4_1=25

Avatar de l’utilisateur
Trader55
VideoBourse family
Messages : 1280
Inscription : 21 sept. 2014, 21:30

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#47 Message par Trader55 »

La demarche n'est pas mauvaise.

Heureusement il y a si peu de valeurs (4*13) qu'un bon fichier excel t'aidera à trouver le résultat exact...
Je peux faire çà ce weekend si tu me passes ici les valeurs des 4 ETF
au 1er janvier de 2005 à 2018 (enfin à la première date de cotation du début de l'année).

Have a nice evening

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#48 Message par Pierre8r »

Trader55 a écrit :La demarche n'est pas mauvaise.

Heureusement il y a si peu de valeurs (4*13) qu'un bon fichier excel t'aidera à trouver le résultat exact...
Je peux faire çà ce weekend si tu me passes ici les valeurs des 4 ETF
au 1er janvier de 2005 à 2018 (enfin à la première date de cotation du début de l'année).

Have a nice evening
Je me rends compte que je me suis trompé.
J'ai calculé le HBPP sur des valeurs mensuelles, normal que je n'ai pas les mêmes résultats.
Il faut que je modifie mon Google Sheets.
Je ne vois pas ce que tu as à faire c'est déjà fait.
Le seul problème c'est que j'ai utilisé des données mensuelles et pas annuelles.
En principe je fais la modif samedi.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#49 Message par Pierre8r »

Je laisse tomber :
Coder en MQL5 le Portefeuille Permanent de Harry Browne

Mon nouveau but est de
Coder en Python le Portefeuille Permanent de Harry Browne

Je pense utiliser la plateforme backtrader
https://www.backtrader.com
Mon premier objectif est d'apprendre le langage Python.
J'ai trouvé beaucoup de ressources sur internet pour apprendre Python.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

Re: Coder en MQL5 le Portefeuille Permanent de Harry Browne

#50 Message par Pierre8r »

Nouveau revirement. :D
Je laisse tomber :
Coder en Python le Portefeuille Permanent de Harry Browne
Explications ici :
http://www.videobourse.fr/forum-forex/v ... 415#p88415

Je reprends l'objectif de :
Coder en MQL5 le Portefeuille Permanent de Harry Browne
mais pas pour le moment, je mets ce projet en pause.

Répondre