Estoy aprendiendo a escribir un asesor... - página 4

 

Si su Asesor Experto es multidivisa, debe hacerlo.

Más aún porque los valores de Oferta y Punto probablemente ya están establecidos (declarados) a través de MarketInfo().

Una vez que empecé una rama en el Asesor Experto multidivisa. Eche un vistazo y se aclararán algunas dudas....

Pregunta sobre el asesor experto multidivisa.

 

Y aquí específicamente sobre la modificación

Pregunta sobre el asesor multidivisa

 

Hice esta variante... Inmediatamente después de abrir, llamo a ModifyPos()

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);
    }  
  }

Parada - 20.

TakeProfit - 100

Mensaje en el registro - Error de OrderModify 130

 

Pruebe una posición de compra para las posiciones de toma

Ask+ TakeProfit*Point

Piénsalo. ¿Por qué para una posición de compra el take profit está de repente por debajo del precio actual?

No es de extrañar que se genere un error

Y lo mismo para la posición de venta...

Si no necesita cambiar la Toma de Beneficios, entonces es mejor hacer esto:

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
Del mismo modo, para la parte vendedora
 
rid >> :

Piénsalo. ¿Por qué su toma de beneficios en una posición de compra está de repente por debajo del precio actual?

¡No es de extrañar que se genere un error!

Rid, ¡muchas gracias!

No estaba prestando atención)... funcionó y hasta funcionó)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

El último error que aparece en el registro durante las pruebas es el error 138 de OrderSend.

Este error se produce sin interrupción cuando no hay operaciones, es decir, por cada tick se produce este error.

En cuanto se activa una orden, el error desaparece... la orden se cierra y el error vuelve a aparecer...

Parece que está tratando de enviar una orden sin ninguna señal... Pero no entiendo por qué, ya que hay una condición(if) para vender y para comprar

 
ALex2008 писал(а) >>

El último error que aparece en el registro durante las pruebas es el error 138 de OrderSend.

Este error se produce sin interrupción cuando no hay operaciones, es decir, por cada tick se produce este error.

En cuanto se activa una orden, el error desaparece... la orden se cierra y el error vuelve a aparecer...

Parece que está tratando de enviar una orden sin ninguna señal... Pero no entiendo por qué, ya que tenemos condiciones(si) para vender y comprar.

no leas con atención lee https://book.mql4.com/ru/content está todo ahí

 

Leer y comprender son cosas diferentes... Quiero entender en la práctica)

Hay una condición para entrar, después de estas condiciones se pasa el control a la función que abre la orden...

No puedo entender cómo OrderSend intenta trabajar saltándose las condiciones... y lógicamente genera un error... porque no hay condiciones de entrada

 
bool RefreshRates( )

Refresca los datos en variables predefinidas y matrices de series temporales. Esta función se utiliza cuando un Asesor Experto o un script ha estado realizando cálculos durante mucho tiempo y necesita datos actualizados. Devuelve TRUE si los datos están actualizados, en caso contrario FALSE. Los datos no pueden actualizarse sólo porque corresponden al estado actual del terminal cliente. Los Asesores Expertos y los scripts trabajan con su propia copia de datos históricos. La copia de los datos del símbolo actual se crea en el lanzamiento inicial del Asesor Experto o del script. En cada siguiente lanzamiento del Asesor Experto (recuerde que el script se ejecuta una vez y no depende de los ticks entrantes), se actualiza la copia creada inicialmente. Durante el tiempo en que se ejecuta el Asesor Experto o el script, pueden aparecer uno o más ticks nuevos, por lo que los datos pueden quedar desactualizados.

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

Intente insertar esta función antes de ejecutar OrderSend

Véase también: Órdenes de apertura y fijación 2008-05. :

Apertura y fijación de órdenes2008-05-05 14:26:13

"Para que el programa funcione de forma estable, con un número mínimo de órdenes comerciales rechazadas, antes de ejecutar la función OrderSend(), los parámetros del entorno de información utilizados por el programa deben actualizarse mediante las funciones MarketInfo() y RefreshRates()."

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

no ayuda...