Je rédigerai un conseiller gratuitement - page 41

 
Anton Kedo:
le sujet semble avoir été abandonné.
Non, pourquoi... ils le lisent parfois, c'est juste que les demandes du genre "j'ai une idée cool, comme un graal" sont rarement suivies. Surtout sans TDR.
 
Bon après-midi. J'ai une idée intéressante sur la façon de modifier l'illan (martingale) pour empêcher le plummet. L'essence est très longue à décrire ici, qui va essayer d'expliquer l'essence de l'idée dans Skype.
 
Evgeniu Semenuta:
Bon après-midi. J'ai une idée intéressante sur la façon de modifier l'illan (martingale) pour empêcher le plummet. L'essence d'une très longue description ici, qui va essayer d'expliquer l'essence de l'idée dans Skype.
Lisez l'article précédent !
 

Ok. Laissez-moi essayer de le décrire. Supposons que le prix baisse, et que l'illan a déjà commencé à acheter. Naturellement, il ajoute des positions pour acheter en augmentant le lot et ainsi de suite, jusqu'à ce que le prix remonte ou que le dépôt soit épuisé. Je voudrais essayer la variante suivante : lorsque le prix atteint 10 genoux, la chouette place immédiatement 2 ordres en attente (total des LOS des ordres précédents placés divisé par 2) en 15 points.

1 ordre fixe uniquement un stop loss sur le niveau de profit des 10 genoux précédents

2) Ordre de Stop Loss sur le niveau de profit des 10 bends précédents, profit 15

Nous avons alors deux résultats possibles : le prix fixe un stop loss, revient, ferme la grille de 10 coudes et nous sommes libérés de deux ordres perdants. Ou bien le marché descend de façon persistante, le 2ème ordre ferme sur le profit et met un ou deux autres ordres négatifs du net de 10 plis après environ 10 points et ferme un ou deux négatifs. Le deuxième ordre en attente tire un stop loss à Breakeven et attend la fin.

D'une manière ou d'une autre. Il est difficile de l'expliquer par des mots (. Si vous êtes intéressé, je vous expliquerai l'idée en détail sur le graphique dans Skype.

 
Evgeniu Semenuta:

Ok. Laissez-moi essayer de le décrire. Supposons que le prix baisse, et que l'illan a déjà commencé à acheter. Naturellement, il ajoute des positions pour acheter en augmentant le lot et ainsi de suite, jusqu'à ce que le prix baisse ou que le dépôt soit épuisé. Je voudrais essayer la variante suivante : lorsque le prix atteint 10 genoux, la chouette place immédiatement 2 ordres en attente (total des LOS des ordres précédents placés divisé par 2) en 15 points.

1 ordre fixe uniquement un stop loss sur le niveau de profit des 10 genoux précédents

2) Ordre de Stop Loss sur le niveau de profit des 10 bends précédents, profit 15

Nous avons alors deux résultats possibles : le prix fixe un stop loss, revient, ferme la grille de 10 coudes et nous sommes libérés de deux ordres perdants. Ou bien le marché descend de façon persistante, le 2ème ordre ferme sur le profit et met un ou deux autres ordres négatifs du net de 10 plis après environ 10 points et ferme un ou deux négatifs. Le deuxième ordre en suspens tire un stop loss au seuil de rentabilité et attend la fin.

D'une manière ou d'une autre. Il est difficile de l'expliquer par des mots (. Si vous êtes intéressé, je vous expliquerai l'idée en détail sur le graphique dans Skype.

L'idée habituelle qui mène à l'inévitable prune ! Les détails ne sont plus intéressants !
 

Bonjour, l'option de retravailler l'EA originale est-elle envisagée dans ce fil de discussion ? Si c'est le cas, voici la description :

J'ai un EA qui a besoin d'être affiné ( il ne ferme pas les trades par lui-même, lorsque le trading est autorisé et que deux paramètres ne sont pas remplis : indication de la zone de fermeture et indication de la taille du volume de fermeture partielle )ToR Description :

Délai : au choix


Symboles utilisés :

Bandes de Bollinger : période 20

aberrations 2

appliqué à la fermeture



ADX : période 14

appliqué à la fermeture

fixer le niveau à 25



