[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 47

 

Queridos especialistas del foro, que también solían no entender casi nada.

Estoy tratando de escribir un simple Asesor Experto que utiliza el indicador Parabolic Sar como una herramienta de entrenamiento. Su acción se supone que es elemental: si el precio estaba por debajo del valor Sar y luego subió, entonces debemos comprar exactamente en el momento en que el precio cruza el indicador y exactamente una vez con el establecimiento de stop loss y take profit de 10 puntos. Y si es al revés, entonces vende.

El problema es que siempre compra y vende, pero lo hace mientras hay dinero libre en el depósito, no una vez. En otras palabras, en cuanto el precio sube por encima del nivel de Sar, está comprando continuamente hasta que el precio es más alto, y en cuanto el precio está por debajo de Sar, está vendiendo todo el tiempo hasta que el precio está por debajo.

De hecho, la pregunta es: ¿cómo hacer que nuestro EA haga una sola operación cuando aparezcan estas condiciones, y no un conjunto interminable de ellas?

Aquí está el código de mi Asesor Experto.

//+------------------------------------------------------------------+
//|                                    Current_sar_value_summary.mq4 |
//|                                         Орлов Денис Владимирович |
//|                                                 orlovkem@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Орлов Денис Владимирович"
#property link      "orlovkem@mail.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     //объявляем переменные
   double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены
   int _ticket;      //возвращает количество открытых позиций
   
   _sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
   _price=Bid;                      //приравнял переменную _price к текущему уровню цены Бид
   
   //описываем условие покупки: если уровень цены был ниже значения сар
   if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем
                {
                   Alert("Надо покупать");
                   _ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                 
                }
                 return(0);
           }
 
         
   if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар
         {
           if(_price<=_sar_value)// а потом стал ниже, то продаем
            {
                   Alert("Надо продавать");
                   _ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                   
            }
            return(0);
            
         }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Quiero pedirte que me ayudes a resolverlo, te prometo que cuando me convierta en gurú, no ignoraré las peticiones de la gente como yo.

Saludos, Denis Orlov.

 
orlovkem >> :

Queridos especialistas del foro, que también solían no entender casi nada.

Estoy tratando de escribir un simple Asesor Experto que utiliza el indicador Parabolic Sar como una herramienta de entrenamiento. Su acción se supone que es elemental: si el precio estaba por debajo del valor Sar y luego subió, entonces debemos comprar exactamente en el momento en que el precio cruza el indicador y exactamente una vez con el establecimiento de stop loss y take profit de 10 puntos. Y si es al revés, entonces vende.

El problema es que siempre compra y vende, pero lo hace mientras hay dinero libre en el depósito, no una vez. En otras palabras, en cuanto el precio sube por encima del nivel de Sar, está comprando continuamente hasta que el precio es más alto, y en cuanto el precio está por debajo de Sar, está vendiendo todo el tiempo hasta que el precio está por debajo.

De hecho, la pregunta es: ¿cómo hacer que nuestro EA haga una sola operación cuando aparezcan estas condiciones, y no un conjunto interminable de ellas?

Aquí está el código de mi Asesor Experto.

Quiero pedirte ayuda. Te prometo que cuando me convierta en un gurú, no ignoraré las peticiones de otros tontos como yo.

Atentamente, Denis Orlov.

¿Dónde se guarda el valor predictivo del indicador? (¿en qué variable...?) lo mismo con el valor del precio

double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены

 
lascu.roman >> :

y ¿dónde tienes el valor anterior del indicador? (¿en qué variable...?) lo mismo con el valor del precio

La cuestión es que el valor del indicador anterior está en la vela anterior y el precio cruza el valor del indicador en la vela actual.

Lo mismo pasa con el precio, ¿qué significa "valor del precio anterior", el precio del tick anterior? o el cierre de la vela anterior, pero no es eso.

Entiendo que tengo que añadir algo, pero qué es exactamente lo que no puedo entender. Por favor, ayuda, esta es mi primera experiencia.

>> Respetuosamente, Orlov Denis.

 
orlovkem >> :

