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

 
Valeriy Yastremskiy:

OrderSelect en el billete se ha hecho antes. La orden está pendiente. Cómo conseguir que la orden sea negociable, aparte de comprobar el tipo de orden en cada tick. En los registros, este tiempo se registra, pero parece que el campo para este tiempo en la estructura de la orden no se proporciona, ¿o estoy equivocado? Cuando cambiamos el tipo de orden, OrdersTotal() y OrdersHistoryTotal tampoco cambian, si entiendo bien.

El resto de cuestiones me parecen claras)

¿Has probado con OrderOpenTime? No recuerdo si cambia cuando se activa una posición.

No sé cuando es necesario comprobar si la orden pendiente se ha disparado cada tick(y no antes de la acción clave o cada 1...5 min), pero MT4 no tiene otra forma.

En MT5 es más conveniente. En OTT te enteras de la transacción, si necesitas trabajar con listas haces el procesamiento en OTT

 
datetime some_time=TimeCurrent();

extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)

extern double P=15;       //Таймфрейм

int start()

{

//Инициализация переменных

bool  FractalsUp=false;

bool  FractalsDown=false;

int   FractalsUpPrice=0;

int   FractalsDownPrice=0;

int   FractalsLimit=100;

double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for (int i=FractalsLimit; i>=0; i--)

{

      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

      double fu=iFractals(NULL,0,MODE_UPPER,i);

      double fl=iFractals(NULL,0,MODE_LOWER,i);

      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

      if(fu>0)

{

FractalsUp=true;

FractalsDown=false;

FractalsUpPrice=fu;



if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd=OrderCloseTime();

int hd=+iBarShift(Symbol3,P,Cd)+1;

if (hd<=2)

{

return(-1);

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

      if(fl>0)

{

FractalsUp=false;

FractalsDown=true;

FractalsDownPrice=fl;

if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd1=OrderCloseTime();

int hd1=+iBarShift(Symbol3,P,Cd1)+1;

if (hd1<=2)

{

return(-1);

}

}

metka2();

}

}

      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

      if(fu>0 && fl>0)

{

         FractalsUp=false;

         FractalsDown=false;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return(0);

}

int metka1()

{              

int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);

return(0);

}

int metka2()

{                        

int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);

return(0);

}

¡Buenas tardes!

Estoy trabajando en un búho sobre fractales. Hay un problema. Ayuda. La esencia es ésta:

El script busca el último fractal superior o inferior de las últimas 100 velas con la variable [FractalsLimit=100;] y abre una posición de COMPRA - si se rompe un fractal, y viceversa para la VENTA.

Los últimos 100 candeleros deben ser utilizados para encontrar el máximo o el mínimo de los fractales y abrir una posición. Es decir, se centra sólo en los fractales máximos y mínimos, no en los últimos.

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

¿Has probado con OrderOpenTime? No recuerdo si cambia cuando se activa una orden pendiente.

No sé cuándo es necesario comprobar cada tick(y no antes de las acciones clave o cada 1...5...minutos) si se ha disparado una orden pendiente, pero no hay otra forma de hacerlo en MT4.

En MT5 es más conveniente. En OTT, se aprende a realizar una transacción. Si necesita trabajar con listas, realizará el procesamiento en OTT.

OrderOpenTime muestra la hora de apertura de la orden pendiente. Es cuestión de entender más el funcionamiento. Así, la hora se escribe en el registro y en el diario y no se muestra en ningún otro lugar. Respectivamente, si no lo hemos arreglado, podemos verlo más tarde, según el hecho)))))

Si he entendido bien, será la apertura de la posición / acuerdo en MT5. Aunque no entiendo la división en orden/comercio/posición como una solución óptima, pero hay más datos, claro.

 
Aleksey Mavrin:

sucede)) 1 se pierde mucho en el fondo de las letras inglesas l i etc., es más conveniente llamar entonces a los sufijos 001, 2... etc.

Ya veo lo que quieres decir) corregí el error, ahora el valor del segundo mango es 1,0. Si se pone un plazo mayor en la primera asa que en la segunda, el valor de la segunda asa es 0. ¿Puede decirme, por favor, qué más tengo que arreglar para que el valor de la segunda asa sea correcto?

void OnTick()
  {
   double PriceArray[];
   
   int AOhandle = iAO(_Symbol,PERIOD_M15);
   
   ArraySetAsSeries(PriceArray, true);
   
   CopyBuffer(AOhandle, 0, 0, 3, PriceArray);
   
   double AOvalue = NormalizeDouble(PriceArray[0], 6);

   double PriceArray01[];
   
   int AOhandle01 = iAO(_Symbol,PERIOD_H1);
   
   ArraySetAsSeries(PriceArray01, true);
   
   CopyBuffer(AOhandle01, 1, 0, 3, PriceArray01);
   
   double AOvalue01 = NormalizeDouble(PriceArray01[0], 6);
    
   Comment ("Awesome Oscillator Value: ", AOvalue, "\n", "\n",
            "Awesome Oscillator Value: ", AOvalue01);
  }
 
Valeriy Yastremskiy:

