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

 

Por favor, ayúdame a cambiar la gestión del dinero en mi código de EA.

Hay 2 condiciones en mi EA

1 - lote mínimo + trabajar con lote fijo o 2 - lote creciente en % de los fondos disponibles

Quiero que el lote aumente en 0,01 lote después de la primera transacción fallida, o en 0,02 lote después de la segunda transacción fallida,

y después de la tercera pérdida el lote vuelve a ser mínimo.

Necesito funciones que pueda pegar en mi EA (preferiblemente lo más simple posible)

He intentado poner el código a través de include (lot_lib) genera muchos errores y no funciona.

Gracias de antemano por su tiempo.


 

¡Hola!

Estoy escribiendo un código, la cuestión es poner el nivel de stop loss en el punto más bajo/más alto de las últimas tres barras. Esto es lo que salió:

double FindSL(int mode)
   {
    double sl; //уровень стоплосса
    double buf; //буфер
    double lvl1, lvl2, lvl3; //выборка из 3-х последних баров
    if (mode == 1) //покупали
      {
       lvl1 = iLow(symb, 0, 0);
       lvl2 = iLow(symb, 0, 1);
       lvl2 = iLow(symb, 0, 2);
       buf = MathMin(lvl1, lvl2); //ищем низ
       sl = MathMin(buf, lvl3);
      }
    else if (mode == 2) //продавали
      {
       lvl1 = iHigh(symb, 0, 0);
       lvl2 = iHigh(symb, 0, 1);
       lvl3 = iHigh(symb, 0, 2);
       buf = MathMax(lvl1, lvl2); //ищем вершину
       sl = MathMax(buf, lvl3);
      }
    return (sl);
   }

Los pedidos se abren con el siguiente código:

int OpenOrder(int sell_or_buy)                                  //Открытие ордеров
   {
    GetLot();

     if(sell_or_buy==2)                                          //покупка
       {
        StopLoss = FindSL(1);
        OrderSend(symb, OP_BUYSTOP, Lots, iHigh(symb, 0, 1), 0, StopLoss, 
        iHigh(symb, 0, 1)+TakeProfit*Point, "Ichimoku Simple Adviser Trade", 1001, TimeCurrent()+ExpirationTime, Green);    
        return (1);
       }
     else if (sell_or_buy==1)                                    //продажа
       {
        StopLoss = FindSL(2);
        OrderSend(symb, OP_SELLSTOP, Lots, iLow(symb, 0, 1), 0, StopLoss, 
        iLow(symb, 0, 1)-TakeProfit*Point, "Ichimoku Simple Adviser Trade", 1001, TimeCurrent()+ExpirationTime, Red);
        return (1);
       }
     else {return (0);}
   } 

StopLoss es una variable global.

En las pruebas, llega un momento en que el dinero se acaba, de golpe, en una sola operación. Los lotes son pequeños, por lo que el único problema es que el stoploss no se establece por alguna razón (igual a 0)

No puedo averiguar cuál es el error.

Mira el código por favor, ¿dónde podría cometer un error?

 
gogent:

¡Hola!

Estoy escribiendo un código, la cuestión es poner el nivel de stop loss en el punto más bajo/más alto de las últimas tres barras. Esto es lo que salió:

Los pedidos se abren con el siguiente código:

StopLoss es una variable global.

En las pruebas, llega un momento en que el dinero se acaba, de golpe, en una sola operación. Los lotes son pequeños, por lo que el único problema es que el stoploss no se establece por alguna razón (igual a 0)

No puedo averiguar cuál es el error.

Mira el código por favor, ¿dónde podría cometer un error?

Elstop loss es siempre 0 después de las compras.

Razón: la variable lvl3 no está definida (error mecánico)

 

Hola.

Estoy lidiando con la propagación. El diferencial siempre está en mi contra. Entonces, ¿debo añadirlo a un stop loss y restarlo a un take profit? Por lo tanto, si quiero obtener un beneficio neto de 50 pips (digamos, 3 pips de spread en un par de divisas), significa que tengo que establecer un take profit de 53 pips en mi orden. Si tengo una pérdida neta de 50 pips, entonces se debe dar un stop loss de 47 pips. ¿Lo he hecho bien?

Gracias de antemano.

 
01123456789:

Hola.

Estoy lidiando con la propagación. El diferencial siempre está en mi contra. Entonces, ¿debo añadirlo a un stop loss y restarlo a un take profit? Por lo tanto, si quiero obtener un beneficio neto de 50 pips (digamos, 3 pips de spread en un par de divisas), significa que tengo que establecer un take profit de 53 pips en mi orden. Si tengo una pérdida neta de 50 pips, entonces se debe dar un stop loss de 47 pips. ¿Lo he hecho bien?

Gracias de antemano.


¡Hola!

Si nos referimos a sus planes y expectativas, así es.

Si hablamos formalmente, no me queda claro qué significa "especificar en el orden... " a la orden..."

 

Hola, ayúdame con una función personalizada.

Entiendo: si la condición es verdadera, devuelve para isitpik- (verdadero). La condición se calcula a partir del búfer 0, donde se encuentra el cálculo de AO. ¿O sólo la última barra i se encuentra en el buffer y al ocurrir las condiciones para estos criterios entonces (true) se pasa a isitpik()? Y por qué asignar el tipo int a la variable (i) si se hace por la condición anterior.


bool isitpik( int i )
   {
   if(ExtBuffer0[i]>0 && ExtBuffer0[i]>ExtBuffer0[i+1] && ExtBuffer0[i]>ExtBuffer0[i-1])return(true);
   if(ExtBuffer0[i]<0 && ExtBuffer0[i]<ExtBuffer0[i+1] && ExtBuffer0[i]<ExtBuffer0[i-1])return(true);
   }
 
tara:


¡Hola!

Si se trata de sus planes y expectativas, está bien.

Si somos formales, no me queda claro qué significa "Take Profit =53 pips" en la orden..."

Cuando dije: "Me refiero a una orden pendiente (por ejemplo, Buy Stop) con dos columnas para Stop Loss y Take Profit. Es decir, si quiero obtener un beneficio de 50 pips, debería especificar 53 puntos de take profit en la orden pendiente, en lugar de 50 porque 3 puntos afectarán al spread. ¿Verdad?
 
01123456789:
Al decir: "Me refiero a una orden pendiente (por ejemplo, Buy Stop) con dos columnas para Stop Loss y Take Profit. Es decir, si quiero obtener un beneficio de 50 pips, debería especificar 53 puntos de take profit en la orden pendiente, en lugar de 50 porque 3 puntos afectarán al spread. ¿Verdad?

En las órdenes, el TP y el SL deben especificarse en precios, no en puntos.
 
01123456789:
Al decir: "Me refiero a una orden pendiente (por ejemplo, Buy Stop) con dos columnas para Stop Loss y Take Profit. Es decir, si quiero obtener un beneficio de 50 pips, debería especificar 53 puntos de take profit en la orden pendiente, en lugar de 50 porque 3 puntos se llevarán el spread. ¿Verdad?
Todas las empresas de corretaje tienen esto en su contrato. Las órdenes de compra se cierran a lo largo de la línea de demanda y las de venta a lo largo de la línea de oferta. Todo lo que entiendas correctamente. Dependiendo del spread, lo añadirás a tu beneficio. Si quiere obtener 50 pips, obtendrá +3 (dependiendo del spread del par de divisas). No olvides que todos los gráficos están dibujados por Bid.
 
deyron:
Todas las casas de bolsa tienen esto en el contrato. Las órdenes de compra se cierran en la línea de compra y las de venta en la línea de venta.
¿Es así? Me parece que se equivoca. Las órdenes de compra se abren a precios de compra y se cierran a precios de venta. Las órdenes de venta se abren por líneas de oferta y se cierran por líneas de demanda. Es decir, si compramos (precio Ask), cerramos la operación vendiendo (precio Bid).
Razón de la queja: