[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 436

 
semiromid:

Прошу помощи .

Как в этот коментарий "Возникла ошибка " можно добавить переменную ?

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, "Возникла ошибка ", 0);


Stroka de corda;

duplo x;

.............

.............


Stroka=StringConcatenate("Ocorreu um erro", DoubleToStr(x, 0) );

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, Stroka, 0);

 
bercut0077:

Boa tarde especialistas, no indicador estou interessado no valor obtido pelo Conselheiro Especialista

Constantes especiais usadas para indicar o estado dos parâmetros e variáveis. Podem ser os seguintes valores:

Constante Valor Descrição
NULL 0 Indica o estado de cadeia vazia
VAZIO -1 Indica o estado vazio do parâmetro
VAZIO_VALOR 0x7FFFFFFFFFF Valor padrão, ponteiro para um valor vazio. Usado em indicadores personalizados
CLR_NONE 0xFFFFFFFFFFFF Não indica cor
ARRAY_BRANCO 0 Usado com funções de matriz. Indica que todos os elementos de uma matriz devem ser processados


0x7FFFFFFFFFFFF em hexadecimal é igual a 2147483647 em decimal.

Ou seja, em algum momento, um valor vazio aparece no buffer indicador - isto é o que você vê no Expert Advisor. Você pode definir o "valor vazio" do buffer indicador:

SetIndexEmptyValue( índice int , valor duplo )

Define o valor vazio para a linha indicadora. Os valores em branco não são desenhados ou mostrados na DataWindow. O valor padrão do valor vazio é EMPTY_VALUE.
Parâmetros:
índice - Índice - número do índice da linha. Deve ser de 0 a 7.
valor - Novo valor "vazio".
 
peshihod:


Isto é, o tempo de abertura não importa se foi aberto há um minuto ou dois?

O ponto 2 não está claro. Tudo isso é um pouco vago.

O tempo de abertura pode ser determinado pelo OrderOpenTime().

Isto é, o momento da abertura não importa, foi aberta há um minuto ou dois?


Мгновенное открытие

1.Моментальное(Сиюсекундное +0.5 - 2 секунды) определение вновь открывшегося торгового(не отложеных ордеров) ордера(Ордера открытого вручную и открытого спомощью советника).Система идентефецируюет ордер из друх вариантов (Sell или Byu) .

Если система определила ордер который рание не был открыт . то идет продолжение под номером 2.

2. Выполняеться какая то задача (Например,если Sell: Alert("Открытый ордер на продажу"+y);),(Например,если byu: Alert("Открыт ордер на покупку"+w);), всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер(толи системой, толи вручную ), система вновь действует с пункта 1 по пункт 2 .

 
peshihod:

Stroka de corda;

duplo x;

.............

.............


Stroka=StringConcatenate("Ocorreu um erro", DoubleToStr(x, 0) );

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, Stroka, 0);


Bela combinação.
 
artmedia70:

Constantes especiais usadas para indicar o estado dos parâmetros e variáveis. Podem ser os seguintes valores:

Sim é claro, mas não é claro como curar o indicador a partir destes valores vazios, por isso publiquei o código, preciso de ajuda real, ou seja, preciso que o indicador saia sempre 1 ou -1.
 
bercut0077:
Sim, é claro, mas não é claro como curar o indicador destes valores vazios, por isso publiquei o código, preciso de ajuda real, ou seja, preciso que o indicador sempre produza 1 ou -1.
Eu dei um exemplo de uma função que define o valor de um valor vazio para uma linha indicadora. Você pode fazer isso de uma maneira diferente. Se você precisar apenas de dois valores +1 e -1, então quando aparecer um valor vazio, verifique o estado passado (+1 ou -1) e digite-o em vez do valor vazio. Então sempre haverá ou +1 ou -1 no buffer.
Suponha que haja um valor de +1. Aparece um valor vazio. Em vez disso, continue inserindo o valor anterior (+1) no buffer assim que aparecer -1, depois insira-o no buffer.
Haverá agora -1 no buffer. Assim que um valor vazio aparece, você verifica o valor anterior (agora é -1), e o insere no buffer.
Desta forma você sempre terá +1 ou -1 no buffer
 
artmedia70:

Obrigado. Outra tarefa surgiu...
 
semiromid:

1.Моментальное(Сиюсекундное +0.5 - 2 секунды) определение вновь открывшегося торгового(не отложеных ордеров) ордера(Ордера открытого вручную и открытого спомощью советника).Система идентефецируюет ордер из друх вариантов (Sell или Byu) .

Если система определила ордер который рание не был открыт . то идет продолжение под номером 2.

2. Выполняеться какая то задача (Например,если Sell: Alert("Открытый ордер на продажу"+y);),(Например,если byu: Alert("Открыт ордер на покупку"+w);), всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер(толи системой, толи вручную ), система вновь действует с пункта 1 по пункт 2 .


Eu entendo que uma ordem pendente e uma ordem em aberto são ordens diferentes. E se a ordem pendente for aberta, então a tarefa é reduzida à ordem inicial, à ordem aberta. Se eu entendi corretamente, está ficando muito complicado.

Quais são as tarefas? Talvez, tudo possa ser feito de uma maneira mais simples?

 
Caros especialistas ajudam a mudar o código, precisamos de
Cur_Trend без пустой величины, тоесть если появляется пустота, то нужно заменить последним известным значением
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightBlue
#property indicator_color2 Magenta

double CrossUp[];
double CrossDown[];
double Cur_Trend[];
int CurrentTrend = 0;
int starttime = 0;
extern int FasterEMA = 5;
extern int SlowerEMA = 8;

int init()
  {
   IndicatorBuffers(3); 
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
   SetIndexBuffer(2, Cur_Trend);
   starttime = TimeLocal(); 
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start() { 
   int limit, i, counter, loop, ii;
   double fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   loop = 0;
   for(i = 0; i <= limit; i++) {
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
      fasterEMAnow = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      fasterEMAprevious = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
      fasterEMAafter = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
      slowerEMAnow = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i);
      slowerEMAprevious = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i+1);
      slowerEMAafter = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i-1); 
      if ((fasterEMAnow > slowerEMAnow) && (fasterEMAprevious < slowerEMAprevious) && (fasterEMAafter > slowerEMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
         if ((loop == 0) && (CurrentTrend != 1))  {
            CurrentTrend = 1;
            Cur_Trend[ii]= CurrentTrend;
            }
         if (loop == 0)  {
            loop = 1;
            }
      }
      else if ((fasterEMAnow < slowerEMAnow) && (fasterEMAprevious > slowerEMAprevious) && (fasterEMAafter < slowerEMAafter)) {
              CrossDown[i] = High[i] + Range*0.5;
           if ((loop == 0) && (CurrentTrend != -1))  {
              CurrentTrend = -1;
              Cur_Trend[ii]= CurrentTrend;
           }
           if (loop == 0)  {
              loop = 1;
          }
       }
   }
   return(0);
}
 

Caros especialistas!

Preciso de sua ajuda com a seguinte pergunta. Tenho um indicador personalizado que desenha uma linha bicolor com uma cor e depois com outra. Há alguma maneira de ensinar o Expert Advisor a determinar qual é a cor da linha no momento?

Arquivos anexados:
Razão: