[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 97

 
MaxZ:

Debo estar perdiendo algo:



NewOrder ha sido tratado gracias, ahora el paso funciona
 
SeALALex:

He implementado NewOrder, gracias, ahora la orden funciona.

Ten cuidado con este código. Fue escrito sobre la marcha y no ha sido probado. :)))

Y sólo escribí una forma de resolver tu problema.


Por cierto, antes diste el siguiente código:

Болк открытия на бай
if(Buy==true) 
  {Buy=false;

   ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

¿Y si hay una recotización, por ejemplo? Entonces la orden de COMPRA no se abrirá, mientras que la señal podría ser correcta. Y en un par de horas verás que el precio se ha movido mucho hacia arriba, pero la orden de COMPRA no se ha abierto por la recotización...

 
MaxZ:

Ten cuidado con este código. Fue escrito sobre la marcha y no ha sido probado. :)))

Y sólo escribí una forma de resolver tu problema.


Por cierto, antes citó el siguiente código:

¿Y si hay una recotización, por ejemplo? Entonces la orden de COMPRA no se abrirá, mientras que la señal podría ser correcta. Y verás que el precio se ha movido mucho hacia arriba en un par de horas, pero la orden de COMPRA no se ha abierto debido a la recotización...


¿Y cómo se asegura contra ello?

 
SeALALex:


¿y cómo se protege contra ella?

La forma más básica es reescribir el código de forma diferente:

Болк открытия на бай
if(Buy==true) 
  {ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Buy=false;
       Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Mientras la orden no se abra, la señal para abrir una posición larga de compra se mantendrá en el estado Verdadero.

 
MaxZ:

La forma más elemental es reescribir el código de forma diferente:

Hasta que la orden se abra, la señal para abrir una posición larga de compra se mantendrá en un estado Verdadero.


¡Muchas gracias! ¡Y muchas gracias a Roman!

Necesito aumentar el lote en una serie de órdenes de compra abiertas sin margen (porque el margen a veces nos afecta de tal manera que reduce el lote, y no lo necesito), necesito un aumento estricto de un determinado tamaño en una serie de órdenes. Es decir, si hay una tendencia según un criterio una señal de compra, entonces según el segundo criterio aparece una señal de compra adicional y se abre una orden; después del primer criterio sigue habiendo una señal de compra y según el segundo, después de una pequeña corrección aparece una señal de compra adicional y se abre otra orden, pero con una orden más grande (el tamaño se establece en los parámetros iniciales); después de cerrar todas las órdenes de compra aparece una señal de venta y entonces todo vuelve a empezar con el tamaño inicial del lote.

Por favor, ¿qué trozo de código hay que mostrar?

 
SeALALex:


¡Muchas gracias! ¡Y muchas gracias a Roman!

Pero todavía no puedo conseguir que aumente un lote en un determinado paso, necesito aumentar un lote en una serie de órdenes de compra abiertas sin margen (porque el margen a veces disminuye mucho, y no lo necesito), necesito un aumento estricto de un determinado tamaño en una serie de órdenes.

Si no se utiliza el margen en los cálculos de los lotes y se opera sólo con parámetros constantes especificados, por ejemplo, en las variables externas, los lotes aumentarán correspondientemente sólo con valores constantes. El principio por el que se puede escribir el código lo he dado más arriba.

SeALALex:


Es decir, si hay una tendencia según un criterio una señal de compra, entonces según el segundo criterio aparece una señal de compra adicional - se abre una orden, entonces según el primer criterio la señal de compra todavía permanece y según el segundo, después de una pequeña corrección la señal de compra aparece de nuevo y se abre una orden más, pero con un tamaño más grande (el tamaño se establece en los parámetros iniciales) y después de que todas las órdenes de compra se cierran aparece una señal de venta y entonces todo comienza de nuevo con el tamaño inicial del lote.

Por favor, ¿qué parte del código necesita mostrar?

Tiene las variables Lots, LotsInitial y LotsStep. Cuando la tendencia cambia, se pone a cero Lots y se asigna un valor inicial a LotsInitial. Si la tendencia continúa y ya se ha enviado una señal para abrir una nueva orden, se aumenta la variable Lots con el paso LotsStep y se abre una orden.

Parece que entiendes toda la lógica, pero de alguna manera no puedes convertirla en afirmaciones de tipo "si". No sé por qué.

Tal vez esto pueda ayudar:

extern LotsInitial = 0.5;
extern LotsStep    = 0.1;
       Lots;

int start()
{
   ...

   if ((Тренд окончен) && (Все ордера закрыты) && (Пришёл сигнал о возможном начале нового тренда))
      Lots = LotsInitial;
 
   if ((Тренд подтверждён) && (Коррекция) && (Пришёл ещё сигнал открыться по тренду))
      Lots += LotsStep;
  
   ...
}
 
MaxZ:

Si no va a utilizar el margen en los cálculos de los lotes y opera sólo con parámetros constantes, establecidos por ejemplo en variables externas, los lotes se incrementarán en consecuencia sólo con valores constantes. El principio según el cual se puede escribir el código lo he dado más arriba.

Tienes las variables Lots y LotsStep. Cuando la tendencia cambia, se pone a cero Lots y se le asigna un valor inicial. Si la tendencia sigue siendo tendencial y ya hay una señal abierta, se aumenta la variable Lots en incrementos de LotsStep y se abre una nueva orden.

Se ve que entiendes toda la lógica, pero por alguna razón no puedes convertirla en declaraciones if... No sé por qué.


¿Puedo poner parte del código como un archivo responsable de la apertura como un archivo, y se ve... Lo hice, pero parece que hay algo mal en el código que publiqué, se abre un paso más, pero no del todo.
Archivos adjuntos:
 
SeALALex:

¿Puedo pegar una parte del código responsable de la apertura como archivo y lo miras... pegado pero parece que hay algo mal en el código tal y como lo publiqué se abre un paso más pero por muy poco.

Primero habrías arreglado todos los errores. ¿Por qué añadir algo a su EA si no funciona sin él? Aunque, este código no parece un EA completamente funcional. Debes haber recortado partes y ahora quieres que corrija los errores. :)))

Por ejemplo, init() no está cerrada... Y la variable oscura: LastOrder...

Por favor, arregle estos errores.

 
MaxZ:

Será mejor que arregle todos los errores primero. ¿Por qué añadir algo al Asesor Experto si no va a funcionar sin él? El código no parece tener la funcionalidad completa del Asesor Experto. Debes haber recortado partes y ahora quieres que corrija los errores. :)))

Por ejemplo, init() no está cerrada... Y la variable oscura: LastOrder...

Por favor, arregle los errores.


Sí lo monté como un juego de construcción parece que funciona, ahora tratar de llevar más o menos en una forma normal y se establecerá
 
splxgf:


No se trata de ND. punto es el tamaño del punto, multiplícalo por cero cinco sería por ejemplo 0.00005, no veo el sentido de comparar este número con OrderClosePrice()-OrderTakeProfit(). El TP no garantiza exactamente el mismo precio de cierre. Además, las condiciones de control serán diferentes para Bais y Selves.

Este diseño es más fiable.



Gracias!!! Leer. Además habrá diferentes condiciones de prueba para los bai y los selfies ¡¡¡Impresionante verdad!!!