Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 341

 

Gente, per favore aiutatemi. Voglio scrivere una funzione in modo che ogni prossimo ordine aperto si apra con un lotto 2 volte più grande del precedente. Questa funzione sta dando dei valori sbagliati... Cosa c'è che non va? Grazie in anticipo!



extern double LotBuy = 0.01;


double GetLotBuy()

{

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

 
Trader7777:

Gente, aiuto per favore. Voglio scrivere una funzione in modo che ogni prossimo ordine aperto si apra con un lotto 2 volte più grande del precedente. Questa funzione sta dando dei valori sbagliati... Cosa c'è che non va? Grazie in anticipo!



extern double LotBuy = 0.01;


double GetLotBuy()

{

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


Per cominciare:

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:

Gente, per favore aiutatemi. Voglio scrivere una funzione in modo che ogni prossimo ordine aperto si apra con un lotto 2 volte quello precedente. Questa funzione sta dando dei valori sbagliati... Cosa c'è che non va? Grazie in anticipo!



extern double LotBuy = 0.01;


double GetLotBuy()

{

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

Prova questo.

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:

Per cominciare:

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);
}



Mi stai prendendo in giro?
 

Ho fatto un EA basato sul mio indicatore personale.

I trade di apertura comprano al rialzo e vendono alla caduta dell'indicatore rispetto a ieri.

Il problema è che i trade si aprono e si chiudono attraverso una barra o più.

L'indicatore è impostato per ignorare i movimenti su un certo valore impostato.

Se non c'è eccesso, il valore dell'indicatore rimane come nella barra precedente (penso che il problema sia qui da qualche parte)

Codice indicatore:

//+------------------------------------------------------------------+
//|                                                         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);
  }
//+------------------------------------------------------------------+

Criteri di trading 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:
Ciao!

Uno script come questo è necessario:

era
eur/gbp / 1 lotto / open 312.25 / sl 559.45 / tp 454.55
yui/ghf / 1 lotto / open 3.28 / sl 5.65 / tp 4.65
.../... / 1 lotto / aperto ...... / sl ...... / tp .......


è diventato
eur/gbp / 1,02 lotto / aperto 312,25 / sl 559,45 / tp 454,55
yui/ghf / 1,02 lotto / aperto 3,28 / sl 5,65 / tp 4,65
.../... / 1,02 lotto / open ...... / sl ...... / tp .......

Cosa chiuderebbe gli ordini pendenti con un certo volume (lotto), e aprirebbe un nuovo ordine con un altro volume, ma lo stesso livello di entrata, stop e take.

Non lo so... Forse qualcuno l'ha fatto.
Se state cercando uno script con tale funzione, potete usare un motore di ricerca su questo sito.
 
max020780:



Non capisco niente qui...


Voglio che la dimensione del lotto aumenti geometricamente (con un moltiplicatore di 2) se viene aperto un secondo ordine unidirezionale.

 
Vinin:

Sta scherzando?
La soluzione non di rado consiste in diversi "passi". Il primo passo è quello di ridurre la crescita esponenziale della dimensione del lotto. Lungo la strada diamo almeno qualche significato all'uso del ciclo. E siccome non sappiamo "dove comincia", i passi successivi sono lasciati all'autore. ;)
 
TarasBY:
La soluzione non di rado consiste in diversi "passi". Il primo passo è quello di ridurre la crescita esponenziale della dimensione del lotto. Allo stesso tempo diamo almeno un senso all'uso del ciclo. E siccome non sappiamo "dove comincia", i passi successivi spettano all'autore. ;)

Questo è, naturalmente, meraviglioso, ma ancora, come esprimere come aprire il prossimo ordine unidirezionale con lotto doppio rispetto al precedente? Ci sono già due funzioni funzionanti CountBuy() e CountSell()
 
Trader7777:
Cosa vi impedisce di fare un tale controllo (script)?
File: