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

 
ilnur17021992:
SELL_Lvl é o número de joelhos (pedidos) da grade de venda eSELL_NoLossLevel é o nível total (preço) da CU desses pedidos. Bem, a idéia é a seguinte: precisamos de uma linha desenhada no nível de uma Linha de Compra e redesenhada respectivamente quando novas Linhas são abertas. Não sei como fazer isso.

Não entende como determinar a linha BU de todos os pedidos?

 

Você pode me dizer como escrevê-lo para economizar recursos e obter preços atualizados?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

ou como este?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

Você pode me dizer como escrevê-lo para economizar recursos e obter preços atualizados?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

ou como este?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


A primeira opção é mais correta. Na segunda, você deve escrever esta linhaSymbolInfoTick(symb,Last_Tick); <<<<
 
Vitaly Muzichenko:

Você pode me dizer como escrevê-lo para economizar recursos e obter preços atualizados?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

ou como este?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


Eu diria que depende do tamanho dos pedidosTotal() e da probabilidade de mudanças de preço durante o ciclo.

Na minha opinião, obter dados novos diretamente no laço é mais correto.

E eu acho que variáveis adicionais (destacadas no código) são absolutamente desnecessárias.

 
Alexey Viktorov:

Há um exemplo na documentação.

Provavelmente seria melhor analisar as ordens no loop e, desde que a próxima ordem seja menor do que a anterior, selecioná-la para continuar trabalhando com ela. Assim, após sair do laço, será selecionada a ordem a ser apagada.

Ou, você pode primeiro memorizar sua posição na lista de pedidos e depois selecioná-la após sair do laço usando o índice memorizado.

Não é tão fácil definir tanto as ordens mais altas quanto as mais baixas se
 
Sergey Gritsay:
A primeira opção é mais correta. A segunda deve escreverSymbolInfoTick(symb,Last_Tick); <<<<

Sim, eu só copiei e não notei.

Estou me perguntando se oSymbolInfoTick é a maneira correta de colocá-lo dentro do laço, se ele é necessário lá, ou se ele pode ser colocado antes do laço. Usado em trailing stop, pode puxar grade até 50pc.

 
Vitaly Muzichenko:

Sim, eu só copiei e não notei.

Estou me perguntando se oSymbolInfoTick é a maneira correta de colocá-lo dentro do loop, se é necessário, ou se pode ser colocado antes do loop. Usado na parada de reboque, pode puxar uma grade de até 50pc.

Para a parada de trilha é, naturalmente, melhor colocá-la uma vez antes do ciclo.
 
Alexey Viktorov:

Não consegue descobrir como determinar a linha BU de todos os pedidos?

Eu sei como determinar a BU, eu preciso que a linha seja traçada neste nível
 
Alexey Viktorov:
Para a parada de trilha, é claro que é melhor uma vez antes do ciclo.

Agora estou reescrevendo-o lentamente por 5. Quero dizer que o preço pode mudar muito rapidamente e o nível pode ser menor que o valor de stop-loss, o que levará a um erro. Quero dizer que o preço pode mudar muito rapidamente e o nível será menor que o nível de parada permitido, o que levará a um erro.

Entendo que este chapéu"SymbolInfoTick" é necessário para obter preços reais?

 
problema resolvido através da comparação de preços
Razão: