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

 
Foxy, e quanto ao código de função ArraySearchDouble, ele está lá? Sem ele, descobrir o que o programa faz seria muito mais difícil)
 

Olá! Aqui está a função de parada de trilha, verifique se ela está correta. Como meu código vai mudar drasticamente, será difícil lidar com erros quando eu começar a mudá-lo

void TrailStop(int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
    if (TStop>0)
      {
       OrderSelect(ticket, SELECT_BY_TICKET);
       if(OrderType()==OP_BUY)
         {
          if(Bid - OrderOpenPrice()>Point*TStop)
            {
             if(OrderStopLoss()<Bid-Point*TStop)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Bid-Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
            else{ }
         }
       else if (OrderType()==OP_SELL)
         {
          if(OrderOpenPrice() - Ask>Point*TStop)
            {
             if(OrderStopLoss()>Ask + TStop*Point)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Ask+Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
          else { }
         }
       else { }
      }
    else { }
    }
 
gogent:

Olá! Aqui está a função de parada de trilha, verifique se ela está correta. Vou mudar meu código drasticamente, será difícil lidar com erros quando eu começar a mudá-lo.

Você não leva em conta o Stoplevel, portanto, se você não tiver ECN/NDD, você pode receber o erro "paradas erradas".

E em geral, após a OrderModify é melhor lidar com todos os erros, só por precaução.

 
alsu:
Foxy, e o código da função ArraySearchDouble, ele está lá? Sem ele, seria muito mais difícil entender o que o programa faz)


Todas estas são funções da KimIV, que é o que estou tentando descobrir. Aqui está o código:


Esta função procura um elemento de um array usando um valor de tipo duplo e retorna o índice do elemento encontrado ou -1. A função encontra apenas um elemento e pára de procurar se o resultado for positivo.

  • m - A matriz na qual o elemento é procurado.
  • e - O valor do tipo duplo a ser encontrado na matriz m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
 
Profissionais, o que estou fazendo de errado? Preciso redesenhar a janela indicadora quando uma nova barra aparecer. Se (Barras != Pré-barras) WindowRedraw();
não funciona. Pré-Barras é igual ao número de barras no carrapato anterior. Talvez eu o tenha colocado no lugar errado ou na função errada?
 
kon12:
Profissionais, vocês podem me dizer o que estou fazendo de errado? Preciso redesenhar a janela indicadora quando uma nova barra aparecer. se (Barras != Pré-barras) WindowRedraw();
não resulta em nada. Talvez eu o tenha colocado no lugar errado ou algo está errado?

É preciso desenhá-lo primeiro para redesenhar algo.
 
sergeev:

Para redesenhar algo, é preciso desenhá-lo primeiro.


Tudo é desenhado perfeitamente, o indicador é baseado em ziguezague, mas quando novas barras aparecem, a curva deve ser redesenhada por toda parte, mas só acrescenta o valor do indicador em uma nova barra...

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

 
kon12:


Tudo é traçado bem, o indicador é baseado em ziguezague, mas quando novas barras aparecem, a curva deve ser redesenhada por toda parte, mas só acrescenta o valor do indicador na nova barra...

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0,0.0);

WindowRedraw() objetos gráficos redraws(). Não tem nada a ver com amortecedores.
 
Zhunko:
WindowRedraw() objetos gráficos redraws(). Não tem nada a ver com amortecedores.

Entendi... Se houver outra forma de redesenhar?
 
kon12:

Entendi... Se outro caminho com um redesenho?
Mostre o código e você terá uma resposta imediata.
Razão: