[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 155

 
todem:
en la definición de una tendencia?

En un cambio de tendencia durante un periodo de tiempo... Véase https://www.mql5.com/ru/forum/131277/page148 y https://www.mql5.com/ru/forum/131277/page149
 

¿Pueden decirme por qué OrderSelect devuelve TRUE aunque el pedido con este ticket no exista (está borrado)?


   if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)
 
100yan:

en un cambio de tendencia en un tramo de tiempo...


Por favor, dígame si la función Tp y Slossa funciona aquí

if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = AveragePrice + TakeProfit * Point;
BuyTarget = PriceTarget;
Stopper = AveragePrice - Stoploss * Point;
flag = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
PriceTarget = AveragePrice - TakeProfit * Point;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Point;
flag = TRUE;

 
todem:
me ha compilado bien

Lo siento, el Indicador funciona - así es como estaba originalmente, y el error está en el archivo tcht - no compila.

Archivos adjuntos:
 

¿Puedo usar init para hacer cálculos para el buffer del indicador?

Quería recalcular en init todas las barras excepto la barra cero y en inicio la barra cero - no cuenta...

 
Pyro:

¿Pueden decirme por qué OrderSelect devuelve TRUE aunque no haya ningún pedido con ese ticket (ha sido eliminado)?

¿Has leído bien la referencia de la función?

Volvamos a leerlo:

---------------------------------------------------------------------------------------------------------------------------------------------------------------

bool OrderSelect( int index, int select, int pool=MODE_TRADES)
La función selecciona una orden para su posterior manipulación. Devuelve TRUE si la función se completa con éxito. Devuelve FALSE si la función falla. Para obtener información sobre el error, llame a la función GetLastError().
El parámetro pool se ignora si la orden se selecciona por el número de ticket. El número de ticket es un identificador único para el pedido. Para determinar de qué lista se selecciona una orden, debemos analizar su hora de cierre. Si la hora de cierre de la orden es 0, entonces la orden está abierta o pendiente y se toma de la lista de posiciones abiertas del terminal. Una posición abierta puede distinguirse de una orden pendiente por su tipo. Si la hora de cierre no es igual a 0, entonces la orden está cerrada o pendiente y ha sido seleccionada del historial del terminal. La distinción entre una orden cerrada y una orden pendiente eliminada también puede hacerse por tipo de orden.
Parámetros:
índice - Posición de la orden o número de la orden en función del segundo parámetro.
seleccione - La bandera del método de selección. Puede ser uno de los siguientes valores:
SELECT_BY_POS - el parámetro índice contiene el número de índice de la posición en la lista,
SELECT_BY_TICKET - el parámetro índice contiene el número de billete.
piscina - Fuente de datos para la selección. Se utiliza cuando el parámetroselect es igual a SELECT_BY_POS. Puede ser uno de los siguientes valores:
MODE_TRADES (por defecto) - la orden se selecciona entre las órdenes abiertas y pendientes,
MODE_HISTORY - la orden se selecciona entre las órdenes cerradas y borradas.


---------------------------------------------------------------------------------------------------------------------------------------------------------------

Este:

El parámetro pool se ignora si la orden se selecciona por el número de ticket. El número de billete es el identificador único del pedido. Para determinar de qué lista se selecciona una orden, hay que analizar su hora de cierre. Si la hora de cierre de la orden es 0, entonces la orden está abierta o pendiente y se toma dela lista de posiciones abiertas del terminal.

¿Qué haces?

if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)

He mostrado en rojo el parámetro pool, que se ignora cuando se elige por ticket y se toma una orden de cualquier lista (abierta o cerrada) de posiciones del terminal. Por eso devuelve la verdad. Al fin y al cabo, ese ticket existe y se selecciona un pedido, pero de la lista de pedidos cerrados...

Deberíamos hacerlo así:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()==0) {
      // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
   }

... o:

if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()>0) {
      // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
   }

... ...o:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET)) {
      if (OrderOpenTime()>0) {
         // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
      }
      if (OrderOpenTime()==0) {
         // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
      }
   }

Creo que lo he explicado muy bien... :)

 

artmedia70


Gracias por una respuesta tan detallada y completa. Realmente lo más claro posible :) ¡¡¡THX!!!

 
Pyro:

artmedia70


Gracias por una respuesta tan detallada. Lo más claro posible :) ¡¡¡THX!!!

:) Gracias. De nada.

Me gustaría advertir sobre algunas "insidias" de la selección de puestos abiertos por su billete. La cuestión es que al final de un día de negociación, cuando una posición se traslada al día siguiente, la empresa de corretaje vuelve a abrir la orden. Es decir, se cierra la posición actual y se abre otra con el mismo volumen, pero con una nueva entrada que incluye el canje. Por lo tanto, su Asesor Experto debe hacer un seguimiento de las órdenes reabiertas y tener en cuenta sus nuevos tickers, de lo contrario todo "fluirá" - la orden con el antiguo ticker aparecerá en la lista de órdenes cerradas, y usted no podrá abrir una posición existente trasladada al nuevo día de negociación utilizando el antiguo ticker. Las posiciones parcialmente cerradas correrán la misma suerte: también se les asignará un nuevo billete.

Por lo tanto, mantenga su propio registro estricto de todas las órdenes de EA y haga un seguimiento de todos esos cambios "insidiosos" en el tiempo.

 
artmedia70:


Me gustaría advertir sobre una cierta "insidia" de la selección de puestos abiertos por su billete. La cuestión es que al final del día de negociación, cuando una posición se transfiere al día siguiente, el CC vuelve a abrir la orden.

En algunas empresas de corretaje se hace esto, pero la gran mayoría no sufre tal cosa.
 
sergeev:
No sé si esto es cierto para algunas empresas de corretaje, pero la mayoría de ellas no hacen esta mierda.

¿No es una norma de "buena educación" considerar también este comportamiento del DC? Después de todo... Sí, no importa... Sólo intento tener en cuenta todo, bueno... o lo que tengo en cuenta.

La precaución vale por dos, ¿eh? ;)