Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 341

 

Les amis, s'il vous plaît, aidez-nous. Je veux écrire une fonction pour que chaque ordre ouvert suivant s'ouvre avec un lot 2 fois plus grand que le précédent. Cette fonction donne des valeurs erronées... Quel est le problème ? Merci d'avance !



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}

 
Trader7777:

Les amis, aidez-moi s'il vous plaît. Je veux écrire une fonction pour que chaque ordre ouvert suivant s'ouvre avec un lot 2 fois plus grand que le précédent. Cette fonction donne des valeurs erronées... Quel est le problème ? Merci d'avance !



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}


Pour commencer :

extern double LotBuy = 0.01;

double GetLotBuy()

{
double ld_Lot = LotBuy;
for(int n = 1; n<=CountBuy(); n++)
{ld_Lot = LotBuy * n * 2;}
return (ld_Lot);
}

 
Trader7777:

Les amis, s'il vous plaît, aidez-nous. Je veux écrire une fonction pour que chaque ordre ouvert suivant s'ouvre avec un lot 2 fois supérieur au précédent. Cette fonction donne des valeurs erronées... Quel est le problème ? Merci d'avance !



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}

Essayez ça.

double OrderLotsSB(string sy="", int op=-1, int mn=-1) { 
 datetime o;
   int      i, k=OrdersTotal(); double r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if ( OrderType()==OP_SELL||OrderType()==OP_BUY) {
          if (op<0 || OrderType()==OP_SELL||OrderType()==OP_BUY) {
            if (mn<0 || OrderMagicNumber()==Magic) {
              r=OrderLots()*2;
            }
          }
        }
      }
    }
  }
  return(r);
}
 
TarasBY:

Pour commencer :

extern double LotBuy = 0.01;

double GetLotBuy()

{
double ld_Lot = LotBuy;
for(int n = 1; n<=CountBuy(); n++)
{ld_Lot = LotBuy * n * 2;}
return (ld_Lot);
}



Tu te moques de moi ?
 

J'ai créé un EA basé sur mon propre indicateur.

Les transactions d'ouverture achètent à la hausse et vendent à la baisse de l'indicateur par rapport à la veille.

Le problème est que les transactions s'ouvrent et se ferment par une barre ou plus.

L'indicateur est réglé pour ignorer les mouvements sur une certaine valeur de consigne.

S'il n'y a pas d'excès, la valeur de l'indicateur reste celle de la barre précédente (je pense que le problème se situe quelque part ici).

Code indicateur :

//+------------------------------------------------------------------+
//|                                                         EMAF.mq4 |
//|                                                 Kamil Gazizullin |
//|                                             forexman77@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//--- input parameters
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    raznica,raznica_static,
    MA_1_t,                                                  
    MA_2_t;
 
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;
   for(int i=0;i<limit;i++)
   {  
      static double MA_otshet;
      MA_1_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+0);  
      MA_2_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+1); 
      raznica=MA_1_t-MA_2_t;
      raznica_static=MA_1_t-MA_otshet;
      if(raznica_static > -0.003 && raznica_static < 0.003)
      {
      ExtMapBuffer1[i]=MA_otshet;
      }
      else
      if(raznica > -0.003 && raznica < 0.003)
      {
      ExtMapBuffer1[i]=MA_2_t;
      MA_otshet=MA_2_t;
      }
      if((raznica > 0.003) || (raznica <- 0.003))
      {
      ExtMapBuffer1[i]=MA_1_t;
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+

Critères de négociation de l'EA :

   // Торговые критерии
EMAF_1=iCustom(NULL, 0, "EMAF",0,0,i+0);    
EMAF_2=iCustom(NULL, 0, "EMAF",0,0,i+1); 
static datetime t;
if  (EMAF_1 > EMAF_2)
          {                                          
          Opn_B=true; 
          t=Time[0];                  
          }
if  (EMAF_1 < EMAF_2)
      {
       if(Time[0]>t)
          {                                      
          Cls_B=true;              
          }
      }
 
klop:
Bonjour !

Un script comme celui-ci est nécessaire :

était
eur/gbp / 1 lot / ouvert 312.25 / sl 559.45 / tp 454.55
yui/ghf / 1 lot / ouvert 3.28 / sl 5.65 / tp 4.65
.../... / 1 lot / ouvert ...... / sl ...... / tp .......


est devenu
eur/gbp / 1.02 lot / ouvert 312.25 / sl 559.45 / tp 454.55
yui/ghf / 1.02 lot / ouvert 3.28 / sl 5.65 / tp 4.65
.../... / 1.02 lot / open ...... / sl ...... / tp .......

Qu'est-ce qui fermerait les ordres en attente avec un certain volume (lot), et ouvrirait un nouvel ordre avec un autre volume, mais le même niveau d'entrée, stop et take.

Je ne sais pas... Peut-être que quelqu'un l'a fait.
Si vous cherchez un script avec une telle fonction, vous pouvez utiliser un moteur de recherche sur ce site.
 
max020780:



Je ne comprends rien ici...


Je veux que la taille du lot augmente géométriquement (avec un multiplicateur de 2) si un deuxième ordre unidirectionnel est ouvert.

 
Vinin:

Vous plaisantez ?
Il n'est pas rare que la solution se compose de plusieurs "étapes". La première étape consiste à réduire la croissance exponentielle de la taille des lots. En cours de route, nous donnons au moins un sens à l'utilisation du cycle. Et comme nous ne savons pas "où commence le commencement", les étapes suivantes sont laissées à l'auteur. ;)
 
TarasBY:
Il n'est pas rare que la solution se compose de plusieurs "étapes". La première étape consiste à réduire la croissance exponentielle de la taille des lots. En même temps, nous donnons au moins un sens à l'utilisation du cycle. Et comme nous ne savons pas "où commence le commencement", les étapes suivantes sont du ressort de l'auteur. ;)

C'est, bien sûr, merveilleux, mais tout de même, comment exprimer comment ouvrir l'ordre unidirectionnel suivant avec un lot deux fois plus important que le précédent ? Il existe déjà deux fonctions fonctionnelles CountBuy() et CountSell().
 
Trader7777:
Qu'est-ce qui vous empêche de faire un tel contrôle (script) ?
Dossiers :