[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 170

 
Zhunko:
Não há funções ou macros na MQL4 que devolvam o número de construção.


Agora eu tenho-o. Senkue.

Pensei que era possível fazer tudo por analogia com a remoção de um pedaço de código do tutorial e responsável pela negociação de corujas somente em uma determinada conta, senha, etc.

 
Olá a todos. Por favor, ajude.

Aqui está a essência: Há um bot que automaticamente coloca ordens pendentes, a um determinado preço.

Precisamos colocar uma proibição de fazer um pedido, desde que o pedido ou um negócio a esse preço esteja aberto.

Estou tentando há três dias e sem sorte.
 

há várias opções.... fazer o teste.

//
// проверим среди Выставленных ордеров /сработавших/ - есть ли Байка
//
void CheckOrdBye()
{
  int total = OrdersTotal();
  int TotalOpenOrders = 0;
  for( int cnt=0; cnt<total; cnt++){
     if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true)  {
        if (OrderSymbol()==Symbol() ) {
            if ( OrderType() == OP_BUY)   { OrdYN = 1; return;}
            if ( OrderType() == OP_SELL)  { OrdYN = 2; return;}
        }
     }
  }
}
 
bestfx:
Olá a todos. Por favor, ajude.

Aqui está a essência: Há um bot que automaticamente coloca ordens pendentes, a um determinado preço. ...

Colocar isto em frente ao bloco de envio de pedidos:
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderOpenPrice()==bad_price) // bad_price - значение цены при котором не хотите выставить очередной ордер
      return(0);
}  }
 
Aleksander:

há várias opções.... fazer o teste.



Você poderia comentar sobre o código? Não está claro o que fazer.
 
paladin80:
Colocar isto antes do bloqueio de envio do pedido:


E se houver, por exemplo, 30 pedidos?

A essência é a seguinte: são colocados dois acordos opostos com uma diferença de 40 pontos em relação ao preço médio até três casas decimais.

Digamos 1.251 para eur/usd i.e. comprar 1.253 vender 1.249 então o mercado, por exemplo, fixa o preço de compra e volta a 1.251 e agora coloca mais dois pedidos aos mesmos preços. E enquanto o mercado se movia para o preço de compra, o roteiro podia colocar o mesmo número de ordens e elas deveriam ser tratadas da mesma forma, ou seja, um preço = uma ordem. Como implementar isto?

 
bestfx:


E se houver 30 pedidos, por exemplo?

A essência é a seguinte: são colocados dois acordos opostos com uma diferença de 40 pontos em relação ao preço médio até três casas decimais.

Digamos 1.251 para eur/usd i.e. comprar 1.253 vender 1.249 então o mercado, por exemplo, fixa o preço de compra e volta a 1.251 e agora coloca mais dois pedidos aos mesmos preços. E enquanto o mercado se movia para o preço de compra, o roteiro podia colocar o mesmo número de ordens e elas deveriam ser tratadas da mesma forma, ou seja, um preço = uma ordem. Como implementar isto?


Basta fazer a magia == preço
 
FAQ:

Basta fazer a magia == preço

Você poderia ser um pouco mais específico?
 
Dividir o preço pelos dígitos = reduzi-lo a um inteiro e escrevê-lo em um medjic, depois procurar o conjunto de pedidos abertos para o medjic antes de estabelecer um novo pedido.
 
bestfx:
Olá a todos. Por favor, ajude.

A essência é a seguinte: Há um bot que automaticamente coloca ordens pendentes, a um determinado preço. ...
double main_price=1.251;
double price_to_byu=1.253;
double price_to_sell=1.249;
// --------
bool restriction=false;
if (Ask<=main_price)
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
      {  if (OrderOpenPrice()==price_to_byu) restriction=true;
}  }  }
if (restriction==false)
{  OrderSend(NULL,OP_BUYSTOP,Lot,price_to_byu, ...);
   return(0);
}
// --------
restriction=false;
if (Bid>=main_price)
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
      {  if (OrderOpenPrice()==price_to_sell) restriction=true;
}  }  }
if (restriction==false)
{  OrderSend(NULL,OP_SELLSTOP,Lot,price_to_sell, ...);
   return(0);
}

Se você estiver fazendo muitas encomendas similares, você precisa usar matrizes. Como? Leia sobre arrays.