[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!
[Excluído]  
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 )

[Deleted]  

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?

[Excluído]  

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!