Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 341

 

Pessoal, por favor, ajudem. Quero escrever uma função para que cada próxima ordem aberta abra com um lote 2 vezes maior do que a anterior. Esta função está dando valores errados... O que há de errado com isso? Obrigado de antemão!



extern double LotBuy = 0.01;


double GetLotBuy()

{

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

 
Trader7777:

Pessoal, ajudem, por favor. Quero escrever uma função para que cada próxima ordem aberta abra com um lote 2 vezes maior do que a anterior. Esta função está dando valores errados... O que há de errado com isso? Obrigado de antemão!



extern double LotBuy = 0.01;


double GetLotBuy()

{

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


Para começar:

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:

Pessoal, por favor, ajudem. Quero escrever uma função para que cada próxima ordem aberta abra com um lote 2 vezes o anterior. Esta função está dando valores errados... O que há de errado com isso? Obrigado de antemão!



extern double LotBuy = 0.01;


double GetLotBuy()

{

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

Tente isto.

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:

Para começar:

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



Você está brincando comigo?
 

Fiz um EA baseado em meu próprio indicador.

A abertura de negócios compra em alta e venda na queda do indicador em relação a ontem.

O problema é que o comércio se abre e fecha através de um bar ou mais.

O indicador é definido para ignorar os movimentos em um determinado valor definido.

Se não houver excesso, o valor do indicador permanece como na barra anterior (acho que o problema está em algum lugar aqui)

Código indicador:

//+------------------------------------------------------------------+
//|                                                         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érios comerciais da 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:
Olá!

Um roteiro como este é necessário:

foi
eur/gbp / 1 lote / aberto 312,25 / sl 559,45 / tp 454,55
yui/ghf / 1 lote / aberto 3,28 / sl 5,65 / tp 4,65
.../... / 1 lote / abrir ...... / sl ...... / tp .......


tornou-se
eur/gbp / 1,02 lote / aberto 312,25 / sl 559,45 / tp 454,55
yui/ghf / 1.02 lote / aberto 3.28 / sl 5.65 / tp 4.65
.../... / 1.02 lote / abrir ...... / sl ...... / tp .......

O que fecharia pedidos pendentes com um determinado volume (lote), e abriria um novo pedido com outro volume, mas com o mesmo nível de entrada, pararia e pegaria.

Eu não sei... Talvez alguém tenha.
Se você estiver procurando um script com tal função, você pode usar um mecanismo de busca neste site.
 
max020780:



Eu não entendo nada aqui...


Eu quero que o tamanho do lote aumente geometricamente (com um multiplicador de 2) se uma segunda ordem unidirecional for aberta.

 
Vinin:

Você está brincando?
A solução não raro consiste em vários "passos". O primeiro passo é reduzir o crescimento exponencial do tamanho do lote. Ao longo do caminho, damos pelo menos algum significado ao uso do ciclo. E como não sabemos "onde o início", os próximos passos são deixados ao autor. ;)
 
TarasBY:
A solução não raro consiste em vários "passos". O primeiro passo é reduzir o crescimento exponencial do tamanho do lote. Ao mesmo tempo, damos pelo menos algum significado ao uso do ciclo. E como não sabemos "onde o início", os passos seguintes cabem ao autor. ;)

Isto é, claro, maravilhoso, mas ainda assim, como expressar como abrir a próxima ordem unidirecional com muito mais duas vezes mais do que a ordem anterior? Já existem duas funções de trabalho CountBuy() e CountSell()
 
Trader7777:
O que o impede de fazer tal verificação (roteiro)?
Arquivos anexados: