Ayuda a la codificación - página 19

 

he completado mi EA con su ayuda ThanX de nuevo

Hola, mLaden,

Gracias de nuevo por su gran ayuda

He completado mi EA con su ayuda ThanX de nuevo

ThanXXXXXXXXXX

 

Repintado de indicadores

Hace un par de semanas publiqué esta pregunta en este hilo 'Ayuda para la codificación', pero no obtuve respuesta.

La mayoría de los indicadores MTF repintan, algunos más que otros. Tengo uno que se repinta ligeramente, pero tiene un factor que es muy bueno y podría incluirse en un método. El problema es que tengo que actualizar manualmente / refrescar constantemente para que tenga sentido. ¿Hay alguna forma de codificar un refresco automático cada tick o cada 'x' segundos/ticks?

Actualmente, para refrescar, o bien cambio los tiempos del gráfico y luego vuelvo, o voy a la pestaña Gráficos/Refrescar, o añado otro indicador al gráfico y borro el anterior....... ¡una y otra vez! Me lleva mucho tiempo.

Si hay una manera de hacer esta actualización automática, voy a compartir lo que he encontrado ............

Gracias,

el bee

 

...

el bee

Metatrader está enviando una señal de autorefresco a todos y cada uno de los indicadores de la ventana cuando llega un nuevo tick, por lo que no es un problema de refresco. Normalmente ese tipo de problema que tienes ocurre cuando un indicador no encuentra el recuento de barras cambiadas (normalmente denominado en los indicadores como "límite") correctamente... por lo que es un problema f del indicador. Cuando cambias de marco temporal recalcula todas las barras de nuevo y por eso lo muestra correctamente en ese caso y no lo hace correctamente cuando sólo hay un valor de barras cambiadas

Para terminar: revisa el código del indicador - tiene un error

el bee:
Publiqué esta pregunta en este hilo 'Ayuda de codificación' hace un par de semanas, pero no obtuve respuesta.

La mayoría de los indicadores MTF repintan, algunos más que otros. Tengo uno que se repinta ligeramente, pero tiene un factor que es muy bueno y podría incluirse en un método. El problema es que tengo que actualizar manualmente/actualizar constantemente para que tenga sentido. ¿Hay alguna forma de codificar un refresco automático cada tick o cada 'x' segundos/ticks?

Actualmente, para refrescar, o bien cambio los tiempos del gráfico y luego vuelvo, o voy a la pestaña Gráficos/Refrescar, o añado otro indicador al gráfico y borro el anterior....... ¡una y otra vez! Me lleva mucho tiempo.

Si hay una manera de hacer esta actualización automática, voy a compartir lo que he encontrado ............

Gracias,

el bee
 

ayuda con el indicador

Me vendría bien un indicador que ponga una línea vertical en la vela más reciente, ajustable, si alguien tiene uno y lo puede compartir o si se puede hacer uno, sería muy apreciado

 

¿Hay un código incorrecto?

Estoy tratando de escribir un EA que se basa en la apertura y el cierre de la barra

pero tengo un problema con la condición para abrir una operación.

mi metodo es algo asi :

+ Vender cuando la apertura de la barra actual es mayor que el cierre de la barra anterior. El TP es el cierre de la barra anterior

+ COMPRA cuando la apertura de la barra actual es menor que la apertura de la barra anterior. TP es la apertura de la barra anterior

+ CIERRE cuando la barra actual se cierra .

y aquí está el código (todavía estoy tratando de aprender mql4 , así que sé que no es el mejor código)

#property link "sando"

#define MAGICMA 20050610

//====================parameter===================//

extern double solantang =3;

extern double solangiam =3;

extern double LotsSize =1;

//==============================================//

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

//| comprueba si hay operaciones abiertas |||

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

int CalcularOrdenesActual(cadena símbolo)

{

int compra=0,venta=0;

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) buys++;

if(OrderType()==OP_SELL) vende++;

}

}

//---- devuelve el volumen de las órdenes

if(buys>0) return(buys);

si no, return(-sells);

}

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

//| Gestión del dinero (tipo 3) |

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

double moneymanagement3()

{

double LotsSize = 0.1;

if(OrdersHistoryTotal()>0)

{

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

if(OrderProfit() > 0)

{

if(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam;

}

si no

{

TamañoLotes = TamañoLotes;

}

}

si no

{

LotsSize = OrderLots() * solantang;

}

}

return (NormalizeDouble(LotsSize,2));

}

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

