Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 832

 
void OnTick()
  {
 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 мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.

   static datetime 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

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Archivos adjuntos:
121.png  27 kb
 
gastinets:

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:

  • condición de apertura de la posición
  • condición cercana

 
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?

¿Quién ha diseñado el Asesor Experto?

Por favor, muéstrame el código.
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 
Vladimir Karputov:

¿Quién diseñó al experto?

Muestra el código, por favor.
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.
 
VHS:
***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.

 
Artyom Trishkin:

"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