Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 901

 

Cita del manual:

//+------------------------------------------------------------------+

//|Función de inicialización de expertos|
//+------------------------------------------------------------------+
intOnInit()
{
//--- obtener el valor del indicador personalizado
doublevalue=iCustom(_Símbolo,_Periodo,"::Indicadores\NdeMuestraIndicador.ex4",0,0);

La referencia a lasvariables indicadoras en la función de inicialización, no en la función de inicio...La referencia a las variables indicadoras en la función de inicialización sólo abre una posición.

 
Se hace tarde. Artem, ¿podrás responder mañana? Gracias de antemano.
 
Oleg Kolesov:

Cita del manual:

//+------------------------------------------------------------------+

//|Función de inicialización de expertos|
//+------------------------------------------------------------------+
intOnInit()
{
//--- obtener el valor del indicador personalizado
doublevalue=iCustom(_Símbolo,_Periodo,"::Indicadores\NdeMuestraIndicador.ex4",0,0);

La referencia a lasvariables indicadoras en la función de inicialización, no en la función de inicio...La referencia a las variables indicadoras en la función de inicialización sólo abre una posición.

En lugar de iniciar es hora de usar OnTick() y otros manejadores de eventos. Olvídate de las funciones del antiguo MetaTrader 4. El nuevo MQL4 es ahora muy parecido a MQL5 - las únicas diferencias están en una organización diferente de las funciones de comercio y de los indicadores - ahora se crean en el manejador OnInit() - se crea un manejador del indicador y se realiza el acceso de datos a este manejador. En MQL4 es diferente. Pero los recursos se localizan de la misma manera, si no me falla la memoria.

Y el acceso a los datos calculados no es muy diferente del acceso a través de iCustom() de forma habitual - su nombre es sólo ligeramente diferente.
Документация по MQL5: Обработка событий / OnTick
Документация по MQL5: Обработка событий / OnTick
  • www.mql5.com
//|                                                   TradeByATR.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Oleg Kolesov:
Se hace tarde. Artem, ¿podrás responder mañana? Gracias de antemano.

No prometo nada, estoy ocupado.

Tarde ... son las 04:51 ... eso es "tarde".

 
Artyom Trishkin:
  1. El precio de fijación de la orden no está normalizado.
  2. Todos los precios deben ser comprobados por el StopLevel - si la distancia de la orden en puntos desde el precio es menor que el valor del StopLevel, entonces habrá un error 130 - stops erróneos

Creo que el problema no es con StopLevel ya que sigue abriendo una orden. Pero en los siguientes ticks se genera un error

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include  <Init_Deinit.mqh> 

// Переменные
extern double lots    = 0.01;
extern int    Level   = 300;
extern double StopL   = 300;
extern double TakeP   = 1000;


// Start Programm
void OnTick() 
  { 
  //--- вычисленные значений для BuyStop
   
   double price_buystop=NormalizeDouble (Ask+Level*Point, Digits);
   StopL =NormalizeDouble(price_buystop-StopL*Point,Digits); 
   TakeP =NormalizeDouble(price_buystop+TakeP*Point,Digits); 
   
//--- Размещаем отложный ордер BuyStop
   int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price_buystop,3,StopL,TakeP,"Rupture",1111,0,clrGreen); 
   if(ticket<0) 
     { 
      Print("BuyStop завершилась с ошибкой #",GetLastError()); 
          } 
   else 
      Print("Функция BuyStop успешно выполнена"); 
      }
 
Doszhan:

Creo que el problema no es con StopLevel ya que sigue abriendo una orden. Pero en los siguientes ticks se genera un error

Hay que comprobar si el precio es menor que el stop loss o el spread, entonces por supuesto habrá un error. Este es el primero.

A juzgar por el texto, no se puede comprobar si el pedido ya se ha abierto o no.

De esta manera se abrirá hasta el infinito en cada tic.

 
Oleg Kolesov:

H=iCustom(NULL,TF,"::Indicadores\KChange.ex4",History,Period_1,Period_2,MA_method,0,1);

El compilador no encontró ningún error, pero el probador funciona mucho más lento? ¿Es normal?

//-----------------------------------------------------------------------------------------------------------------

El manual de MQL4 dice: ¿referencia a las variables en la función de inicialización?

¿Refiere a las variables indicadoras en la función deinicialización, no en la función de inicio? ¡La gente con experiencia me dice por favor!

si es lento, hay que optimizar-acelerar el indicador

debe llamar a donde quiera comprobar los valores del indicador, enla inicialización sólo se recibirá un valor

 
nalyk:

Estás buscando un fractal en la tercera barra, puede que no esté ahí. Busca el primer fractal del ciclo.


Esto tampoco funciona. La orden se coloca en base a la alta y baja de 2 velas.
 
Valerius:

Hay que comprobar si el precio es menor que el stop loss o el spread, entonces por supuesto habrá un error. Este es el primero.

A juzgar por el texto, no se puede comprobar si el pedido ya se ha abierto o no.

De lo contrario, se abrirá indefinidamente en cada tic.

Exactamente, no se abre en cada tic, sólo se abre una vez.
 
Doszhan:
Exactamente, no se abre en cada tic, sólo se abre una vez.

¿Hay un error 130 en el cuaderno de bitácora?

Arriba se explica de dónde viene y cómo hacer lo correcto para evitarlo.

No lo hiciste.

Razón de la queja: