Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1154

 
KhuKhu:

Hola amigos.

Cómo hacer que los valores de stop loss, tekprofit y trailing se muestren como porcentaje en lugar de pips.

Esta fórmula es demasiado recargada y no funciona en absoluto

StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits);

Me gustaría tener la forma más simple de porcentaje.

Doble Stoploss = 0,05;

--------

Profit=Bid-Stoploss en porcentajes(es un ejemplo desordenado, pero sólo para que quede claro)

Gracias.

Un ejemplo descuidado lleva a una respuesta descuidada. Para entenderlo, hay que comprender a partir de qué se mide el porcentaje.

 
Андрей Касторский:
.. Quien necesite ayuda para escribir un EA, puedes enviarme un correo electrónico. Ayudaré

ayudar a tomar el precio de la barra de cero, aquí está la discusión

https://www.mql5.com/ru/forum/160683/page237#comment_5350688

 
Alexey Viktorov:

Un ejemplo endeble da lugar a una respuesta endeble. Para entenderlo, hay que comprender con qué se miden los porcentajes.

Lo tengo.

Intentaré ser más claro.

Mi código está escrito originalmente de la siguiente manera:

extern double StopLoss =0;

extern double TakeProfit =0;

extern double SL_PERCENT = 0,02;

extern double TP_PERCENT = 0,03;

extern double TRALL_PERCENT = 0,01;

extern double Lots =0,5;


Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3, NormalizeDouble(OrderOpenPrice+(OrderOpenPrice + StopLoss)/100*SL_PERCENT,Digits),NormalizeDouble(OrderOpenPrice-(OrderOpenPrice - TakeProfit)/100*TP_PERCENT,Digits),",Magic,0,Red);

El StopLoss se activa pero no por el 0,02% sino por el 0,43%, lo cual es incorrecto. No sé sobre TakeProfit ya que nunca lo he probado, pero parece que también es incorrecto.

Tengo algunas sugerencias de que el código no es correcto.

Una cosa más, tal vez sea importante. Mis pedidos están abiertos para toda mi depo para 3-4 pares. A veces por cinco.


También quiero cambiar parámetros como StopLoss, Takeprofit, TrailingStop no en puntos, sino en porcentaje.

Por ejemplo,

1) Beneficio=OrderOnProfit+%TP_PERCENT

2) Stoploss=OrderOnPrice-%SL_PERCENT

Es decir

ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,%,%,",Magic,0,clrGreen);


No sé cómo modificarlo más para el arrastre.

Tomé una muestra del tutorial, pero obviamente estoy haciendo algo mal.

3.) TrailingStop=Bid-%TRALL_PERCENT

caso 0: // Orden de compra

if (NormalizeDouble(OrderOpenPrice-SL*Point,Digits)*SL_PERCENT/100<=(OrderOpenPrice-Ask) // Si es inferior a

NormalizarDoble(Oferta-(Oferta-TS)/100*PERCIENTE_TRAL,Dígitos)

|| NormalizeDouble(SL,Digits)==0)

{

SL=Bid-TS*Punto; //entonces modifícalo

string Text="Comprar "; // Texto para comprar

Modify=true; // asignado a modificar.

}


Realmente espero haber sido capaz de explicarme.

Gracias.

 

Cómo implementar correctamente la apertura de una operación (OrderSend) estrictamente al principio de la vela - OnTimer y/o OnTick,

¿Para no sobrecargar el terminal (20-30 gráficos abiertos y seguidos simultáneamente)?

se descubrió que el retraso en la aparición de un nuevo tick al principio de una vela puede ser de hasta 5-10 segundos; el desfase con el tick anterior es significativo (negativo para las condiciones de transacción)

p.s. al mismo tiempo en el Asesor Experto se supone que debe notificar sobre un posible acuerdo 1-2 minutos antes de la apertura del acuerdo, es decir, antes del comienzo de la apertura de una vela.

 
maxsoft:

Cómo implementar correctamente la apertura de una operación (OrderSend) estrictamente al principio de la vela - OnTimer y/o OnTick,

para no sobrecargar el terminal (20-30 gráficos abiertos y seguidos simultáneamente)?

