[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 431

 
r772ra:
doble iClose( string symbol, int timeframe, int shift)

Algo así.

¡Muchas gracias!



 
extern double lot = 1;
extern double ts = 50; 
extern double sl = 50; 
extern double tp = 40;
extern double periodrsi = 30;
extern double hirsi = 80;
extern double lowrsi = 30;

int K=0;
int L=0;
 


int init()
  {
   return(0);
  }

 
int start()
  { 
    double r1 = iRSI(NULL,0,periodrsi,PRICE_CLOSE,1);


  

    static bool first = true;
    static int pre_OrdersTotal = 0;
    int _OrdersTotal = OrdersTotal();
    if ( first )
    {
        pre_OrdersTotal = _OrdersTotal;
        first = false;
        return(0);
    }
 
   
   
   
    if ( _OrdersTotal > pre_OrdersTotal ) 
{K=0;
L=0;}
    if ( _OrdersTotal < pre_OrdersTotal )
{K=0;
L=0;}
    pre_OrdersTotal = _OrdersTotal; 

if (r1>hirsi) K=1;
 {
 if ((K==1) && (r1<hirsi))

 { 
  L=(L+1);                        // набираем проходы вниз под hirsi

K=0;
 }
 }



 if(OrdersTotal()<1)

 {
 if((r1<hirsi) && (L==2))   //есть два прохода

 OrderSend(Symbol(),OP_SELL,lot,Bid,0,Ask+sl*Point,Bid-tp*Point,"Easiest ever",0,0);
Hola amigos, por favor, aconsejen una función que añada la siguiente condición a este código. La operación se abre sólo si el rsi ha hecho dos pases a la baja durante n-número de barras. es decir, si el rsi ha hecho dos pases a la baja durante 30 barras entonces abrimos una orden, no puedo entenderlo) Soy un principiante)
 
TemirKhan:
Hola amigos! sugieran una función que añada la siguiente condición a este código. La operación se abre sólo si el rsi ha hecho dos pases a la baja durante n-número de barras. es decir, si el rsi ha hecho dos pases a la baja durante 30 barras, entonces abrimos una orden, no puedo entenderlo).


Ponga en marcha el contador. Luego, cuando lo pasas por el historial, cuenta por la condición: "Si se cruza hacia abajo, se añade uno al contador... ", etc.

¡Aprende y tómate tu tiempo y lo harás bien!

 
hoz:


Ponga en marcha el contador. Luego, cuando lo pasas por el historial, cuenta por la condición: "Si se cruza hacia abajo, añade uno al contador... ", etc.

¡Aprende y tómate tu tiempo y todo saldrá bien!


Así que hay un contador de cruces, ahí está:
if (r1>hirsi) K=1;
 {
 if ((K==1) && (r1<hirsi))

 { 
  L=(L+1);                        // набираем проходы вниз под hirsi

K=0;
 }
 }
ahora necesitamos un contador de barras, pero ¿cómo?)) para que L pueda obtener un valor de "2" sólo si los cruces se producen dentro de 30 barras
 

Me puse a pensar. Investigué la función de Kim para disipar mis dudas... y mis argumentos se confirmaron. Por alguna razón, la comprobación del "flujo comercial libre" sólo se produce en abriendo и cerrar órdenes... Y cuando modificaciones (ajuste inicial de SL y TP), en traale y durante la transferencia de un puesto a Punto de equilibrio no hay ningún control. ¿Por qué? Al fin y al cabo, en ambos casos se llama al servidor.

Al fin y al cabo, si el operador es tomado, el Asesor Experto lógicamente no establecerá stops, por ejemplo, y no hará nada con la posición en absoluto. No entiendo esto.

 
hoz:

Me puse a pensar. Busqué en la función de Kim para disipar mis dudas... y mi razonamiento se confirmó. Por alguna razón, la comprobación del "flujo comercial libre" sólo se produce en abriendo и cerrar órdenes... Y cuando modificaciones (ajuste inicial de SL y TP), en traale y durante la transferencia de un puesto a Punto de equilibrio no hay ningún control. ¿Por qué? Al fin y al cabo, en ambos casos se llama al servidor.

Al fin y al cabo, si el operador es tomado, el Asesor Experto lógicamente no establecerá stops, por ejemplo, y no hará nada en la posición. No entiendo esto.


No es gran cosa. Ponerlo en el siguiente tick
 
Vinin:

No es gran cosa. Lo pondré en el próximo tick

Entonces, en ese caso, ¿por qué comprobarlo al abrir o cerrar? También se fijará en el siguiente tick :) Después de todo, puede jugar un gran papel para un scalper...
 
hoz:

En ese caso, ¿por qué comprobarlo al abrir o cerrar? También se fijará en la próxima garrapata :) Después de todo, puede jugar un papel muy importante para un scalper...

Así que todo está en tus manos. Así se hará. Algunos lo hacen así.
 

De nuevo he mirado en la referencia y de nuevo he leído las líneas aquí:

https://docs.mql4.com/ru/basis/preprosessor/import

Для импорта функций во время выполнения mql4-программы используется так называемое позднее связывание. Это значит, что пока не вызвана импортируемая функция, соответствующий модуль (ex4 или dll) не загружается.

Es decir, para que la biblioteca se cargue, debería llamarse en el código después de las líneas de importación, ¿no?

Por ejemplo, yo lo hice así:

#import "hoz_Base@Library.ex4"
   double ND(double A);
   double Get_TradePrice(int fi_priceId,       // Цена: 0 - Ask; 1 - Bid
                      string fs_symbol);

1. Resulta que declarar funciones. que utilizaremos en el Asesor Experto al principio del código del Asesor Experto?

2. ¿y no declararlos mucho en el código del propio Asesor Experto y utilizar archivos de cabecera? ¿Es decir, sólo para las declaraciones?

Esta pregunta surgió porque he visto tales Asesores Expertos que fueron escritos por programadores bastante serios, pero sus archivos de cabecera contienen todas las funciones principales y no principales. Me sorprendió esto... La razón es que la velocidad de las bibliotecas compiladas es mucho mayor, además, el código de las funciones de la biblioteca está "aislado", lo que también es muy conveniente.

 
Buenos días, es la primera vez que vengo por aquí así que pido disculpas, no vi este hilo y creé uno nuevo, ¡realmente necesito escuchar a los profesionales!

https://www.mql5.com/ru/forum/145453