OrderOpenTime muestra la hora de apertura de la orden pendiente. Es cuestión de entender más el funcionamiento. Resulta que la hora se registra en el registro y en el diario y no se refleja en ninguna otra parte. En consecuencia, si no lo hemos arreglado, entonces podemos mirar más tarde, según el hecho)))))

Llevas una semana sacando este tema. Te ofrecí repasar los principios de colocación de órdenes en la estrategia comercial

pero si esta cuestión es importante para usted, no hay problema en "arreglarlo" con un reajuste de un tick.

Si quieres probarlo, tendrás que hacerlo con cierta velocidad, pero si no tienes un tick real, probablemente acabarás con muchos errores, porque la velocidad de colocación de órdenes pendientes es mucho mayor.


Lo que me gustaría proponer estudiar es elCArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint

en CArrayInt añadirá tickets y este tipo de datos le permitirá eliminar fácilmente los "tickets que se volvieron comercializables".


como escribí arriba precisión - 1 tick, el código de comprobación será mínimo

Valeriy Yastremskiy:

En MT5 será una apertura de posición/operación, si entiendo bien. Aunque no entiendo la división a orden / trato / posición como una solución óptima, pero hay más datos por supuesto.

Si puedes escribir para MT5 - entonces ¿por qué estamos discutiendo? la plataforma es más potente, la funcionalidad es mayor - comparar MT4 y MT5 no tiene sentido, MT4 es más fácil de entrar, pero MT5 tiene más características

 
Igor Makanu:

Llevas planteando este tema desde hace una semana, te he sugerido que reconsideres los principios de colocación de órdenes en la estrategia comercial


Todavía no lo entiendo. La estrategia es, por supuesto, diferente. La pregunta viene del hecho de que un evento bastante importante sólo se refleja en el registro. Y nadie contestó directamente que no hay ningún lugar sino el registro del momento en que una orden se convirtió en comercializable))))

Y la lógica de la estrategia no depende del terminal. Si la lógica es coja, seguro que se puede inventar, pero la cojera no desaparecerá))))

 
Valeriy Yastremskiy:

Sigue sin estar claro. La estrategia es, por supuesto, diferente. La pregunta viene del hecho de que un evento bastante importante sólo se refleja en el registro. Y nadie ha respondido directamente que no hay ningún lugar más que el registro del momento en que la orden se convirtió en el mercado))))

no esta información - ¡¡¡nooooo!!!

importancia... bueno sí te importa, antes de eso, cuántos años de escribir estrategias y cómo funcionó, incluso en el beneficio ;)

por regla general, no coloque muchas órdenes pendientes, siga las órdenes de mercado, si es necesario, añada una orden pendiente - las órdenes pendientes se convierten en órdenes de mercado

utilizamos todo: promedios, pirámides, rejilla de órdenes y ... y muchos... No recuerdo estas payasadas en los foros de comerciantes, hace más de un año que no los leo - tengo más pensamientos propios que ajenos )))

 
Igor Makanu:

no hay tal información - ¡¡¡nooooo!!!

importancia... bueno es importante para usted, antes de eso, cuántos años de escribir una estrategia y que funcionaría, incluso en el beneficio ;)

por regla general, no debe colocar muchas órdenes pendientes, siga las órdenes de mercado, si es necesario, añada una orden pendiente - las órdenes pendientes se convierten en órdenes de mercado

utilizamos todo: promedios, pirámides, rejilla de órdenes y ... y muchos... Si no lo sabes, deberías leer estos trucos en los foros de comerciantes, yo no lo he hecho desde hace más de un año - tengo más pensamientos propios que ajenos )))

Gracias))))

Martin y el promedio es un autoengaño y prohibitivo (porque no se puede calcular ni predecir el riesgo por la definición de propiedades de BP))))) riesgo, que a veces, pero sólo a veces, está justificado))))

Si la estrategia es correcta, basta con una orden))))

 
Valeriy Yastremskiy:

Si la estrategia es correcta, basta con una orden))))

Si en su ST el número de órdenes está estrictamente establecido, entonces no debería tener problemas para determinar qué ha pasado con las órdenes pendientes en el tick actual

Saber la hora exacta no le aportará nada: toda la información se recibe a la llegada de la garrapata; si no hay garrapata, no hay información

 

Hola, me encuentro con un problema, cómo cambiar los parámetros de un indicador personalizado de un EA. El problema es que cuando cambio algún parámetro de la lista de indicadores, se crea una nueva copia. Cuando voy a las propiedades de estas copias, cada copia tiene su propio parámetro. Cuanto más cambie el parámetro, más copias se crearán. Lo utilizo a través de iCustom.

Por ejemplo:

#Recurso "\NIndicators\\\Ninicator.ex4"

extern Var1=1;

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

void OnTick()

{

int A;

Var1++;

A=iCustom(Symbol(),PERIOD_CURRENT,"::Indicadores\\\Nde",Var1,0,0);

Como resultado, vemos en la lista de indicadores:

Indicador (con el parámetro Var1=2)

Indicador (con el parámetro Var1=3)

Indicador (con el parámetro Var1=4)

.... etc.