voidOnTick()
{
TimeCurrent(dt);
//--- Достаточно ли количество баров для работыif(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
{
Alert("На графике меньше 10 баров, советник не будет работать!!");
return;
}
//--- сначала нужно записать в массивы значения буферов индиктора Fractal//--- заполнение данными буфераArraySetAsSeries(Signal,true);
ArraySetAsSeries(Main,true);
if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;
double Main_1=Main[1];
Main_1=NormalizeDouble(Main_1,5);
Print("Main_1=",DoubleToString(Main_1,5));
double Main_2=Main[2];
Main_2=NormalizeDouble(Main_2,5);
double Main_3=Main[3];
Main_3=NormalizeDouble(Main_3,5);
double Signal_1=Signal[1];
Signal_1=NormalizeDouble(Signal_1,5);
Print("Signal_1=",DoubleToString(Signal_1,5));
double Signal_2=Signal[2];
Signal_2=NormalizeDouble(Signal_2,5);
double Signal_3=Signal[3];
Signal_3=NormalizeDouble(Signal_3,5);
// Для сохранения значения времени бара мы используем static-переменную Old_Time.// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.// Если они не равны, это означает, что начал строится новый бар.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// копируем время текущего бара в элемент New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, успешно скопировано
{
if(Old_Time!=New_Time[0]) // если старое время не равно
{
IsNewBar=true; // новый барif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
Old_Time=New_Time[0]; // сохраняем время бара
}
}
else
{
Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
ResetLastError();
return;
}
// открытие покупок
if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
{
if(IsNewBar!=false)
{
{
open_by_market();
}
}
}
// закрытие покупок if (Signal_3>80&&Signal_2>80&&Signal_1<80)
{
if(PositionsTotal()>0)
{
for(int i=0;i<PositionsTotal();i++)
{
ulong orders_ticket=PositionGetTicket(i);
if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
{ trade.PositionClose(orders_ticket); }
}
}
}
}
Buenos días. Por favor, aclare cómo implementar dos tareas (usando señales de compra como ejemplo).
dado: punto de entrada - cruce de la línea estocástica por debajo de 20
cierre de la operación - cruce del nivel 80 a la baja a través de la línea del estocástico lento
es decir, no abrir varias posiciones en el mismo nivel como en la imagen adjunta
2. cerrar en el segundo, no en el primer cruce del nivel 80 de arriba a abajo con una línea estocástica lenta
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Por favor, indique cómo acceder a la información de la posición en la función OnTick del Asesor Experto construido. Al menos, si está abierto o no. ¿Dónde puedo conseguir un indicador de la posición? ¿O hay que hacerlo de otra manera?
VHS: Por favor, indique cómo acceder a la información de posición en la función OnTick de un Asesor Experto construido. Al menos, si está abierto o no. ¿Dónde puedo conseguir un indicador de la posición? ¿O hay que hacerlo de otra manera?
El Asesor Experto está diseñado por el Asistente utilizando una clase de señal personalizada y una clase de negociación personalizada. El código del Asesor Experto en sí mismo es estándar. ExtExpert.OnTick() se llama en OnTick, el resto del código se construye utilizando la biblioteca estándar. En realidad, esta pregunta es una continuación de la anterior, a la que nadie ha respondido. Quiero que el Asesor Experto diseñado por el Asistente utilice la clase de señales personalizadas sólo para abrir posiciones y las cierre sólo cuando opere e ignore las señales de la clase de señales. Descubrí cómo ignorar las señales. Pero cómo obtener información en onTick sobre si hay una posición abierta para permitir ignorar, no entiendo.
"D" y "L", una al lado de la otra en el teclado. No es así.
Sí, Artyom, muchas gracias. Al parecer, la sustitución automática (o las manos torcidas). Y la clase personalizada y el cierre no son trayDing, sino trayLing.
En la clase CExpert, el método Processing entra primero en Direction y busca una señal de la clase signal. Y luego (sólo si hay un SelectPosition) comprueba el Trailing. Como resultado, si hay una posición abierta, a veces se cerrará en ausencia de señales de la clase Trailing, obteniendo una señal de la clase signals.
La variante anterior - tomar la información sobre la presencia de una posición abierta de la clase Trailing Stop y pasarla a Ignorar a través de OnTick - no funcionó. He aprendido a memorizar en OnInit el objeto de arrastre y a transferirlo a OnTick. Pero sólo funciona mientras la posición está abierta. Pero después de que se cierre, el procesamiento no comienza a arrastrarse e Ignorar permanece ignorado. Así que sólo hay un toque final: después de cerrar la posición, definir este momento en OnTick y devolver el valor "0". Pero cómo obtener efectivamente información sobre (presencia/ausencia de) una posición en OnTick no lo entiendo.
VHS: Sí, Artem, muchas gracias. Al parecer, el cambio automático (o las manos torcidas). Y la clase personalizada y cerrada no es trayDing, es trayLing.
En la clase CExpert, el método Processing entra primero en Direction y busca una señal de la clase signal. Y luego (sólo si hay un SelectPosition) comprueba el Trailing. Como resultado, si hay una posición abierta, a veces se cerrará en ausencia de señales de la clase Trailing, obteniendo una señal de la clase signals.
La variante anterior - tomar la información sobre la presencia de una posición abierta de la clase Trailing Stop y pasarla a Ignorar a través de OnTick - no funcionó. He aprendido a memorizar en OnInit el objeto de arrastre y a transferirlo a OnTick. Pero sólo funciona mientras la posición está abierta. Pero después de que se cierre, el procesamiento no comienza a arrastrarse e Ignorar permanece ignorado. Así que sólo hay un toque final: después de cerrar la posición, definir este momento en OnTick y devolver el valor "0". Pero cómo obtener efectivamente información sobre (presencia/ausencia de) una posición en OnTick no lo entiendo.
Creo que puedes hacerlo mucho más fácil - en tu EA establece el umbral de CIERRE en 100, y da un peso de 0,5 a la señal - así una señal con un peso de 0,5 NUNCA pasará el umbral de 100
Buenos días. Por favor, aclare cómo implementar dos tareas (usando señales de compra como ejemplo).
dado: punto de entrada - cruce de la línea estocástica por debajo de 20
cierre de la operación - cruce del nivel 80 a la baja a través de la línea del estocástico lento
es decir, no abrir varias posiciones en el mismo nivel como en la imagen adjunta
2. cerrar en el segundo, no en el primer cruce del nivel 80 de arriba a abajo con una línea estocástica lenta
Buenos días. Por favor, aclare cómo implementar dos tareas (usando señales de compra como ejemplo).
dado: punto de entrada - cruce de la línea estocástica por debajo de 20
cierre de la operación - cruce del nivel 80 a la baja a través de la línea del estocástico lento
es decir, no abrir varias posiciones en el mismo nivel como en la imagen adjunta
2) La segunda orden se cerraría en el segundo cruce, no en el primero, del nivel 80 a la baja a través de la línea estocástica lenta
Primero hay que formularlo claramente:
Por favor, indique cómo acceder a la información de posición en la función OnTick de un Asesor Experto construido. Al menos, si está abierto o no. ¿Dónde puedo conseguir un indicador de la posición? ¿O hay que hacerlo de otra manera?
¿Quién ha diseñado el Asesor Experto?
Por favor, muéstrame el código.¿Quién diseñó al experto?
Muestra el código, por favor.***Y sólo he cerrado por el comercio ***
No está claro.
VHS:
***а закрывал уже только по трейдингу ***
Vladimir Karputov:
No está claro.
"D" y "L", una al lado de la otra en el teclado. Mi error.
"D" y "L", una al lado de la otra en el teclado. No es así.
Sí, Artem, muchas gracias. Al parecer, el cambio automático (o las manos torcidas). Y la clase personalizada y cerrada no es trayDing, es trayLing.
Creo que puedes hacerlo mucho más fácil - en tu EA establece el umbral de CIERRE en 100, y da un peso de 0,5 a la señal - así una señal con un peso de 0,5 NUNCA pasará el umbral de 100