La cuestión es que el valor del indicador anterior está en la vela anterior y el precio cruza el valor del indicador en la vela actual.

Lo mismo pasa con el precio, ¿qué significa "valor del precio anterior", el precio del tick anterior? o el cierre de la vela anterior, pero no es eso.

Entiendo que tengo que añadir algo, pero qué es exactamente lo que no puedo entender. Ayuda por favor, esta es mi primera experiencia.

Atentamente, Orlov Denis.

¿Entendiste lo que dijiste, entonces? Está comprobando el valor en un momento dado.

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Dos condiciones mutuamente excluyentes. ¿Cuándo se hizo más alto entonces?

 
Roger >> :

¿Entendiste lo que dijiste, entonces? Estás comprobando el valor en un momento dado.

Dos condiciones mutuamente excluyentes. ¿Cuándo ha subido?

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Tal vez formulé mal el comentario, pero la esencia sigue siendo cierta, el nivel de precios se ha vuelto más alto que el valor del indicador, hay que comprar y compra, pero hay que hacerlo una vez, y el EA compra mientras haya dinero en el depósito. Sólo hay que limitar el número de ofertas. No haga más de uno a la vez, eso es lo que no funciona.

 
xruss >> :

pero si había una orden de venta en el historial y luego el Asesor Experto la cerró (en el tipo de historial, ésta (su cierre) se muestra como t/p o s/l - ¿se considerará como la última?

Si una orden (de compra o de venta) se cerró en último lugar (el Asesor Experto la cerró, o se activó t/p o s/l) y pasa bajo las condiciones de

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

entonces, en consecuencia, se considerará el último. ¿Qué efecto concreto no puede conseguir?
 
Everlost >> :

Si una orden (de compra o de venta) se cerró en último lugar (el Asesor Experto la cerró, o se activó t/p o s/l) y pasa las condiciones

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

entonces, en consecuencia, será considerado como el último. ¿Y cuál es exactamente el efecto que no puede conseguir?

Sí, probablemente sea porque he excluido OrderMagicNumber() del código

Quiero evitar la reapertura de pedidos después de haberlos cerrado. Quiero hacer que mis órdenes no se vuelvan a abrir después del cierre (a veces sucede que las condiciones para la reapertura siguen existiendo). La misma historia con la venta. Pensé que sería genial declarar en mis condiciones si tenía una posición de compra y tenía ganancias - no para reabrir la posición de compra).

((

 
xruss писал(а) >>

Sí, probablemente porque he excluido OrderMagicNumber() del código

Quiero hacer que los pedidos no se vuelvan a abrir después del cierre. Pensé que sería genial si especificaba en las condiciones, si tenía una posición de compra y tenía un beneficio - para no volver a abrir la compra de nuevo. Pero todavía se abre - ¡cabrón!))

((

La forma más fácil de controlar el número de órdenes abiertas al mismo tiempo

if(OrdersTotal()<1){

   .................
   .................
   условия установки ордеров 

}
 
goldtrader >> :

Lea la descripción de OrderSend( ... ).

El número mágico (magik) se asigna a una orden cuando se envía al servidor.

Se utiliza principalmente para identificar las órdenes/posiciones pendientes.

Es decir, para que el EA no toque órdenes "ajenas". Esto lo hace un EA o un script.

El Mago no se puede ajustar manualmente. Usted mismo establece las reglas en el EA/Script.

El mago suele ser estático, pero puede ser dinámico si es necesario.

Mira algunos ejemplos sencillos de Kodobase y te quedará claro.

¿Por qué no puede identificar "sus" pedidos por número de billete? Son únicos sin importar cuántos Asesores Expertos estén funcionando.

Por ejemplo, un EA abre una orden, recuerda la entrada, la cierra y la olvida.

 
mukata >> :

¿Por qué no puede identificar "sus" pedidos por el número de billete? Son únicos, no importa cuántos Asesores Expertos estén funcionando.

Por ejemplo, un EA abre una orden, recuerda la entrada y se olvida de ella, después la cierra.

Chubais cortará la electricidad y luego averiguará dónde están los demás y dónde están.