//| CONDICIÓN para abrir una operación ||

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

void opentrade()

{

int res;

if(Close[0]<Open[1])

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(),Bid,3,Close[0],Close[1],"",MAGICMA,0,Red);

devolver;

}

if(Open[0]>Open[1])

{

res=Enviar orden(Símbolo(),OP_BUY,moneymanagement3(),Oferta,3,Apertura[0],Cierre[1],"",MAGICMA,0,Azul);

devolver;

}

}

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

//| función de inicio de experto ||

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

void start()

{

//---- comprueba el historial y las operaciones

if(Bars<100 || IsTradeAllowed()==false) return;

//---- calcular las órdenes abiertas por el símbolo actual

if(CalculateCurrentOrders(Symbol())==0) opentrade();

// si no, donggiaodich();

//----

}

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

y por favor revise la imagen en el archivo adjunto

Creo que algo está mal en el código

a veces el EA no hace la operación cuando cumple la condición T_T no sé por qué

¡y a veces el EA hace el comercio cuando no cumple la condición!

Por favor, ayúdeme a arreglar el error en el código.

Archivos adjuntos:
1_2.gif  12 kb
new_edge.mq4  4 kb
 
7thman:
Estoy tratando de escribir un EA que se basa en la apertura y cierre de la barra

pero tengo un problema sobre la condición para abrir un comercio .

mi método es algo así :

+ Vender cuando la apertura de la barra actual es mayor que el cierre de la barra anterior. El TP es el cierre de la barra anterior

+ COMPRA cuando la apertura de la barra actual es menor que la apertura de la barra anterior. TP es la apertura de la barra anterior

+ CIERRE cuando la barra actual se cierra .

y aquí está el código (todavía estoy tratando de aprender mql4 , así que sé que no es el mejor código)

y por favor, compruebe la imagen en el archivo adjunto

Creo que algo está mal en el código

a veces el EA no hace la operación cuando cumple la condición T_T no sé por qué

¡y a veces el EA hace la operación cuando no cumple la condición !

Por favor, ayúdame a arreglar el error en el código .

[lang=pl]+ VENDER cuando la apertura de la barra actual es mayor que el cierre de la barra anterior. El TP es el cierre de la barra anterior

+ COMPRA cuando la apertura de la barra actual es inferior a la apertura de la barra anterior. El TP es la apertura de la barra anterior

Este es el primer error:

if(Cierre[0]Cierre[1])

if(Open[0]>Open[1]) (Debería ser Open[0]<Open[1])

El segundo es StopLoss. En su código se establece StopLose, pero en la descripción anterior

usted dijo que quiere cerrar las operaciones si la nueva barra aparece.

Aquí hay un problema más. Suponga que Open[0]<Open[1]. La diferencia puede ser tan pequeña

que cuando su orden se ejecute el precio estará por encima de Open[1] y el TP será

menos que el precio de apertura de la orden. Abajo agrego una condición que permite atrapar este caso.

Si entiendo bien que usted quiere cerrar todas las órdenes al final de la barra aquí está el código.

#property link "sando"

#define MAGICMA 20050610

//====================parameter===================//

extern double solantang =3;

extern double solangiam =3;

extern double LotsSize =1;

//==============================================//

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

//| comprueba si hay operaciones abiertas |||.

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

int CalcularOrdenesActual(cadena símbolo)

{

int compra=0,venta=0;

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) buys++;

if(OrderType()==OP_SELL) vende++;

}

}

//---- devuelve el volumen de las órdenes

if(buys>0) return(buys);

si no, return(-sells);

}

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

//| Gestión del dinero (tipo 3) |

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

double moneymanagement3()

{

double LotsSize = 0.1;

if(OrdersHistoryTotal()>0)

{

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

if(OrderProfit() > 0)

{

if(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam;

}

si no

{

TamañoLotes = TamañoLotes;

}

}

si no

{

LotsSize = OrderLots() * solantang;

}

}

return (NormalizeDouble(LotsSize,2));

}

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

//| CONDICIÓN para abrir una operación ||

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

void opentrade()

