[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 386

 
splxgf писал(а) >>

Provavelmente algo assim, porque os loops infinitos demoram muito tempo em hardware moderno.

:)

 
Rita >>:

Добрый день.

В индикатоте есть ф-я IndicatorShortName("iC_C_mod, ..... ");

Мне, однако, нужно, кроме этой надписи, - чтобя я могла вставить коммент с динамично изменяющейся переменной в окно индикатора.

Типа ф-и Comment();

Но только, именно, в окно индикатора, а вовсе не на сам график.

Пож. подскажите ?


#property copyright "Copyright © 2009, :-)"
#property link      "----"

#property indicator_separate_window

int start()
{
   string info = "Bid= "+DoubleToStr(Bid,5);
   IndicatorShortName( info);
//----
   return(0);
}

assim, ele sairá para a janela que você deseja

 
Rita >>:

Добрый день.

В индикатоте есть ф-я IndicatorShortName("iC_C_mod, ..... ");

Мне, однако, нужно, кроме этой надписи, - чтобя я могла вставить коммент с динамично изменяющейся переменной в окно индикатора.

Типа ф-и Comment();

Но только, именно, в окно индикатора, а вовсе не на сам график.

Пож. подскажите ?


Você pode criar um rótulo e alterar o texto


   string ID  = "MyLabelName";


   if(ObjectCreate( ID, OBJ_LABEL, 0, 20, 20))
     {
       ObjectSet( ID, OBJPROP_XDISTANCE, 35);
       ObjectSet( ID, OBJPROP_YDISTANCE, 35);
     }
 
   //отображение на экране значения переменной txt 
   string txt = "Belissimo";
   ObjectSetText( ID, txt , 18, "Arial Black", Green);
O código pode estar errado, mas funciona.
 
Não o deixe desacompanhado
 
Obrigado, xeon e splxgf!
 
Meus amigos, boa tarde.

Será interessante ouvi-lo sobre a seguinte pergunta:

Há uma opinião de que a cotação de um par de moedas é influenciada por muitos outros instrumentos financeiros:
movimento dos principais índices de ações, futuros, opções, etc.


1) Você acha que é possível rastrear essa influência
(e, portanto, construtivamente utilizado em uma estratégia comercial)????

2) Você notou alguma correlação persistente entre os pares de moedas relevantes e as cotações de outros instrumentos financeiros?

3) Você já utilizou indicadores para demonstrar tais correlações?


(Aguardo seus comentários no ramo temático deste fórum com o mesmo nome: https://forum.mql4.com/ru/28930 )

 

splxgf писал

void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}

Provavelmente algo assim, porque os loops infinitos demoram muito tempo em hardware moderno.


Mas então o programa irá apenas verificar a condição e, se ela for cumprida, irá vendê-la. E se não o fizer, o que fará? É suposto esperar que a condição seja preenchida neste mesmo fragmento de código.



Vinin escreveu


Por que você fez um loop? Se não houver condição, o programa deve simplesmente sair e não esperar que o sinal apareça.

Por isso fiz o loop, pois é neste fragmento de código que o programa deve esperar que a condição apareça. Não se pode sair para o início do laço. Qual é a maneira correta de implementar a espera por uma condição?


E este é o meu projeto:

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}


- Está funcionando e apenas pendura o testador? Ou não funciona em absoluto? Deseja muito compreender como esperar que uma condição seja preenchida corretamente sem sair da função em questão.


Obrigado pelas respostas!

 
Jahspear >>:


Но ведь тогда программа просто проверит условие и если оно выполняется, продаст. А если не выполняется, что она будет делать? По задумке, должна ждать выполнения условия именно в этом месте кода.


Вот поэтому и сделал цикл, что именно в этом месте кода программа должна ждать выполнения условия. Выйти в начало нельзя. Как правильно реализовать цикл ожидания условия?


- она рабочая и просто тестер вешает? Или не работает в принципе? Очень хочется понять, как правильно ожидать выполнения условия, не выходя из заданной функции.

É mais provável que o programa funcione, e é errado esperar pela condição sem sair da função, pelo menos o testador não dará um novo sinal até que o procedimento tenha sido executado.

Se a condição não for cumprida, você deve encerrar o programa e dar o controle ao testador. Os programas costumavam ser lineares e, por isso, se faziam looping e esperavam por sinais vindos de cima. Agora, o programa é conduzido por eventos, quando ocorre um evento, por exemplo, um novo tick e o manipulador deste evento é chamado de start() depois de todo o trabalho necessário no processamento de um novo tick estar concluído, a função deve terminar, em vez de ser um despachante.

É correto verificar a condição no início(), a condição chegou, faça seu negócio, se não, termine seu trabalho e aguarde o próximo tique. Nós já ajustamos nossa lógica a isto.

 

Há outra questão.

O indicador exibe as linhas MA de dois pares de moedas em uma janela separada. Funciona bem.

Mas quando eu inseri uma condição no código:

"Se em um dos símbolos faltar uma barra, então no segundo símbolo - esta barra atual é pulada (não considerada)", desta forma:

int start()
  {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if( counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if( counted_bars>0) counted_bars-=10;
     limit=Bars- counted_bars;
  //---- основной цикл
ВОТ Я СТАВЛЮ ЭТО УСЛОВИЕ  :
    for( k = 0; k < iBars( Symbol_1,Period()); k++)   {  
    int symb2Shift = iBarShift( Symbol_2,Period(),iTime( Symbol_1,Period(), k),true);
    if( symb2Shift != -1)                            { 
//---------------------------------
    for( k=0; k< limit; k++)
       {
       Symbol1[ k]=     (iMA( Symbol_1,..... k)  ;
       Symbol2[ k]=     (iMA( Symbol_2,..... k)  ;           
       } 
                        }
                       }
//----
    return(0);
  }

Depois o mt4 fica pendurado por um minuto e meio a dois minutos. Então o indicador começa a funcionar, mas usa 35-45% da RAM.

Qual pode ser a razão, por favor aconselhe?

 

Boa tarde!

Você pode me dizer como escrever um indicador simples que destacaria uma determinada barra (deve ser definido nas opções), por exemplo, às 12h30 da linha vertical e assinar os dias da semana no gráfico (digamos, em algum lugar acima da hemorragia de cada dia)?

Obrigado!