Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 574

 
Galim_V:

A tarefa é encontrar a barra com o fechamento mínimo

for(int x=0; x<=xBars -1; x++)

{

contador++;

// Imprimir(Fechar[x],",", contador);

int h = ArrayMinimum(Fechar[x]);

if(contador > 20) break;

}

Compilador jura de Fechado

Escreva os preços de fechamento em uma matriz separada e depois fora do ArrauMinimum chick
 
Alekseu Fedotov:
Escreva os preços de fechamento em uma matriz separada e depois fora do ArrauMinimum chick
Obrigado!
 
Galim_V:

A tarefa é encontrar a barra com o mínimo de fechamento

existem as funções iHighest e iLowest (agora também em MT5)

 
Taras Slobodyanik:

existem as funções iHighest e iLowest (agora também em MT5)

Obrigado!
 
Galim_V:

A tarefa é encontrar a barra com o fechamento mínimo

for(int x=0; x<=xBars -1; x++)

{

contador++;

// Imprimir(Fechar[x],",", contador);

int h = ArrayMinimum(Fechar[x]);

if(contador > 20) break;

}

O compilador jura em Close

A tarefa de buscar o preço mínimo/máximo na MQL4 é resolvida por uma linha:

double fMinClose = iClose(NULL, 0, iLowest(NULL, 0, MODE_CLOSE, <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik:

você pode, mas não será exatamente um timer.

Obrigado.

Como calcular o volume do lote em incrementos? Se depósito =1000, lote = 0,1, o depósito tornou-se lote 2000 = 0,2. Ou seja, se o depósito for de 1500 ou 1700, o lote não será aumentado.

 
PolarSeaman:

Obrigado.

Como calcular o volume do lote em incrementos? Se depósito =1000, lote = 0,1, o depósito tornou-se lote 2000 = 0,2. Ou seja, se o depósito for de 1500 ou 1700, o lote não aumenta.

double percentLot = 0.01,
       lot = NormalizeDouble(MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)*percentLot/10)/10, 1);

De alguma forma...

 
Konstantin Nikitin:

Assim...

Não, não, com um depósito de 1100, o lote será de 0,11, e eu preciso que o lote não aumente até 2000. Como eu defino o passo =1000 nos ajustes?

 
Boa tarde, você poderia me dizer se é possível adicionar coordenadas ao indexador do mouse se você puder, por favor, me envie um e-mail para ereminmikola@yandex.ru
 

Olá programadores. Você poderia me dar uma dica sobre como abordar corretamente a seguinte condição:

1. O Expert Advisor abre 2 ordens de mercado (compra e venda) com o mesmo lote especificado nas configurações. - A ordem é executada sem nenhum problema

O próximo apresenta um problema, o preço pode se mover tanto para a direção da VENDA quanto para a direção da COMPRA. Como podemos organizar o código para que, quando n pontos forem passados, o Consultor Especialista analise a rentabilidade dessas duas transações em LIVE e feche a ordem que tem um saldo negativo após n pontos? Se você tiver qualquer outra idéia de como fazer isso, por favor, informe.

Eu lhe dou o código - rascunho, apenas o primeiro ponto é executado, e 2 negociações são abertas com TP e SL

2. Quando o preço atinge a quantidade especificada de pips, então eu fecho o pedido com um saldo negativo e abro mais 2 pedidos (compra e venda) com o mesmo lote,

As paradas são estabelecidas ao preço de abertura da primeira ordem, ou seja, se a tendência se inverter, todas as 3 ordens devem fechar simultaneamente.


extern int    _ms = 1000;  
extern double _lots = 0.01;
extern double _TP = 80;
extern double _SL = 35;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 
   pt = Point;
   if (Digits==3||Digits==5) {pt*=10;} else pt = Point;
   _mn = MagicNumberGenerator(_ms);
   Print("The magic number is ",_mn);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if (IsNewCandle())
    {
      if (TotalOpenOrders(_mn)==0)
      {
        EnterTrade(OP_BUY);
        EnterTrade(OP_SELL);
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade(int type)
{
   double price = 0; double sl = 0; double tp = 0; double lot = _lots;
   
   if      (type == OP_BUY)  price = Ask;
   else if (type == OP_SELL) price = Bid;
   
   int err = 0;
   int ticket = OrderSend(_Symbol, type, lot, price, 30, 0, 0, NULL, _mn, 0, clrGreen);
   if (ticket == -1)
   {
     err = GetLastError();
     Print("Could not place the order due to error ",err," ",ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED) Alert("You need to enable you autotrade button");
   }
   else 
   {
     if(!OrderSelect(ticket,SELECT_BY_TICKET))
     {
       err = GetLastError();
       Print("Could not select the order due to error ",err," ",ErrorDescription(err));
     }
     else 
     {
       if (OrderType()==OP_SELL)
       {
         sl = OrderOpenPrice()+(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()-(_TP*pt);
       }  
       else if (OrderType()==OP_BUY)
       {
         sl = OrderOpenPrice()-(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()+(_TP*pt);
       }
       if(!OrderModify(ticket, OrderOpenPrice(), sl, tp, 0, clrNONE))
       err = GetLastError();
       Print("Could not modify the order due to error ",err," ",ErrorDescription(err));
     }
   }
}
Razão: