[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 376

 
Reshetov:

OrderTotal() dá o número de posições já abertas, ou seja, você pode usá-lo para verificar se já existe ou não uma posição aberta.

Eu uso a função Terminal() do tutorial ao fechar posições, desde que Mas_Ord_New[0][0]!=0. Mas temos outra tarefa aqui: devemos criar uma bandeira proibindo o comércio pelo sinal atual, se uma ordem já foi aberta por ela. Estou tentando usar bandeiras, mas cometi um erro de alguma forma.

  
static bool buy_1=true;
   
if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
       }


   
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
       buy_l=true;
 

Parny precisa de ajuda O que é isso?

2012.09.10 18:40:20 '6257743': pedido compra 5,00 EURUSD abertura a 1.27816 sl: 1.27791 tp: 1.27876 falhou [Inválido S/L ou T/P]

Também por que o preço e o fim da perda é o mesmo:

Preço 1.25618 Stop Loss 1.25618 Take Profit 1.25698


Tire Lucro 60 pips

Stop Loss 20

 

Olá. Tenho uma pergunta sobre indicadores personalizados. A descrição do iCustom diz:

duplo iCustom( símbolo de corda, int timeframe, nome da corda, ..., modo int, int shift)
Cálculo do indicador personalizado especificado. O indicador personalizado deve ser compilado (arquivo com extensão EX4) e colocado nosindicadores do terminal_diretório de especialistas.
símbolo - Nome do símbolo, em cujos dados o indicador será calculado. NULL significa símbolo atual.
cronograma - Período. Pode ser um dos períodos do gráfico. 0 significa o período do gráfico atual.
nome - Nome do indicador personalizado.
... - Lista de parâmetros (se necessário). Os parâmetros transmitidos devem corresponder à ordem de declaração e ao tipo de variáveis externas (externas) do indicador personalizado.
modo - Índice da linha indicadora. Pode ser de 0 a 7 e deve corresponder ao índice, usado por uma das funções do SetIndexBuffer.
turno - Índice do valor obtido do buffer de indicadores (deslocamento relativo à barra atual pelo número especificado de períodos de retorno).

Pergunta: como obter o valor de "turno" (ao chamar o indicador com um turno, ele usa os valores como sem ele, ou sejaiCustom(NULL, 0, "nome",pam1,0,1)= iCustom(NULL, 0, "nome",pam1,0,100), mas se eu chamar o indicador 100 barras atrás, ele terá um valor diferente do iCustom(NULL, 0, "nome",pam1,0,100). O indicador é simples, utiliza 5 valores fechados anteriores, toma sua média.

Serei grato por sua ajuda.

 
paladin80:
Você definiu o desvio da linha principal para 0 (zero). Deve ser mais do que zero.
Reshetov:
Você definiria o desvio também como negativo?


Obrigado, camaradas! Exatamente! Eu estava muito ocupado trabalhando e não fazia a menor idéia. Gostaria de ter clicado no botão de agradecimento, para não me multiplicar. )

A propósito, seria útil recomendar aos novatos a passagem de parâmetros para indicadores através de variáveis com nomes eloqüentes. Até agora eu fiz isso, desta vez eu perdi algo.

 

Boa noite a todos!

Eu queria fazer a mesma pergunta e assumi a função a partir daqui https://www.mql5.com/ru/forum/131859

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}

Eu recebo erros--->

Todas as variáveis da função são definidas dentro dela...o que está errado?

copiou-o, colou-o. --->

   if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
   
   
 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 
DanLett:

Lá não há erros:

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), CLR_NONE);
          }
        }
      }
    }
  }
}
Mas, você só precisa especificar uma cor, por exemplo -CLR_NONE.
 

E parece que você tem este "pendurado no ar":

  if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
Na verdade, tal condição (Alta[2]==Alta[1 ]) ou tal(Fechar[2]==Alta[1 ]) ou tal(Alta[2]==Aberta[1 ]) é rara. Olhe para o gráfico, quantas dessas coincidências você encontrará?

Em termos da lógica de remoção da ordem, ... - também sofre, em resumo.

 

copiou o código a partir daqui e criou um novo projeto (EA) colou o código -> compilado

Estranhamente, ainda dá os mesmos erros...

 
DanLett:

copiou o código a partir daqui e criou um novo projeto (EA) colou o código -> compilado

Estranhamente, ainda dá os mesmos erros...

Tente remover tudo, exceto esta função e compilar. Haverá algum erro? Basta salvá-lo antes de apagá-lo.
 

Estive negociando manualmente, eurusd 5 min, verifique se você tem tempo....

quero construir uma EA com base nesta estratégia, só preciso fechar negócios com a condição _2 :), não consigo entender, tenho até uma função próxima e recebo erros o tempo todo.....