[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 137

 
hoz:

En este momento la tarea es la siguiente: fastMa ha cruzado slowMa hacia arriba... así que estamos buscando dónde comprar. Entonces esperamos hasta que el precio, es decir, Ask (ya que consideramos comprar) alcance fastMa ( bueno, supongo que no habrá un valor exacto, necesitamos +- cierta desviación, y esto se cambia por i_thresholdFromMa) y tan pronto como el precio alcance fastMa +- i_thresholdFromMa el Asesor Experto debe establecer BUYSTOP en (fastMa + buyHear * pt).

Lo que se me ha ocurrido no funciona en un terminal y no siempre funciona en otro. Algo va mal en general.

La última variante de la función buyHear aquí:

Estos son los parámetros de entrada:

Los errores se pueden ver en la captura de pantalla (en OrderSend() el precio se alimenta por encima de la varilla roja, y la orden como se ve en la captura de pantalla está por debajo de....):

He estado fuera unos días... Me pregunto: ¿tienen los mismos parámetros las varillas lanzadas en el gráfico que las varillas utilizadas en los cálculos? ¿Tal vez sea ahí donde está enterrado el perro?

(Todavía no he tenido tiempo de profundizar en el código y desmontarlo).

Yo haría una función, por ejemplo:

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

y llamarlo para obtener los parámetros

 

Hola, ¿podríais aconsejarme? Una señal del indicador para comprar se ha disparado, abro una orden sólo después de confirmar las dos velas siguientes hacia arriba.

 
Top2n:

Hola, ¿podríais aconsejarme? Una señal del indicador se ha disparado para comprar, abro una orden sólo después de confirmar las dos velas siguientes hacia arriba.


Así que comprueba que las dos últimas velas arriba y la condición de abrir una orden hace dos barras al mismo tiempo.
 
Roger:

Por lo tanto, compruebe que los dos últimos candlesticks hacia arriba y la condición de abrir una orden dos barras hacia atrás al mismo tiempo.

¿cómo lo hago?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


Y si es así, la señal se activa esperar la confirmación, sólo después de una barra hacia arriba o hacia abajo 2 bares.

Necesitamos que recuerde la barra sobre la señal, la barra después de la señal, compararlas si las dos son ascendentes o descendentes, entonces .....

 
Top2n:

¿cómo lo hago?


Si la señal funcionó, esperamos la confirmación, pero después de que la barra suba o baje.

Debe recordar la barra sobre la señal, la barra después de la señal, compararlas si las dos son ascendentes o descendentes, entonces .....

Muestra cómo tienes a bay_min.
 
Top2n:

¿cómo lo hago?


Si la señal funcionó, esperamos la confirmación, pero después de que la barra suba o baje.

Debe recordar la barra sobre la señal, la barra después de la señal, compararlas si las dos son ascendentes o descendentes, entonces .....



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
Pregunta para los asesores expertos

Estoy escribiendo un simple Asesor Experto y me encuentro con muchos problemas.

La condición es

Recuerdo el precio de cierre de la barra actual y lo introduzco en la variable Startprice si la cuarta barra anterior estaba en la barra deslizante.


Si la condición se cumple, entonces dibuja un icono que muestra el precio de cierre de la barra, es decir, el precio inicial.

Lo que he conseguido es que el icono se dibuje, pero sólo una vez, mientras que yo lo necesito siempre.

El precio de cierre de la barra no coincide con el precio Startprice a 0,00001. ¿Por qué y cómo lo arreglo?

He intentado redondear y recortar a 5 dígitos, pero no ha servido de nada.

En el registro usando la impresión llamo el valor Startprice, muestra el número sólo hasta 4 dígitos y menos.

¿Cómo conseguir la misma precisión que en la ventana de datos del terminal?

Este problema del punto decimal también se aplica al propio deslizador. Si llamas a sus valores a través de print, no puedes obtener más de 4 dígitos en el registro.



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
parámetros y tiempo de la prueba
 
Utilice DoubleToStr(number, Digits) para la salida. En lugar de Dígitos, puede escribir la precisión que desee. Añada al nombre del icono la hora de la barra en la que está fijando el icono.
 
artmedia70:
Utilice DoubleToStr(number, Digits) para la salida. En lugar de Dígitos puede escribir la precisión que desee. Añada al nombre del icono la hora de la barra en la que está fijando el icono.


si es así

Startprice=DoubleToStr(Close[0],5);

no funciona, culpa a '=' - tipos incompatibles C:\fortest\experts\sve.mq4 (34, 14)

¿Cómo lo escribo correctamente?

Gracias por la respuesta, he estado luchando con esto durante una semana )

 
artmedia70:
Utilice DoubleToStr(number, Digits). En lugar de Dígitos, puede escribir la precisión que desee. Añade el tiempo de la barra al nombre del icono donde lo estás configurando.

pero para la salida, entiendo que la impresora sólo imprime 4 o menos dígitos.

entonces si Print (DoubleToStr(Startprice,5)); // imprimir Startprice

da 5.

Pero aquí está la forma de añadir el tiempo de la barra.

Esta línea no añade el tiempo del bar?

  datetime TmR1=Time[0];