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));}
//-----------------------------------------------------------------------------+
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.
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.
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] ) //и эти бары бичьи
{
// что-то делаем
}
}
// я думаю, как-то так.
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"externint MA_Period = 50; //периуд Маexternint MA_Method =MODE_SMA; //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average)://*MODE_SMA externint 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); // распечатаем Startpricedatetime TmR1=Time[0]; // запоминаем время текущего бара? ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект
ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
ObjectSet("Rep1", OBJPROP_ARROWCODE,71);
return(0);
}} }
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.
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:
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.
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.
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?
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 .....
¿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 .....
¿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 .....
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.
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í
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 )
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?