¿Cómo codificar? - página 267

 
christinaLi:
Me gustaría ayudar con esta función de la que hablas pero parece que no puedo simplemente entender tu lógica. Esto realmente no tiene nada que ver con otra lógica de la estrategia .

Simplemente me gustaría saber esto.

Si tienes 1 lote de compra a 1,4110 y 2 de venta a 1,4200. ¿A qué precio crees que tienes 6 pips de ganancia?

Hola Christina,

en mi gestión de posiciones nunca, el 1 lote de compra cierra con beneficio, antes de que se abran 2 lotes de venta.(vende nunca porque el 1er lote de compra cerró con beneficio, espera la siguiente señal)

volviendo a tu ejemplo:

pero hay una línea en aproximadamente 1.4175, donde 2 lotes de venta (ganancia arriba, mercado abajo) y 1 lote de compra (ganancia abajo, mercado abajo) son precio igual (breakeven 0), así que en 1.4169 6 pips de ganancia están listos - entonces yo cerraría todas las órdenes

IX

 
ixbone:
Hola Christina,

en mi gestión de posiciones nunca, el 1 lote de compra cierra con beneficio, antes de que se abran 2 lotes de venta.(vende nunca porque el 1er lote de compra cerró con beneficio, espera la siguiente señal)

volviendo a tu ejemplo:

pero hay una línea en aproximadamente 1.4175, donde 2 lotes de venta (ganancia arriba, mercado abajo) y 1 lote de compra (ganancia abajo, mercado abajo) son precio igual (breakeven 0), así que en 1.4169 6 pips de ganancia están listos - entonces yo cerraría todas las órdenes

IX

Porque mi ejemplo es 1.4110 y 1.4200. Este es mi cálculo:

En primer lugar, a 1,4170 (sin tener en cuenta los spreads) estamos en equilibrio. Ahora tenemos 2 lotes de venta con ganancia de 30 pips cada uno y 1 lote de compra con pérdida de 60 pips, por lo que estamos en equilibrio en términos de dólares.

Si exactamente con mi ejemplo, usted debería tener 6 pips de ganancia en general a 1.4164.

En 1.4164 (sin considerar los spreads) tenemos 2 lotes de venta con ganancia de 36 pips cada uno y 1 lote de compra con pérdida de 54 pips, así que ganamos 72 pips con las ventas y perdemos 54 pips con las compras. En general para el grupo de operaciones, usted tiene 3 lotes con una ganancia de 18 pips. Así que es más razonable considerar que ahora tiene 6 pips de ganancia.

Sin embargo las cosas se complican de nuevo debido a los spreads. Porque si la oferta es de 1.4164, la demanda puede ser de 1.4166, así que sus ventas sólo tienen 34 pips de ganancia cada una. En total para el grupo de operaciones, usted tiene 3 lotes con una ganancia de 14 pips. Así que ahora, de hecho, usted tiene 4,7 pips de ganancia.

Si llevo este ejemplo un paso más allá, si tenemos 2 compras y 3 ventas. Entonces a 1,4164 se alcanza el punto de equilibrio.

Si no tenemos en cuenta los spreads, entonces necesitamos 30 pips de ganancia total para tener 5 pips de ganancia en cada lote. Así que los 6 pips de ganancia estarían en el precio de 1,4134, ¿es esto correcto?

Probablemente el sistema no tendrá este tipo de situación, es el principio que quiero conseguir. ¿Está de acuerdo con el cálculo anterior?

 
christinaLi:
Porque mi ejemplo es 1,4110 y 1,4200. Este es mi cálculo:

En primer lugar, a 1,4170 (sin considerar los spreads) estamos en equilibrio. Ahora tenemos 2 lotes de venta con ganancia de 30 pips cada uno y 1 lote de compra con pérdida de 60 pips, así que estamos en equilibrio en términos de dólares.

Si exactamente con mi ejemplo, usted debería tener 6 pips de ganancia en general a 1.4164.

En 1.4164 (sin considerar los spreads) tenemos 2 lotes de venta con ganancia de 36 pips cada uno y 1 lote de compra con pérdida de 54 pips, así que ganamos 72 pips con las ventas y perdemos 54 pips con las compras. En general para el grupo de operaciones, usted tiene 3 lotes con una ganancia de 18 pips. Así que es más razonable considerar que ahora tiene 6 pips de ganancia.

Sin embargo las cosas se complican de nuevo debido a los spreads. Porque si la oferta es de 1.4164, la demanda puede ser de 1.4166, por lo que sus ventas sólo tienen 34 pips de ganancia cada una. En total para el grupo de operaciones, usted tiene 3 lotes con una ganancia de 14 pips. Así que ahora, de hecho, usted tiene 4,7 pips de ganancia.

Si llevo este ejemplo un paso más allá, si tenemos 2 compras y 3 ventas. Entonces a 1,4164 se llega al punto de equilibrio.

Si no tenemos en cuenta los spreads, entonces necesitamos 30 pips de ganancia total para tener 5 pips de ganancia en cada lote. Así que los 6 pips de ganancia serían al precio de 1,4134, ¿es esto correcto?

Su sistema probablemente no tendrá este tipo de situación, es el principio que quiero conseguir. ¿Está de acuerdo con el cálculo anterior?

Cristina,

estoy de acuerdo, ¡tienes 100% de razón con ambos cálculos!

 

Hola, Michael,

Estoy muy ocupado en los últimos días, ya he hecho esto, pero necesita más tiempo para armarlo. Lo publicaré aquí una vez que encuentre algo de tiempo para hacerlo en los próximos días. Chrisitna

 
 
christinaLi:
Hola, Michael, estoy muy ocupado en los últimos días, ya he hecho esto, pero necesita más tiempo para armarlo. Lo publicaré aquí una vez que encuentre algo de tiempo para hacerlo en los próximos días. Chrisitna

Hola Christina,

no hay problema, tómate tu tiempo, ¡siempre aprecio tus sugerencias!

Michael

 
 

necesito ayuda

¡Hola a todos !

Esta es mi idea:necesito 2 buffers indicadores en separate_window,1 es devupBuffer[];2 es devdwBuffer[]. Por ejemplo si tenemos cinco digitales 1,2,3,4,5 su promedio es3.Entonces los datos son mayores que la media de 3 4 y 5 devupBuffer={【(4-promedio)*(4-promedio)】+【(5-promedio)*(5-promedio)】}/Desviación estándar(1,2,3,4,5)*Desviación estándar(1,2,3,4,5).Los datos son menores que la media de 3 1 y 2 devdwBuffer={【(1-promedio)*(1-promedio)】+【(2-promedio)*(2-promedio)】}/Desviación estándar(1,2,3,4,5)*Desviación estándar(1,2,3,4,5).

 

¿Por qué este EA no puede comprar o vender?

hola, soy muy nuevo en esto de la programación con Meta... por favor ayuda...

Estoy trabajando con un sistema en Stochastics con dos niveles, 25 y 75...

Un comercio sólo ...

si el PRINCIPAL y la SEÑAL están ambos por debajo de 25 y se cruzan, COMPRAR.

si la PRINCIPAL y la SEÑAL se cruzan por encima de 25, CERRAR COMPRA.

si la MAIN y la SIGNAL están ambas por encima de 75 y se cruzan, VENDER.

si la PRINCIPAL y la SEÑAL se cruzan (no es necesario que estén por debajo de 75), CIERRE VENDER.

eso es todo...

//+------------------------------------------------------------------+

//| StochCross.mq4 |

//| RobertEli |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "RobertEli"

#property link "http://www.metaquotes.net"

//--- input parameters

extern double TakeProfit=250.0;

extern double Lots=0.01;

extern double TrailingStop=35.0;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Confirm (double line1, double line2, int level_buy, int level_sell)

{

static int confirmation = 0;

if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy

if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell

if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy

if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell

//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY

//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL

//else return (0);

return (confirmation);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 > line2) current_direction = 1; //UP

if (line1 < line2) current_direction = 2; //DOWN

if (current_direction != last_direction) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

int cnt, ticket;

double Stoch_main, Stoch_sign;

if (Bars < 100)

{

Print("BARS less than 100");

return (0);

}

if (TakeProfit < 10)

{

Print("TakeProfit less than 10");

return (0);

}

/*

Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);

*/

Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);

/*

Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);

Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

*/

int isCrossed = Crossed(Stoch_main,Stoch_sign);

int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);

int total = OrdersTotal();

if (total == 0)

{

if ((isCrossed == 1) && (isConfirmed == 1))

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());

else Print ("Error Opening BUY Order: ", GetLastError());

return (0);

}

}

if ((isCrossed == 2) && (isConfirmed == 2))

{

ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());

else Print ("Error Opening SELL Order: ", GetLastError());