Signal d'achat : pendant un flat (lorsque le niveau ADX est inférieur à 25), attendez que le prix clôture au niveau de la bande de Bollinger inférieure (le paramètre o définit le point d'ouverture de l'ordre, la distance entre la bande de Bollinger moyenne et la bande de B ollinger inférieure est définie comme 100 %, 0 % est au niveau de la bande de Bollinger inférieure, 10 % est plus haut, etc.), puis attendez la hausse du prix sur la bougie de confirmation. Nous ouvrons l'achat. La fermeture de l'ordre dépend des options de l'EA, les paramètres des options seront expliqués plus tard. L'ordre est fermé avec le paramètre n lorsqu'il touche la bande médiane de Bollinger (le paramètre n est défini en pourcentage, il définit quelle partie du volume est fermée, en lots cette valeur est arrondie vers le bas, 0% signifie que rien n'est fermé). Le stop loss est fixé au prix d'ouverture de l'ordre, puis l'ordre est entièrement fermé avec le paramètre f (la distance entre la bande de bollinger moyenne et la bande supérieure est de 100 %, le paramètre f défini en pourcentage définit le point où l'ordre sera fermé si le prix l'atteint, 0 % est le point de la bande de bollinger supérieure ; 10 % est le point inférieur, etc.) )/

Ordre de vente : lors d'un flat (lorsque l'ADX est inférieur à 25), attendez que le prix clôture au niveau de la bande de Bollinger supérieure (o précise le point d'entrée de l'ordre, la distance entre la bande de Bollinger moyenne et la bande supérieure est de 100 pour cent, 0 pour cent est au niveau de la bande de Bollinger supérieure, 10 pour cent est en dessous etc.), puis attendez que la bougie de confirmation clôture se déplace vers le prix inférieur. Nous ouvrons la vente. La fermeture de l'ordre dépend des options dans l'EA, les paramètres des options seront expliqués plus tard. L'ordre est fermé avec le paramètre n quand il touche la bande de bollinger moyenne. (le paramètre n est défini en pourcentages, il définit quelle partie du volume est fermée, dans les lots cette valeur est arrondie vers le bas, cela signifie que rien n'est fermé).le Stop Loss est fixé au prix d'ouverture, ensuite l'ordre est fermé complètement avec le paramètre f. (la distance entre la bande de bollinger moyenne et la bande inférieure est considérée comme 100 %, le paramètre f défini comme un pourcentage définit le point où l'ordre sera fermé si le prix l'atteint, point 0 % à la bande de bollinger inférieure, 10 % plus haut, etc.)



Options :

Les Stop Loss peuvent être définis dans les options du Conseiller Expert ou aucun. Il existe deux types de Stop Loss : le Stop Loss régulier qui est donné en pips et le Stop Loss en fonction du bénéfice attendu, c'est-à-dire que lorsqu'un ordre est ouvert, la distance en pips est calculée entre le prix de l'ordre et les bandes de Bollinger opposées (supérieures ou inférieures). Dans les options, on fixe le coefficient S (de 0 à 1), qui est multiplié par le bénéfice potentiel. Cette valeur est le Stop Loss, c'est-à-dire que si le coefficient est de 0,5, alors le Stop Loss sera égal à la moitié du profit potentiel. )

Le programmeur qui a écrit cet EA est principalement intéressé par l'écriture de tout conseiller basé sur les lignes de bollinger et d'autres modifications ne sont pas prévues. Dans la pièce jointe, je vois les statistiques de la stratégie sur l'historique, sur laquelle le conseiller est basé, et des échantillons d'exécution de semi-semaine du conseiller sur VPS (j'ai exécuté trois termes avec une gestion différente). Voici le code :

#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
input int      BBPeriod=20;
input double   BBdeviation=2.0;
input int      ADX=14;
input double   AdxLevel=25;
input double      SL=2000;
input double      TP=0;
input int      Obuy=5;
input int      Osell=5;
input double   Lot=0.1;
input bool     CloseMiddle=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
bool buyOpen=false;
bool sellOpen=false;
double _Obuy;
double _OSell;
int TryShots= 3;
int Slippage=50;                         // Slippage
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   _Obuy=Obuy/100;
   _OSell=Osell/100;

   if(!IsTradeAllowed())
     {
      string message="You must allow trading!";
      Print(message);
      Comment(message);
      return INIT_FAILED;
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime prevTime;
   datetime currentTime=iTime(Symbol(),0,0);
   if(prevTime==currentTime)
     {
      return;
     }
   else
     {
      prevTime=currentTime;
     }

   double adx=iADX(NULL,0,ADX,PRICE_CLOSE,0,2);

   if(adx<AdxLevel)
     {
      double bbMain1=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,0,2);
      double close=iClose(NULL,0,2);
      if(!buyOpen)
        {
         double bbDown1=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,2,2);
         BuyPosition(bbDown1,bbMain1,close);
        }
      else
        {
         double currentClose=iClose(NULL,0,0);
         double currentBB=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,0,0);
         if(CloseMiddle && currentClose>currentBB)
           {
            CloseOpenPos(OP_BUY);
            buyOpen=false;
           }
        }

      if(!sellOpen)
        {
         double bbUp1=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,1,2);
         SellPosition(bbUp1,bbMain1,close);
        }
      else
        {
         double currentClose=iClose(NULL,0,0);
         double currentBB=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,0,0);
         if(CloseMiddle && currentClose<currentBB)
           {
            CloseOpenPos(OP_SELL);
            sellOpen=false;
           }
        }
     }

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

