Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 56
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Todavía lo estoy perfeccionando:
si la condición es verdadera
orden abierta 1
si el precio se ha movido donde debería o no
orden abierta 2
LastLot= orden 2 (o número mayor)
LastPrice= order2 (o un número mayor)
Si el precio se ha movido o no donde debería...
LastLot= orden 3 (o número mayor)
LastPrice= orden 3 (o número mayor)
El problema es que la última orden (o no) siempre estará entre un StopLoss y un TakeOut, lo que significa que no se restablecerá cuando las otras se cierren porque la propia orden seguirá ahí. ¿Cómo lo vinculamos a los demás si no conocemos el número de pedidos?
El mecanismo de ligar el último primero o penúltimo a los demás ha demostrado ser ineficaz ya que su número cambia junto con los números.
El resultado debería ser algo así como "si alguna orden de la serie dada ha cerrado, cierra todas las demás".
Comprobación de la serie - la primera orden de la dirección actual (otra orden no se abrirá) - aquí debería utilizarse un identificador adicional o algún otro método de vinculación. La clave - la primera orden se abre según las condiciones, el resto de las órdenes son auxiliares.
¿Alguna idea?
Todavía lo estoy perfeccionando:
si la condición es verdadera
orden abierta 1
si el precio se ha movido donde debería o no
orden abierta 2
LastLot= orden 2 (o número mayor)
LastPrice= order2 (o un número mayor)
Si el precio se ha movido o no donde debería...
LastLot= orden 3 (o número mayor)
LastPrice= orden 3 (o número mayor)
El problema es que la última orden (o no) siempre estará entre un StopLoss y un TakeOut, lo que significa que no se restablecerá cuando las otras se cierren porque la propia orden seguirá ahí. ¿Cómo lo vinculamos a los demás si no conocemos el número de pedidos?
El mecanismo de ligar el último primero o penúltimo a los demás ha demostrado ser ineficaz ya que su número cambia junto con los números.
El resultado debería ser algo así como "si alguna orden de la serie dada ha cerrado, cierra todas las demás".
Comprobación de la serie - la primera orden de la dirección actual (otra orden no se abrirá) - aquí debería utilizarse un identificador adicional o algún otro método de vinculación. La clave - la primera orden se abre según las condiciones, el resto de las órdenes son auxiliares.
¿Alguna idea?
No está claro. Intenta expresar tus pensamientos con mayor claridad.
Esto es lo siguiente:"Si el precio va por el camino correcto o no, debemos abrir la orden 2" - ¿cómo debemos entender quedebemos abrir la orden 2 en cualquier caso?
Y cada vez tendremos más "o si no".
Y si no queremos tener preguntas como"Cómo conectarlo con el resto de órdenes cuando se desconoce el importe del precio", deberíamos averiguar primero el importe.
Es confuso, incomprensible. Intenta que tus pensamientos sean más claros.
Este"si el precio se movió en la dirección correcta o no - para abrir la orden 2" - ¿cómo debemos entender que en cualquier caso"para abrir la orden2"?
Y cada vez tendremos más "o...
Y si no queremos entrar en cuestiones como"cómo relacionarlo con las órdenes de descanso si no sabemos el importe", primero deberíamos averiguar el importe.
Bien, con números
EURUSD=1,10000
un comando para abrir una orden de compra según el TP (ya escrito)
si EURUSD=1.10200 damos una orden de compra (ya escrita)
si EURUSD=1.09800 a "comprar" (ya está escrito)
y así sucesivamente con un paso de 200
si se cierra alguna de las órdenes (se fijan stops y tomas de posesión, pero no en todas ellas)
Cerrar toda la red
buscando una forma de identificar la redBien, con números
EURUSD=1,10000
comando para abrir una orden de compra según la orden actual (ya escrita)
si EURUSD=1.10200 para añadir a la orden de compra (ya escrita)
si EURUSD=1.09800 a "comprar" (ya está escrito)
y así sucesivamente con un paso de 200
si alguna de las órdenes se cierra (los stops y las tomas de posesión ya están fijados)
cerrar toda la red
buscando una forma de identificar la redSe pueden añadir comentarios con el número de pedido. Y si toda la serie de pedidos de un tipo - entonces deberían simplemente volver a calcularlos y fijar la cantidad.
Estaba pensando en los comentarios, pero a juzgar por los comentarios el chef piensa que no son comestibles y los borra o los cambia por los suyos
Y en cuanto al recuento, ¿tengo que contar y registrar el número al añadir otro?
y sobre el recuento, ¿tengo que contar y registrar la cantidad cuando añada otro?
Sí. Y si el número ha disminuido desde la última vez, cierra todas las que quedan.
También puede controlar las órdenes cerradas en el historial. Y cerrar la serie cuando aparezca un nuevo pedido que cumpla con las características especificadas.
También puede no establecer el TP/SL en la orden, sino calcular el TP/SL total en el Asesor Experto para toda la serie. Utilízalos para cerrar la serie. Las ventajas - la empresa de corretaje no ve los niveles de punto de ruptura, y el problema de encontrar la serie sigue siendo si un TP o un SL ha disparado en una orden.double volume(string symbol,double risk,double sl)
{
double lot=0.0;
double procent=0.0;
double balans=0.0;
double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);
procent=(balans/100.0)*risk;
switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
{
case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
}
return(NormalizeVolume(symbol,lot));
}
OK, déjame hacerte una simple pregunta. ¿Cómo configuro el EA para que calcule automáticamente el lote dependiendo del apalancamiento. Digamos que el apalancamiento es de 1:50, el depósito es de 3000...
Pruébalo así:
{
Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
Lots_New=0;
if(Percent > 100) {
Percent = 100;
}
if(Percent == 0) {
Lots_New = 0;
return(0);
} else {
Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
}
if(Lots_New < Min_Lot) {
Lots_New = Min_Lot;
}
if(Lots_New*One_Lot > Free) {
return(0);
}
return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}