return (0);

}

}

return (0);

}

else

{

for (cnt = total; cnt < 0; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())

{

if (OrderType() == OP_BUY) //the trade was a Buy position

{ //check for closing)

if ((isCrossed == 2) && (isConfirmed == 3))

//if (isCrossed == 2)

{ //change of direction

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position

return (0);

}

}

else // the trade was a SELL position

{

//should it be closed?

//if ((isCrossed == 1) && (isConfirmed == 4))

if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed

return (0);

}

}

}

}

}

//----

return(0);

}

//+------------------------------------------------------------------+
 

EA no puede hacer lo que se supone que tiene que hacer, ¡AYUDA!

hola, soy realmente nuevo en esto de la programación en mq4 pero he leído los tutoriales de codersgurus (¡muchas gracias!) así que creo que puedo entender algo... Sin embargo, he hecho este EA que se basa en MOVING AVERAGES... ¡PERO TERRIBLEMENTE NO FUNCIONA COMO DEBERÍA!

las reglas aquí son muy simples...

1. MA_04_1H (significa período de media móvil 4 para el marco de tiempo de 1 hora) cruza por encima de MA_14_1H,

Confirmarlo con MA_04_4H estar por encima de MA_14_4H (la tendencia es alcista) ------> ¡Comprar!

2. MA_04_1H cruza por debajo de MA_14_1H,

confirme con MA_04_4H que está por debajo de MA_14_4H (la tendencia es a la baja)------> ¡VENDER!

3. cuando la MA_04_1H se cruce con la MA_14_1H, cierre esa orden (puede iniciar una nueva orden dadas las reglas #1 y #2)

4. una sola operación... (si es de COMPRA, cerrar esa COMPRA. después de eso, VENDER si es necesario)

He hecho 2 funciones: Cruzada, y Confirmada.

Cruzado es para el marco de tiempo de 1 hora.

Confirmado es para el marco de tiempo de 4 horas.

¿alguien puede ayudarme a depurar esto?

//+------------------------------------------------------------------+

//| MACross1TradeOnly.mq4 |

//| RobertEli |

//| |

//+------------------------------------------------------------------+

// this will work on MA_04, and MA__14

#property copyright "RobertEli"

#property link ""

extern double Lots = 0.01;

extern int stoploss_value = 10; // $10

bool up = 0, //UP direction, when MA_04 is above MA_14

down = 0, //DOWN direction, when MA_14 is above MA_04

change = 0, //when the MA_04 and MA_14 cross

firsttime = true; //first time for direction_prev

int direction_curr = 0; // 1 if UP, 2 if down...

int direction_prev = 0; // this will hold previous value of direction_curr

int direction_trend= 0; // trend direction for confirmation

int cross = 0; // if direction_curr and direction_prev changes course

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 - line2 > 0)//(line1 > line2)

{

current_direction = 1; //UP

if (firsttime == true)

{

current_direction = 0;

last_direction = 1;

firsttime = false;

return (0);

}

}

if (line1 - line2 < 0)//(line1 < line2)

{

current_direction = 2; //DOWN

if (firsttime == true)

{

current_direction = 0;

last_direction = 2;

firsttime = false;

return (0);

}

}

if ((current_direction != last_direction) && (firsttime == false)) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (last_direction);

}

}

int Confirmed (double line1, double line2)

{

int trend;

if (line1 > line2) trend = 1; // trend direction is UP

if (line1 < line2) trend = 2; // trend direction is DOWN

return (trend);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

int cnt,ticket, total;

//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period

if (Bars < 100) { Print ("Bars less than 100."); return (0); }

double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);

double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);

//double stoploss = stoploss_value / (Lots * 100000);

//new code from v_1

cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN

direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN

total = OrdersTotal();

if (total == 0)

{

if((cross == 1) && (direction_trend == 1))

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss());

}

else Print("Error opening BUY order : ",GetLastError());

cross = 0;

return(0);

}

if((cross == 2) && (direction_trend == 2))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

cross = 0;

return(0);

}

}

if (total == 1)

{

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

// bool no_buy_sell = ((OrderTakeProfit() 0));

if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position

//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);

return (0);

}

else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position

//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);

return (0);

}

}

}

else return (0);

//----

return(0);

}

//+------------------------------------------------------------------+

por favor, ignorar que el post anterior de la mía ... me desechó esa idea ... estoy trabajando en esto ahora ... así que por favor ayuda ...