Se ha comprobado que el retraso en la aparición de un nuevo tick al principio de una vela puede ser de hasta 5-10 segundos con un desfase importante respecto al tick anterior (es negativo para las condiciones de negociación)

p.s. en este caso, el Asesor Experto debe informar preliminarmente sobre una posible operación 1-2 minutos antes de la apertura de la operación, es decir, antes del comienzo de la apertura de la vela.

Tiene que ver todos los gráficos abiertos en el temporizador para ver si aparece una nueva barra.

Hay que crear una matriz de punteros a instancias de clases - una clase por cada marco temporal de cada gráfico abierto.

La clase que controlará la apertura de un nuevo bar se puede encontrar en este artículo.

Abra el gráfico y añádalo al conjunto de gráficos abiertos. Cerrar el gráfico - borrarlo de la matriz.

En el bucle del temporizador se pasa por un array de punteros a instancias de clases y se comprueba el hecho de la apertura de una nueva barra, que la clase devolverá en caso de formación de una nueva barra.

 
Artyom Trishkin:

Tiene que ver todos los gráficos abiertos en el temporizador para ver si aparece una nueva barra.

Tienes que crear un array de punteros a instancias de clases...

¿Y qué hay de la utilización de MQL4?

Y qué hacer con - "...se supone que notifica preliminarmente sobre un posible acuerdo 1-2 minutos antes de la apertura del acuerdo, es decir, antes de la apertura de una vela...", es decir, dentro de una barra

 

Bienvenido al tema https://www.mql5.com/ru/forum/208120#comment_5412193

No se puede encontrar un consenso.

Играем в блиц ЧТО? ГДЕ? КОГДА? 3 вопроса по 20 секунд
Играем в блиц ЧТО? ГДЕ? КОГДА? 3 вопроса по 20 секунд
  • 2017.07.07
  • www.mql5.com
Народ, подскажите пожалуйста, заморочился я тут по поводу AccountBalance() и AccountLeverage(). 1...
 

Antes de mostrar el tipo de duplicación, lo normalizo a 2 decimales, pero a veces no funciona. ¿Por qué? Aquí está una parte del código.

prof[num]=(string)NormalizeDouble((double)prof[num]+(double)profit2,2);

El tipo prof[] es una cadena

Y falla de la siguiente manera


 
Vladimir Tkach:

Antes de mostrar el tipo de duplicación, lo normalizo a 2 decimales, pero a veces no funciona. ¿Por qué? Aquí está una parte del código.

El tipo prof[] es una cadena

El fallo es el siguiente


DoubleToString()

DoubleToString

Convierte un valor numérico en una cadena de texto.

stringDoubleToString(
valor doble,//número
intdigits=8//número de decimales
);

Parámetros

valor

[in] El valor es un valor de punto flotante.

dígitos

[in] El formato de la precisión. Si el valor de los dígitos está entre 0 y 16, se obtendrá la representación en cadena del número, con el número de decimales especificado. Si el valor de los dígitos está entre -1 y -16, se obtendrá una representación de cadena del número en formato científico con el número de decimales especificado. En todos los demás casos, la representación en cadena del número tendrá 8 decimales.

Valor devuelto

Una cadena que contiene la representación de caracteres del número en el formato de precisión especificado.

Ejemplo:

Print("DobleCadena(120,0+M_PI) : ",DobleCadena(120,0+M_PI);
Print("DobleCadena(120,0+M_PI,16) : ",DobleCadena(120,0+M_PI,16);
Print("DobleCadena(120,0+M_PI,-16) : ",DobleCadena(120,0+M_PI,-16);
Print("DobleCadena(120,0+M_PI,-1) : ",DobleCadena(120,0+M_PI,-1);
Print("DobleCadena(120,0+M_PI,-20) : ",DobleCadena(120,0+M_PI,-20);

 

Algún que otro bicho maravilloso.

Añadimos las entradas:

input datetime test                                =0;

Compilar. Con la fecha 1970.01.01 cero, no es posible ajustar la hora a 00, 01 o 02 en los ajustes.
Razón de la queja: