Ayuda a la codificación - página 157

 
mladen:
Christoff

De esta manera la variable Decimals debería estar bien

En cualquier caso, comprueba qué código de error estás obteniendo en caso de cierre (parcial) de la orden sin éxito

Mladen,

Gracias por la pista.

El problema es que no hay ningún mensaje de error. Cuando no funciona, parece que la función PartialTP ni siquiera ha sido llamada. Otras veces - normalmente en las primeras órdenes después de reiniciar el EA - funciona bien.

He pensado que tal vez una de las variables no vuelve al valor cero, o algo así, pero sigo sin encontrar el error.

 
chrisstoff:
Mladen,

Gracias por la sugerencia.

El problema es que no hay ningún mensaje de error. Cuando no funciona, parece que la función PartialTP ni siquiera ha sido llamada. Otras veces - normalmente en las primeras órdenes después de reiniciar el EA - funciona bien.

Pensé que tal vez una de las variables no vuelve al valor cero, o algo así, pero todavía no puedo encontrar el error.

chrisstoff

Lo siento, pero con un código parcial no puedo ayudar más

Lo que usted describe significa que hay una necesidad de depurar el código - y que sólo se puede hacer mediante la ejecución, mientras que el uso de algún tipo de puntos de control

 
mladen:
chrisstoff

Lo siento, pero con un código parcial no puedo ayudar más

Lo que describes significa que es necesario depurar el código - y eso sólo se puede hacer ejecutándolo mientras se utiliza algún tipo de puntos de control

Gracias, Mladen.

Es tranquilizador que no hayas visto problemas en el código.

Creo que todas las partes relevantes del código fueron publicadas, así que tengo que encontrar el error en otra parte.

 
mladen:
hock87

Por favor, lea el post anterior a su post para una solución de ese problema

El código completo para eso es el siguiente :

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

Malden,

Si quiero abrir tamaños de lote en un porcentaje del saldo de mi cuenta, ¿cómo codificarlo?

Ejemplo:

El saldo de mi cuenta es de 500$,

Quiero abrir un tamaño de lote con el 5%, a continuación, la cuenta de auto y abrir los lotes de $ 0,25, TP = 10 SL = 20.

¿Cómo codificarlo?

Gracias.

 
hock87:
Malden,

Si quiero abrir tamaños de lote en un porcentaje del saldo de mi cuenta, ¿cómo codificarlo?

Ejemplo:

El saldo de mi cuenta es de $500,

Quiero abrir un tamaño de lote con el 5%, a continuación, la cuenta de auto y abrir los lotes de $ 0,25, TP = 10 SL = 20.

¿Cómo codificarlo?

Gracias.

Usted puede utilizar una función como esta para que :

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss tiene que ser pasado a la función en pips/puntos ya (no en valores enteros)

 
mladen:
Usted puede utilizar una función como esta para que :
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss tiene que ser pasado a la función en pips/puntos ya (no en valores enteros)

Gracias, Mladen.

Pero el fracaso para componer el código para comprar código de orden.

Aparecen muchos errores y advertencias.

¿Cómo componerlo?

Gracias.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
Gracias, Mladen.

Pero no puedo componer el código para comprar el código de la orden.

Aparecen muchos errores y advertencias.

¿Cómo se compone?

Gracias.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

Pruebe como esto (lo he probado ahora y funciona) :

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
Archivos adjuntos:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

estimado mladen y mr. tools pls,

es posible crear un ea que de señales basadas en ciertas condiciones como las señales de 3 o 4 indicadores que cumplan con condiciones predefinidas.

Por ejemplo

quiero que el ea de una señal de compra hwen:

ema 8 cruza ema 21

qqe por encima de 0

non lag ma es verde

y la vela está por encima de la nube de ichimoku

el EA no debe abrir operaciones sino solo dar la señal cuando se cumplan las condiciones indicadas

 

Gracias, Mladen.

Lo he probado.

pero todavía abrir los lotes con $ 0.1

Quiero abrirtamaños de lote en un porcentaje de mi saldo de la cuenta.

EX: el balance de la cuenta tiene $500.

abrir un tamaño de lote con el 5%, a continuación, la cuenta de auto y abrir los lotes de $ 0,25, TP = 10 SL = 20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0.25

Entonces se auto abre $ 0,25 lotes y TP = 10 SL = 20.

¿Cómo crearlo?

Gracias.

 
hock87:
Gracias, Mladen.

Lo he probado.

pero sigue abriendo los lotes con $0.1

Quiero abrirtamaños de lote en un porcentaje de mi saldo de la cuenta.

Ej: el balance de la cuenta tiene $500.

abrir un tamaño de lote con el 5%, a continuación, la cuenta de auto y abrir los lotes de $ 0,25, TP = 10 SL = 20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0.25

Entonces se auto abre $ 0.25 lotes y TP = 10 SL = 20.

¿Cómo crearlo?

Gracias.

Como en el que se adjunta

Archivos adjuntos:
_test_2.mq4  2 kb