{

int res;

if(Close[1] Close[1] )

{

res=Envío de orden(Símbolo(),OP_SELL,moneymanagement3(), Bid,3,0,Close[1],"",MAGICMA,0,Red);

res;

}

if(Open[0]<Open[1] && Ask < Open[1])

{

res=Enviar orden(Símbolo(),OP_BUY,moneymanagement3(),Oferta,3,0,Apertura[1],"",MAGICMA,0,Azul);

res;

}

}

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

//| función de inicio de experto ||

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

void start()

{

if(isNewBar())

{

closeOrders(MAGICMA,OP_BUY);

closeOrders(MAGICMA,OP_SELL);

}

Print(Close[1]-Open[0]);

//---- comprobar el historial y las operaciones

if(Bars<100 || IsTradeAllowed()==false) return;

//---- calcular las órdenes abiertas por el símbolo actual

if(CalculateCurrentOrders(Symbol())==0) opentrade();

// si no, donggiaodich();

//----

}

void closeOrders(int oMagic,int oType) {

for(int i=0;i<TotalOrdenes();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic || oMagic<0) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

if(OrderType()==OP_BUY) {

OrderClose(OrderTicket(),OrderLots(),Bid,0);

i--;

}

if (OrderType() == OP_BUYSTOP)

{

OrderDelete(OrderTicket());

i--;

}

if(OrderType()==OP_SELL) {

OrderClose(OrderTicket(),OrderLots(),Ask,0);

i--;

}

if (OrderType() == OP_SELLSTOP)

{

OrderDelete(OrderTicket());

i--;

}

}

}

}

}

}

}

bool isNewBar() {

static int prevTime;

bool newBar=false;

if(Time[0]!=prevTime) {

newBar=true;

prevTime=Time[0];

}

return(newBar);

}

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

Saludos,

Grzesiek[/lang]

 

Ayuda de codificación: Colocación de Stop Loss y Take Profit con EA usando un Broker ECN

Stop Loss, Take Profit con Broker ECN

Amigos,

Soy un novato en la programación de MQL4 y necesito ayuda para adjuntar un SL & TP a un ORDERSEND con un broker ECN.

Inicialmente, no podía entender por qué los SL y TP estaban haciendo que mi orden resultara en un error hasta que alguien señaló que uno tiene que establecer el campo StopLoss y TakeProfit dentro del ORDERSEND a "0" o de lo contrario un corredor ECN/STP no ejecutará la orden.

Entonces, mi pregunta es: ¿Cómo puedo ejecutar una orden en el mercado y luego inmediatamente (o dentro de un segundo o dos) adjuntar un SL/TP a esa entrada?

Aquí está una parte del código pertinente a mi pregunta:

if(CurrentPriceBuy>UpperPriceTrigger)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,Co mm,0,0,CLR_NONE);

}

¿Puede alguien ayudarme a insertar el código justo después del comando OrderSend para que pueda adjuntar un TP/SL de, digamos, 25pips arbitrariamente a esa entrada específica?

Cualquier ayuda será muy apreciada. Gracias de antemano.

Saludos,

Kasio

 
kasio:
Stop Loss, Take Profit con Broker ECN

Amigos,

Soy un novato en la programación de MQL4 y necesito ayuda para adjuntar un SL & TP a un ORDERSEND con un broker ECN.

Inicialmente, no podía entender por qué el SL & TPs estaban haciendo mi resultado de la orden en un error hasta que alguien señaló que uno tiene que establecer el StopLoss & TakeProfit campo dentro de la ORDERSEND a "0" o de lo contrario un corredor ECN / STP no ejecutará la orden.

Entonces, mi pregunta es: ¿Cómo puedo ejecutar una orden en el mercado y luego inmediatamente (o dentro de un segundo o dos) adjuntar un SL/TP a esa entrada?

Aquí está una parte del código pertinente a mi pregunta:

if(CurrentPriceBuy>UpperPriceTrigger)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,Co mm,0,0,CLR_NONE);

}

¿Puede alguien ayudarme a insertar código justo después del comando OrderSend para que pueda adjuntar un TP/SL de, digamos, 25pips arbitrariamente a esa entrada específica?

Cualquier ayuda será muy apreciada. Gracias de antemano.

Saludos,

Kasio

Hola kasio,

Si operas en un broker ECN deberías enviar la orden sin SL/TP y modificarla.

Aquí tienes un ejemplo:

extern double StopLoss = 25;

extern double TakeProfit = 25;

