[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 386

 
splxgf писал(а) >>

Probablemente algo así, porque los bucles infinitos tardan mucho en el 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);
}

para que salga en la ventana que quieras

 
Rita >>:

Добрый день.

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

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

Типа ф-и Comment();

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

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


Puede crear una etiqueta y cambiar el 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);
El código puede estar mal, pero funciona.
 
No lo dejes desatendido
 
¡Gracias, xeon y splxgf!
 
Amigos míos, buenas tardes.

Será interesante escucharle en la siguiente pregunta:

Existe la opinión de que la cotización de un par de divisas está influida por muchos otros instrumentos financieros:
movimiento de los principales índices bursátiles, futuros, opciones, etc.


1) ¿Cree que es posible rastrear esta influencia
(y, por lo tanto, utilizarlo de forma constructiva en una estrategia comercial)?

2) ¿Ha observado alguna correlación persistente entre los pares de divisas correspondientes y las cotizaciones de otros instrumentos financieros?

3) ¿Ha utilizado indicadores para demostrar dichas correlaciones?


(Espero tus comentarios en la rama temática de este foro con el mismo nombre: https://forum.mql4.com/ru/28930 )

 

splxgf писал

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

Probablemente algo así, porque los bucles infinitos tardan mucho en el hardware moderno.


Pero entonces el programa sólo comprobará la condición y si se cumple, lo venderá. Y si no lo hace, ¿qué hará? Se supone que debe esperar a que se cumpla la condición en este mismo fragmento de código.



Vinin escribió


¿Por qué has hecho un bucle? Si no hay ninguna condición, el programa debería simplemente salir y no esperar a que aparezca la señal.

Por eso hice el bucle, porque es en este fragmento de código donde el programa debe esperar a que aparezca la condición. No se puede salir al principio del bucle. ¿Cuál es la forma correcta de implementar la espera de una condición?


Y este es mi diseño:

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


- ¿Funciona y sólo se cuelga el probador? ¿O no funciona en absoluto? Quiero entender cómo esperar adecuadamente a que se cumpla una condición sin salir de la función dada.


Gracias por las respuestas.

 
Jahspear >>:


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


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


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

Lo más probable es que el programa funcione, y es erróneo esperar la condición sin salir de la función, al menos el probador no dará un nuevo tick hasta que se haya ejecutado el procedimiento.

Si la condición no se cumple, debe terminar el programa y dar el control al probador. Los programas solían ser lineales y, por lo tanto, se ponían en bucle y esperaban señales desde arriba. Ahora el programa es dirigido por eventos, cuando ocurre un evento, por ejemplo, un nuevo tick y el manejador de este evento es llamar a start() después de que todo el trabajo necesario en el procesamiento de un nuevo tick es terminado, la función debe terminar, en lugar de ser un despachador.

Es correcto comprobar la condición en el inicio(), la condición ha llegado, hacer su negocio, si no, terminar su trabajo y esperar a la siguiente garrapata. Ya ajustamos nuestra lógica a esto.

 

También hay una pregunta.

El indicador muestra las líneas MA de dos pares de divisas en una ventana separada. Funciona bien.

Pero cuando inserto una condición en el código

"Si en uno de los símbolos se pierde una barra, entonces en el segundo símbolo - esta barra presente se salta (no se considera)", así:

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);
  }

Entonces mt4 se cuelga de un minuto y medio a dos minutos. Entonces, el indicador empieza a funcionar, pero utiliza un 35-45% de la RAM.

¿Cuál puede ser la razón, por favor, aconséjeme?

 

¡Buenas tardes!

¿Podríais decirme cómo escribir un indicador sencillo que resaltara una barra determinada (debería establecerse en las opciones), por ejemplo a las 12.30 con una línea vertical y señalara los días de la semana en el gráfico (digamos en algún lugar sobre el heno de cada día)?

Gracias.