void BuyPosition(double bbDown,double bbMain,double close)
  {
   double dif=bbMain-bbDown;
   double proc=dif *_Obuy;
   double DownProc=bbDown+proc;

   if(close<DownProc)
     {
      double openCurrent=iOpen(NULL,0,1);
      double closeCurrent=iClose(NULL,0,1);
      if(closeCurrent>openCurrent)
        {

         for(int it=0; it<TryShots; it++)
           {
            ResetLastError();
            RefreshRates();
            double sl,tp;
            if(SL!=0)
               sl=NormalizeDouble(Bid-SL*Point,Digits);
            if(TP!=0)
               tp=NormalizeDouble(Bid+TP*Point,Digits);
            Print(Ask+" sl"+sl+" tp"+tp);
            if(!OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,sl,tp))
              {
               if(it>=TryShots) { Print("Failed OP_BUY !"); break; }
               int err=GetLastError();
               if(err==4 || err==6 || err==8 || err==128 || err==137 || err==141 || err==146) Sleep(1000*it);
               else { Print("Failed OP_BUY !"); break; }
              }
            else
              {
               buyOpen=true;
               break;
              }

           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellPosition(double bbUp,double bbMain,double close)
  {
   double dif=bbUp-bbMain;
   double proc=dif*_OSell;
   double UpProc=bbUp-proc;

   if(close>UpProc)
     {
      double openCurrent=iOpen(NULL,0,1);
      double closeCurrent=iClose(NULL,0,1);
      if(closeCurrent<openCurrent)
        {
         for(int it=0; it<TryShots; it++)
           {
            ResetLastError();
            RefreshRates();
            double sl,tp;
            if(SL!=0)
               sl=NormalizeDouble(Ask+SL*Point,Digits);
            if(TP!=0)
               tp=NormalizeDouble(Ask-TP*Point,Digits);
            Print(Bid+" sl"+sl+" tp"+tp);
            if(!OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,sl,tp))
              {
               if(it>=TryShots) { Print("Failed OP_SELL !"); break; }
               int err=GetLastError();
               if(err==4 || err==6 || err==8 || err==128 || err==137 || err==141 || err==146) Sleep(1000*it);
               else { Print("Failed OP_SELL !"); break; }
              }
            else
              {
               sellOpen=true;
               break;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Close open position                                              |
//+------------------------------------------------------------------+
void CloseOpenPos(int or_tp)
  {
   int i,err,k=OrdersTotal();
//---
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(or_tp==OrderType())
              {
               for(int it=0; it<TryShots; it++)
                 {
                  ResetLastError();
                  RefreshRates();
                  double _price=Ask; if(or_tp==OP_BUY) _price=Bid;
                  //---
                  if(!OrderClose(OrderTicket(),OrderLots(),_price,Slippage))
                    {
                     if(it>=TryShots) { Print("Failed to close the order ",OrderTicket(),"!"); break; }
                     err=GetLastError();
                     if(err==4 || err==6 || err==8 || err==128 || err==137 || err==141 || err==146) Sleep(1000*100);
                     else { Print("Failed to close the order ",OrderTicket(),"!"); break; }
                    }
                  else break;

                 }
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+

J'ajoute d'autres captures d'écran à partir du terminal, fonctionnant sur un VPS : captures d'écran "1" et "2" exemples lorsque le conseiller n'ouvre pas les transactionspar lui-même

Capture d'écran "Lock", le conseiller expert n'a pas fermé la position d'achat par lui-même et a ouvert une position de vente en raison de l'apparition de conditions de vente.
Capture d'écran "commande reçue", dans ce cas la commande a été ouverte correctement.
Dossiers :
Pictures.zip  775 kb
a2ji9v3g8.zip  14 kb
Statement.zip  23 kb
 

Qui possède un script qui ferme tous les ordres sur le profit total - veuillez nous l'envoyer.

Je vous en serais reconnaissant.

 

Je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps.

En fait, je pourrais même essayer d'en écrire un moi-même si je comprends quelles variables il utilise pour afficher des marqueurs "œil", bleus et rouges à l'écran !

 
baikot:

Je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps et je travaille sur ce sujet depuis longtemps.

En fait, je pourrais même essayer d'en écrire un moi-même si je comprends quelles variables il utilise pour afficher des marqueurs "œil", bleus et rouges à l'écran !

Où se trouve l'indicateur lui-même ?
 
Victor Nikolaev:
Où se trouve l'indicateur lui-même ?
Mais vous n'en avez pas besoin. Vous ne trouverez que la décompilation et l'accès aux bains publics.
Raison: