¿Cómo codificar? - página 283

 

Ayuda para la expectativa matemática, por favor

Hola

Me parece que me he confundido hasta cierto punto.

Estoy tratando de usar una fórmula de expectativa dentro de mi EA Tengo la fórmula 1-avgwin/avgloss*precisión del sistema+1 y eso funciona bien, pero me gustaría saber cómo calcular y mostrar la diferencia entre la Orden y el StopLoss, por ejemplo

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Creo que esto tiene que ser un número positivo.

Una expectativa de 1,45

Así que para calcular el TakeProfit -0.00197 * 1.45 = -0.00285

Coloque el TP en OP_SELLSTOP 1.63406 - 1.63121

y viceversa para la posición larga

es todo parte de este hilo https://www.mql5.com/en/forum/178980 y si usted echa un vistazo a la hoja de Excel verá que estoy casi allí.

Cualquier ayuda sería genial.

Saludos Beno

 
Beno:
Hola

Me parece que me he engañado a mí mismo hasta cierto punto.

Estoy tratando de utilizar una fórmula de expectativa dentro de mi EA Tengo la fórmula 1-avgwin/avgloss*system accuracy+1 y eso funciona bien, pero me gustaría saber cómo calcular y mostrar la diferencia entre la Orden y el StopLoss, por ejemplo

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Creo que esto tiene que ser un número positivo.

Una expectativa de 1,45

Así que para calcular el TakeProfit -0.00197 * 1.45 = -0.00285

Coloque el TP en OP_SELLSTOP 1.63406 - 1.63121

y viceversa para la posición larga

es todo parte de este hilo https://www.mql5.com/en/forum/178980 y si usted echa un vistazo a la hoja de Excel verá que estoy casi allí.

Cualquier ayuda sería genial.

Salud Beno

La forma más sencilla es no pensar en eso y usar

double MathAbs(double valor)

MathAbs - Documentación MQL4

Saludos

 

Hola CRN

Gracias por la respuesta esto es lo que he estado intentando

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Creo que es correcto pero sólo imprime PipSL 15769.68328362

1 2011.01.04 00:00 vender stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 vender 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 modificar 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 cerrar en la parada 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

y requiero la diferencia real entre la venta y el SL

 

Que alguien me ayude, por favor.

Hola y Feliz Navidad para todos.

En primer lugar estoy recién llegado a este forum.I tiene problema con con Ea y puede alguien arreglar para mí? El problema es cómo configurar este EA para el comercio real y el EA sólo el color gris en mi comercio en vivo.

Aquí el archivo adjunto :

spielershedge_library.mqh

spielershedge_pipstar.mq4

spielershedge_ea_v2.8.1.ex4

spielershedge_divergence_v5.1.ex4

-aunque era viejo ea pero creo que tal vez podemos compartir y tomar algo que beneficiará a todos nosotros.

-Acabo de encontrar esto de Hedge trading spieler system derived from futures spread trading - Página 193 @ Forex Factory( SpielersHedge PipStar.mq4 ) y el resto de Hedge trading spieler system derived from futures spread trading - Página 87 @ Forex Factory

-Perdón por mi mal inglés.

P/S : Estoy muy agradecido por las lecciones, guías, comentarios y críticas de todos ustedes para mi mejora. Creo que cuanto más damos nuestro conocimiento, más ganamos el conocimiento.

 
Beno:
Hola CRN

Gracias por la respuesta esto es lo que he estado intentando

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Creo que es correcto, pero sólo imprime PipSL 15769.68328362

1 2011.01.04 00:00 vender stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 vender 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 modificar 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 cerrar en la parada 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

y requiero la diferencia real entre la venta y el SL

Si usted necesita el uso real iClose(0,0,0)-OrderStopLoss().

pero primero seleccione la orden correcta por OrderSelect;

Saludos

 

Filtro de tiempo con CloseAll Ayuda por favor

Gidday

Tengo un filtro de tiempo trabajando en el EA pero he estado tratando de adjuntarle un closeall para que si el tiempo es igual al tiempo de cierre entonces closeall abra posiciones

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}
 

por favor, ayúdenme

extern int BuyStopTakeProfit=10;

extern int BuyStopSL=1000;

cómo codificar

si BuyStopTakeProfit golpea TakeProfit, eliminar todas las órdenes pendientes

por favor alguien puede ayudar

 

¡¡¡¡Ayuda!!!! Por favor!!!! Función iCustom

Ayuda,

He intentado todo para conseguir que mi C_EA_rev6.mq4 llame al buffer any del indicador personalizado VSATEXTSIGNALS.mq4. He utilizado la función iCustom pero siempre devuelve 2147483647 que entiendo es un código de error. El indicador personalizado coloca señales de texto en el gráfico basándose en técnicas de análisis de dispersión de volumen. El indicador personalizado funciona bien cuando lo adjunto a un gráfico. He pasado incontables horas en esto y he probado todas las combinaciones que conozco. Cualquier ayuda sería muy apreciada. Además, tengo una pregunta, ¿se puede utilizar la función iCustom en un indicador personalizado que llama a un script o archivo .dll?

Ver los archivos adjuntos para el código del indicador y EA.

Gracias,

cmfxtrader

Archivos adjuntos:
 
cmfxtrader:
Ayuda,

He intentado todo para conseguir que mi C_EA_rev6.mq4 llame al buffer any del indicador personalizado VSATEXTSIGNALS.mq4. He utilizado la función iCustom pero siempre devuelve 2147483647 que entiendo es un código de error. El indicador personalizado coloca señales de texto en el gráfico basándose en técnicas de análisis de dispersión de volumen. El indicador personalizado funciona bien cuando lo adjunto a un gráfico. He pasado incontables horas en esto y he probado todas las combinaciones que conozco. Cualquier ayuda sería muy apreciada. Además, tengo una pregunta, ¿se puede utilizar la función iCustom en un indicador personalizado que llama a un script o archivo .dll?

Ver los archivos adjuntos para el código al indicador y EA.

Gracias,

cmfxtrader

Hola,

Lo que pasa es que mientras intentas leer el buffer del indicador, éste emite mensajes de texto, que no son buffers. Por lo tanto, por qué usted está recibiendo 2147483647 valor que es EMPTY_VALUE no un error.

De todos modos supongo que le gustaría automatizar las señales de este indicador. Hay una solución simple para eso. El indicador está declarado para tener 7 buffers (#property indicator_buffers 7) pero está usando sólo 5. Los indicadores pueden usar un máximo de 8 buffers. Esto significa que usted puede declarar otro búfer adicional sólo para sus cálculos y llenarlo con mensajes identificativos. Encontrará los números de los mensajes en la función TextOutput. Simplemente añada números a su búfer dependiendo del mensaje que se muestre. Por ejemplo, si el texto es : "UPTHRUST / Weakness_" entonces añada 1 a su buffer, si el mensaje es PSEUDO UPTHRUST / Weakness_ entonces añada 4 y así sucesivamente. El índice del buffer será el mismo que el valor de la variable "i".

En cuanto a su segunda pregunta: siempre se puede utilizar la función iCustom para un indicador (no script) y leer los valores si se llenan los buffers declarados en el indicador. Por ejemplo, si se trata de un indicador que dibuja líneas, puede leer los valores de las líneas, ya que para dibujar algo (excepto las etiquetas) el indicador tiene que rellenar los búferes. Si el indicador va a crear objetos gráficos (como el que adjuntaste) entonces necesitarás: a) leer los valores de los objetos gráficos, o b) recodificar el indicador (como sugerí arriba). No importa si el indicador está usando DLL o no - solo necesita llenar el buffer apropiadamente para leer sus valores desde la función iCustom.

 
Beno:
Gidday

Tengo un filtro de tiempo trabajando en el EA pero he estado tratando de adjuntar un closeall a él de modo que si el tiempo es igual al tiempo de cierre entonces closeall posiciones abiertas

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}

intente comprobar esta parte:

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

la otra parte del código podría ser más fácil, pero debería funcionar.

Sin embargo, si se sale del script antes de cerrar toda la parte entonces no funcionará, y parece que el script está haciendo eso.

Mira esta parte por ejemplo:

(fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday) return(0);

En inglés significa: si es viernes, y el filtro friday está activado, y la marca de tiempo fue pasada (por ejemplo, la hora de finalización es 18.00 y es 18.01) entonces return(0).

Debería ser: si es viernes, y el filtro de viernes está activado, y el TimeMark fue pasado CLOSE ALL y (por ejemplo, la hora de finalización es 18.00 y es 18.01) entonces return(0).