if(isECN==true )

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - StopLoss*Point, StopLoss),sltpValue(Ask+ TakeProfit*Point,TakeProfit),0);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

Espero que esté claro

Si tienes más preguntas, pásame un correo electrónico.

Saludos,

grzesiek

 

La información no se actualiza cada tic

Hola chicos,

Escribí este ea que me muestra información de varios indicadores en mi pantalla.

Sin embargo cuando adjunto el ea a mi gráfico, la información sólo se actualiza cada 5 min (en el gráfico de 5 min.)

en lugar de cada tic. ¿Hay algo mal en mi codificación? Me gustaría que la información cambiara cada tic.

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

//| Copyright © 2011, Test Inc.

//| test. net - Recursos e información de test.

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

#property copyright "Copyright © 2011, Test Inc."

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

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

//| etiquetas |

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

#define ccilabel "CCIValue"

#define rsilabel "RSIValue"

#define stochlabel "StochValue"

#define upperbandlabel "UpperBandValue"

#define lowerbandlabel "LowerBandValue"

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

//| función de inicialización de expertos ||

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

int init()

{

//----

//----

return(0);

}

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

//| función de desinicialización experta ||

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

int deinit()

{

//----

//----

return(0);

}

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

//| función de inicio experto ||

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

int inicio()

{

//----

//===================================================================

// Se puede ver el Índice de Fuerza Relativa Dinámica

//===================================================================

doble RSI;

double UpperBand;

double BandaInferior;

RSI=iCustom(NULL,0, "Dynamic Zone RSI",14,0,1);

UpperBand=iCustom(NULL,0, "Dynamic Zone RSI",14,1,1);

LowerBand=iCustom(NULL,0, "Dynamic Zone RSI",14,2,1);

//===================================================================

// CCI berekenen

//===================================================================

doble CCI;

CCI=iCCI(NULL,0,14,PRICE_TYPICAL,1);

//===================================================================

// Búsqueda de estocástico

//===================================================================

double Stoch;

Stoch=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);

//===================================================================

// Mostrar información

//===================================================================

// CCIValor

ObjectDelete(ccilabel);

ObjectCreate(ccilabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(ccilabel, OBJPROP_XDISTANCE, 20);

ObjectSet(ccilabel, OBJPROP_YDISTANCE, 20);

ObjectSetText(ccilabel, "CCIValue is " + DoubleToStr(CCI,2), 10, "Arial", DeepSkyBlue);

// StochValue

ObjectDelete(stochlabel);

ObjectCreate(stochlabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(stochlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(stochlabel, OBJPROP_YDISTANCE, 40);

ObjectSetText(stochlabel, "StochValue is " + DoubleToStr(Stoch,2), 10, "Arial", DeepSkyBlue);

// RSIValue

ObjectDelete(rsilabel);

ObjectCreate(rsilabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(rsilabel, OBJPROP_XDISTANCE, 20);

ObjectSet(rsilabel, OBJPROP_YDISTANCE, 60);

ObjectSetText(rsilabel, "RSIValue is " + DoubleToStr(RSI,2), 10, "Arial", DeepSkyBlue);

// Valor de la banda superior

ObjectDelete(upperbandlabel);

ObjectCreate(upperbandlabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(upperbandlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(upperbandlabel, OBJPROP_YDISTANCE, 80);

ObjectSetText(upperbandlabel, "UpperbandValue is " + DoubleToStr(UpperBand,2), 10, "Arial", DeepSkyBlue);

// LowerBandValue

ObjectDelete(lowerbandlabel);

ObjectCreate(lowerbandlabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(lowerbandlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(lowerbandlabel, OBJPROP_YDISTANCE, 100);

ObjectSetText(lowerbandlabel, "LowerBandValue is " + DoubleToStr(LowerBand,2), 10, "Arial", DeepSkyBlue);

//----

return(0);

}

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

 

KG Soporte y Resistencia mod.

Hola,

Necesito que alguien modifique uno de los indicadores de soporte y resistencia adjuntos. El primero tiene una alerta cuando se produce una ruptura. Este indicador es uno de los mejores indicadores de soporte/resistencia y también muy potente, especialmente en los plazos más altos.

Gracias

kg_support_and_resistance.mq4 o

kg_support_and_resistance_alert_revision_2.ex4

Razón de la queja: