Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 871

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия ----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ
   int OrdBuy_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (OrdBuy_1()==true)                              //Если был открыт ордер №1, то...
     {                                                 //...выполнить следующее:...
                                                       //...при условии, что Желтая выше красной, с сужением(условие1)...
                                                       //...и есть верхний перелом Средней (условие2)...
                                                       //...ИЛИ при условии, что Желтая выше красной, с расширением(условие1а)...
                                                       //...и есть верхний перелом Боллинджера (условие2а)... 
     if ((Yellow_0>Red_0) && (Yellow_0-Red_0)<(Yellow_1-Red_1) && (MA_2 < MA_1 && MA_1 > MA_0) || (Yellow_0>Red_0) && (Yellow_0-Red_0)>(Yellow_1-Red_1) && (MB_2 < MB_1 && MB_1 > MB_0))
        {                              
       bool Ans=OrderClose(OrdBuy_1,Lots,Bid,0);       //...закрыть ордер №1 по цене Bid (лок.переменная)и выдать сообщение                                                      
         Alert("Попытка закрыть ордер БАЙ лотом("Lots"), с ценой открытия("Ask"). Ожидание ответа..");
        }
      }
   if (Ans==true)                                     // Если получилось,... 
        {                                             //... выдать сообщение
         Alert ("Закрыт ордер БАЙ лотом("Lots"),с ценой открытия("Ask"), цена закрытия("Bid"));
        }
 
Este es un ejemplo ligeramente modificado del post anterior
 
rapid_minus:

r772ra yartmedia70, gracias por la aclaración.

Tengo entendido que la magia es necesaria principalmente cuando un operador utiliza varios EAs, con varias órdenes abiertas, en varios pares de divisas, cuentas, etc. (¿verdad?)

No lo creo, y si pienso que mi Expert Advisor funcionará en beneficio, me bastará. Todavía lo estoy desarrollando para un par, una cuenta en una compañía de corretaje y sólo una orden debe estar abierta y el mago (o cualquier otro identificador para una posición abierta) es necesario para que se cierre sólo al ocurrir ciertas condiciones para esta misma orden y otras condiciones que son válidas para cerrar otras órdenes (que pueden estar abiertas sólo después del cierre de esta orden) no son válidas para esta orden.

Por ejemplo, una orden puede estar abierta cuando aparezcan las condiciones (a+b+c+d+d) o (a+d+e) o (f+c+i+c) y, dependiendo de las condiciones en las que esté abierta la BAY, debería cerrarse según sus propias condiciones:(a+b+c+d) por (f+j+l),(a+d+e) por (h+l+m+n),(g+z+i+k) por (p+r+c+t) .

Me parece que el bucle de orden tampoco es necesario aquí. Tiene que haber alguna solución sencilla que no ocupe mucho espacio. He expuesto mi visión más arriba, pero aún no he llegado al análisis, y además de errores lógicos debo tener errores de sintaxis (pueden faltar paréntesis o estar mal colocadas las variables, etc.).

No lo consideres un problema, por favor ayuda. Estoy atascado sin ella. Gracias

Determina el ticket de la última posición abierta y lo procesa. IMHO - almacenar el número de ticket en una variable es malo, ya que es fácil perderlo en caso de cualquier fallo. Para trabajar con una orden, primero hay que seleccionarla. Y se puede seleccionar por índice, o por billete. El billete debe conocerse con exactitud. Después de una selección exitosa usando el ticket, también debemos comprobar si la posición con este ticket ha sido cerrada. Si sólo hay una posición en el mercado, el ciclo no es una operación que requiera mucho tiempo. Pero no necesitamos almacenar el número del billete en una variable. Se puede seleccionar el último orden de la lista, pero hay una dependencia de ordenación, que se puede cambiar (antes, había una dependencia de ordenación en el terminal, luego se quitó, luego volvió a aparecer, luego se volvió a quitar) - ¿crees que no volverá a aparecer? No lo sé. Sólo habrá una iteración en el bucle cuando sólo haya una posición en el mercado, ¿es mucho?

¿Ha llegado la condición de comprar cerca?
Si es así, buscaremos el ticket de la última posición de compra abierta
Si no, entonces vamos al principio.
Si hemos encontrado el billete, hacemos lo que necesitamos en la situación dada con la orden
De lo contrario, vaya al principio

 
rapid_minus:
Este es un ejemplo ligeramente modificado del post anterior

¿Qué es la función OrdBuy_1()? No es una variable sino una función. Esta construcción es completamente errónea. Una función se define fuera de cualquier otra función, no dentro.

 
artmedia70:

Determina el ticket de la última posición abierta y lo procesa. IMHO - almacenar el número de ticket en una variable es malo, ya que es fácil perderlo con cualquier fallo. Para trabajar con la orden, primero hay que seleccionarla. Y se puede seleccionar por índice, o por billete. El billete debe conocerse con exactitud. Después de una selección exitosa usando el ticket, también debemos comprobar si la posición con este ticket ha sido cerrada. Si sólo hay una posición en el mercado, el ciclo no es una operación que requiera mucho tiempo. Pero no necesitamos almacenar el número del billete en una variable. Se puede seleccionar el último orden de la lista, pero hay una dependencia de ordenación, que se puede cambiar (antes, había una dependencia de ordenación en el terminal, luego se quitó, luego volvió a aparecer, luego se volvió a quitar) - ¿crees que no volverá a aparecer? No lo sé. En el ciclo habrá una sola iteración con una sola posición en el mercado, ¿es mucho?

¿Ha llegado la condición de comprar cerca?
Si es así, buscaremos el ticket de la última posición de compra abierta
Si no, entonces vamos al principio.
Si hemos encontrado el billete, hacemos lo que necesitamos en la situación dada con la orden
De lo contrario, vaya al principio

Gracias, intentaré rehacerlo. Aun así, aunque trataré de rehacer según tu explicación, expresa mis errores en el ejemplo anterior para no repetirlos.

Gracias

 
rapid_minus:

Gracias, intentaré rehacerlo. Aun así, aunque trataré de rehacer según tu explicación, expresa mis errores en el ejemplo anterior para no repetirlos.

Gracias

Tengo que irme, no tengo tiempo. Brevemente - si la variable es int, ¿por qué la comprueba como bool? Los valores de Stop Loss y Take Profit deben ser normalizados. No busqué más.
 

He jugado con la línea de tendencia y he aprendido a conseguirla. Pero resulta que los objetos gráficos no funcionan durante la optimización en el probador.

¿Qué debo hacer? ¿Vale la pena conseguirlo en un indicador?

Buffer[i]= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);

¿Funcionará la optimización de esta manera?

 
artmedia70:
Tengo que irme, no tengo tiempo. En resumen: si una variable es int, ¿por qué la compruebas como bool? Los valores de Stop Loss y Take Profit deben ser normalizados. No busqué más.

Bueno, estoy completamente confundido: OrdBuy_1( ) es la función que abre BAY en las condiciones #1 por encima de esta función. Sólo que probablemente el tipo correcto sea double y no int, porque devuelve el precio de apertura de la orden. Y por lo que tengo entendido, no lo he insertado en ninguna función; se coloca por separado, después de int start(), extrayendo los valores de todos los indicadores necesarios y analizando la situación actual del mercado (¿me equivoco?).

¿Y cómo normalizo la parada y la toma, o mejor aún, cómo no las pongo?

Y no entiendo lo del cheque. Debo haber entendido mal el tutorial - "bool OrderClose (int ticket, double lots, double price, int slippage, color Color=CLR_NONE)Función para cerrar una orden de mercado." ¿Qué es un cheque?

En fin, cuanto más avanzamos, más tonto se vuelve :(.

 
Forexman77:

He jugado con la línea de tendencia y he aprendido a conseguirla. Pero resulta que los objetos gráficos no funcionan durante la optimización en el probador.

¿Qué debo hacer? ¿Vale la pena conseguirlo en un indicador?

¿Funcionará la optimización de esta manera?

Calcula una línea virtual en lugar de la real.
 
Forexman77:

He jugado con la línea de tendencia y he aprendido a conseguirla. Pero resulta que los objetos gráficos no funcionan durante la optimización en el probador.

¿Qué debo hacer? ¿Vale la pena conseguirlo en un indicador?

¿Funcionará la optimización de esta manera?

No, no lo hará. Los gráficos sólo se muestran en el modo de visualización.