aventuras de un novato - página 11

 
niko:
gracias CB, debería haberme dado cuenta de eso, así que el error era correcto al final (130).

¿Funciona entonces?


CB

 

Hola CB, Se está ejecutando las operaciones, pero no he hecho el detalle de ir a través de los oficios para ver si la lógica se sigue correctamente (parece ser a primera vista). Así que este es el momento de decir un enorme 'GRACIAS!!!!' :-)

Todavía hay un camino por recorrer antes de que la estrategia se ejecuta de manera rentable, ya que el código es sólo una forma de automatizar los oficios, tengo que hacer un poco de trabajo en mi extremo para perfeccionar la estrategia en sí. Parece que todo este esfuerzo valió la pena, pero todavía estoy súper desconcertado con la codificación. Voy a empezar a hacer pequeños códigos por mi cuenta para mostrar los comentarios en mis gráficos, y jugar con ellos, para ayudarme a aprender las funciones y otras cosas que utilizaste. Aprecio mucho tu ayuda con esta CB, y tu paciencia mientras sigo preguntando lo mismo y cometiendo los mismos errores una y otra vez. ¡Gracias!

 
CB, esto me recordó algo. ¿Cómo podría hacer un amednment a su código para permitir 2 o máximo 3 oficios para ser abierto en la misma dirección (esto es como una versión 2 de su código). Usamos el OP_BUY/OP_SELL para el código antiguo así que tendremos que cambiar algunas cosas. Si me dices en forma de 'esqueleto' lo que hay que hacer (por ejemplo: construir una función para hacer esto...) entonces puedo intentar codificarlo, y llevártelo de vuelta para que lo revises. Esta forma es mejor que si lo codificas tú mismo, ya que puedo seguir tu lógica y aprender partes de la codificación. ¿Qué te parece? (Puedo ver que tenemos una variable externa en la que establecemos cuántas operaciones se nos permiten en la misma dirección, entonces hacemos una función para calcular las compras, otra para calcular las ventas, entonces llamamos a esas dos funciones en start() y comprobamos la variable externa allí también... ¿algo así?
 

Eso será fácil.

Establezca un parámetro que sea el número máximo de órdenes abiertas. Extiéndalo si necesita cambiarlo con frecuencia.

Entonces implemente cambiando sólo la función fnOrderDuplicate() - no debería tener que cambiar la función start(). Eso ayudará a mantener la arquitectura existente de la aplicación.


CB

 
hombre, ojalá algún día pueda decir "¡eso será fácil!". de acuerdo, lo haré, ¡y a ver qué pasa! ¡gracias!
 

Hola CB, me he pasado como 2 horas intentando hacer lo que pedías en el post anterior, he mirado otros códigos, documentación, y no he avanzado (no sé qué hacer). Tío, me sigo atascando así, es tan molesto, incluso con las cosas más simples! debe haber una manera de aprender más fácil que como voy en este momento, ya que siento que no estoy teniendo ningún progreso en el aprendizaje, ustedes están amablemente escribiendo todo el código para mí


bool fnOrderDuplicate()
 {
  iDuplicateOrders = 0;                                  //setting orderdup to zero
  iOrders = OrdersTotal()-1;                             //iOrders returns market orders count - 1. So if zero orders, we get -1
  for (int i= iOrders; i>=0; i--)                         // the loop to cycle through total orders
   {
    OrderSelect( i, SELECT_BY_POS, MODE_TRADES);            //select order for function
    if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))      //if order is NOT op-buy and is NOT op-sell, sCurrentOrderType = other (ie no order)
     sCurrentOrderType = "OTHER";
    if (OrderType() == OP_BUY)                           //if order=buy, sCurrent OrderType = buy
     sCurrentOrderType = "BUY";                          //***7Jul09 ';' was missing at end of line
    if (OrderType() == OP_SELL)                          //***7Jul09: the end ')' was missing.
     sCurrentOrderType = "SELL";                         //if orderfound = sell, sCurrentOrder= sell
    if ((OrderSymbol() == Symbol()) && ( sCurrentOrderType == sSignal))  //if ordersymbolfortheorder= symbolforchart && ScurrentOrder = sSignal(fn_entryrules) 
        iDuplicateOrders++;                              //iDuplicateOrders is added 1
   }
  if ( iDuplicateOrders == 0)                             //if iduporders = 0 then fnOrderDuplicate = false, otherwise it's true.
   return(false);
  return(true);
 }
 
Hola CB, ¿alguna ayuda en el punto anterior, cómo arreglar el código para hacer un comercio múltiple en 1 dirección?
 
niko:
Hey CB, ¿alguna ayuda en el punto anterior, cómo arreglar el código para hacer una operación múltiple en 1 dirección?

Sólo hay que cambiar: if ( iDuplicateOrders == 0) por: if ( iDuplicateOrders<= iMaxDuplicateOrders)

CB

 

Hola CB, gracias por esto. Con esta opción no puedo regular cuántas órdenes abiertas se permiten en 1 dirección (digamos que hago externamente iMaxDuplicateOrders = 4;) el ea ejecutará 4 cortos, y no distribuir el parámetro de manera uniforme (por ejemplo: 2 cortos máximo, 2 largos máximo). Debería intentar hacer un duplicado de bool fnOrderDuplicate (por ejemplo: bool fnOrderDuplicateBuys, y bool fnOrderDuplicateSells) y luego referirse a cada uno respectivamente en bool fnShouldWeTrade. En mi opinión esto podría funcionar, ¿qué opinas?

 
niko:

Hola CB, gracias por esto. Con esta opción no puedo regular cuántas órdenes abiertas se permiten en 1 dirección (digamos que hago externamente iMaxDuplicateOrders = 4;) el ea ejecutará 4 cortos, y no distribuir el parámetro de manera uniforme (por ejemplo: 2 cortos máximo, 2 largos máximo). Debería intentar hacer un duplicado de bool fnOrderDuplicate (por ejemplo: bool fnOrderDuplicateBuys, y bool fnOrderDuplicateSells) y luego referirse a cada uno respectivamente en bool fnShouldWeTrade. En mi opinión esto podría funcionar, ¿qué opinas?


Establecer iMaxDuplicateOrders = 4 significará que el máximo será de 4 órdenes en cada dirección, ya que comprobamos la dirección antes de incrementar el contador.


Hay que dar crédito a quien lo merece. En este caso se debe hacer lo contrario. Mis disculpas - Ya me decepcionó que no hicieras la enmienda tú mismo. Todo lo que había que hacer era cambiar el límite de una sola orden a una variable.


Está claro por las anotaciones que simplemente estás recreando el código en prosa sin entender realmente la lógica.


CB