"Hedging" dans les opérations de change - Pourquoi le faire ? - page 7

 
//+------------------------------------------------------------------+
//|                                          Sonic the hedge hog.mq4 |
//|      Copyright 2018, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//|             The code should be used for educational purpose only.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

datetime time;
int TrailingStop=100;
double Lots=0.01;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   time=iTime(_Symbol,PERIOD_D1,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   exit();
   enter();
  }
//+------------------------------------------------------------------+
//| enter
//+------------------------------------------------------------------+
void enter()
  {
//--- new bar ?
   if(time!=iTime(_Symbol,PERIOD_D1,0))
     {
      int ticket_buy=-1;
        {
         while(ticket_buy<0)
           {
            ticket_buy=OrderSend(_Symbol,OP_BUY,Lots,Ask,3,NULL,NormalizeDouble(Bid+100*Point,Digits),"Sonic",1234,0,clrGreen);
           }
        }
      int ticket_sell=-1;
        {
         while(ticket_sell<0)
           {
            ticket_sell=OrderSend(_Symbol,OP_SELL,Lots,Bid,3,NULL,NormalizeDouble(Ask-100*Point,Digits),"Sonic",1234,0,clrRed);
           }
        }
      if(ticket_buy>0 && ticket_sell>0)
        {
         time=iTime(_Symbol,PERIOD_D1,0);
        }
     }
  }
//+------------------------------------------------------------------+
//| exit
//+------------------------------------------------------------------+
void exit()
  {
//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for(int cnt=OrdersTotal(); cnt>=0; cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(TimeDay(OrderOpenTime())!=TimeDay(time))
           {
            bool close=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,clrBlue);
              {
               if(close==0)
                 {
                  Print("OrderCloseError"+IntegerToString(OrderTicket()));
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

C'est assez simple.

Je l'ai fait l'année dernière.

J'attends donc les mêmes résultats, ou comme certains le disent, encore meilleurs de l'autre technique.

Je n'aurai aucun problème à accepter ce qui en sortira, et je n'essaie pas de faire passer des vérités invalides.

J'essaie juste de garder le forum vivant, un peu de compétition au lieu de tous les sujets "j'ai besoin, je veux".

 
Marco vd Heijden:

C'est assez simple.

Je l'ai fait l'année dernière.

J'attends donc les mêmes résultats, ou comme certains le disent, encore meilleurs de l'autre technique.

Je n'aurai aucun problème à accepter ce qui en sortira, et je n'essaie pas de faire passer des vérités invalides.

J'essaie juste de garder le forum vivant, un peu de compétition au lieu de tous les sujets "j'ai besoin, je veux".

High Marco,

Voici le code modifié pour fonctionner sans couverture.


	          
 

Désolé,

petite erreur.

Je reviens bientôt.

 

Voici le code pour l'absence de couverture

//+------------------------------------------------------------------+
//|                                          Sonic the hedge hog.mq4 |
//|      Copyright 2018, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//|             The code should be used for educational purpose only.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

datetime time;
//int TrailingStop=100;
double Lots=0.01;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   time=iTime(_Symbol,PERIOD_D1,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   exit();
   enter();
  }
//+------------------------------------------------------------------+
//| enter
//+------------------------------------------------------------------+
void enter()
  {
   static double BuyAt=0,SellAt=0,BuyTP=0,SellTP=0;

//--- new bar ?
   if(time!=iTime(_Symbol,PERIOD_D1,0))
     {
      SellAt=NormalizeDouble(Bid+100*Point,Digits);
      SellTP=NormalizeDouble(Ask-100*Point,Digits);
      BuyAt=NormalizeDouble(Ask-100*Point,Digits);
      BuyTP=NormalizeDouble(Bid+100*Point,Digits);
      time=iTime(_Symbol,PERIOD_D1,0);
     }

   if(SellAt>0 && Bid>=SellAt)
     {
      int ticket_sell=-1;
      ticket_sell=OrderSend(_Symbol,OP_SELL,Lots,Bid,3,NULL,SellTP,"Sonic",1234,0,clrRed);
      if(ticket_sell>0)
        {
         BuyAt=0;
         SellAt=0;
        }
     }

   if(BuyAt>0 && Ask<=BuyAt)
     {
      int ticket_buy=-1;
      ticket_buy=OrderSend(_Symbol,OP_BUY,Lots,Ask,3,NULL,BuyTP,"Sonic",1234,0,clrGreen);
      if(ticket_buy>0)
        {
         BuyAt=0;
         SellAt=0;
        }
     }
  }
//+------------------------------------------------------------------+
//| exit
//+------------------------------------------------------------------+
void exit()
  {
//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for(int cnt=OrdersTotal()-1; cnt>=0; cnt--)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(TimeDay(OrderOpenTime())!=TimeDay(time))
           {
            bool close=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,clrBlue);
              {
               if(close==false)
                 {
                  Print("OrderCloseError"+IntegerToString(OrderTicket()));
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 

Ok merci, je l'ai compilé et voici le résultat :


 
Marco vd Heijden:

Ok merci, je l'ai compilé et voici le résultat :


Veuillez l'essayer sur chaque tick, Les prix ouverts ne sont pas bons pour tester ce type de trading où les transactions sont entrées à certains niveaux.

Et, bien sûr, testez-le contre le vôtre sur les mêmes données.

 
Ok, ils se ressemblent beaucoup tous les deux quand ils sont exécutés à chaque tic.
 
Marco vd Heijden:
D'accord, les deux se ressemblent beaucoup lorsqu'ils sont exécutés à chaque tick.


Donc ... sans appliquer la soi-disant technique de couverture mentionnée dans ce sujet, les codeurs respectés sur notre forum ont montré que la stratégie proposée par Marco peut également être mise en œuvre d'une manière différente avec quelques avantages financiers supplémentaires.

En fait, "toute stratégie arbitrairement sélectionnée" peut être montrée ainsi ... et cela prouve universellement la déclaration de Keith dans son premier post "ce n'est pas seulement mon opinion que le "hedging" dans le Forex est improductif et inutile, c'est un fait".


Vous l'avez remarqué ?

Ce résultat est en accord avec le rasoir d'Occam, énoncé comme "la pluralité ne doit pas être posée sans nécessité" ou comme "les entités ne doivent pas être multipliées au-delà de la nécessité".

Donc, soyez simple pour atteindre la perfection ... ou bien soyez simple pour vous épargner des coûts supplémentaires et des risques inutiles sans aucun avantage réel dans ce cas.


Bonne conception de stratégie !)

 

Eh bien, le spectacle n'est pas terminé jusqu'à ce que la grosse dame chante.

Restez à l'écoute.

 
Marco vd Heijden:
Ok, ils se ressemblent tous les deux quand ils sont exécutés à chaque tick.

N'avez-vous pas vu que ma version a produit une légère augmentation des profits ?

Raison: