¿Cómo codificar? - página 233

 
CoeyCoey:
Hola a todos,

Estoy trabajando en la modificación de un medidor de fuerza de la moneda para mostrar la fuerza de la moneda basada en el tiempo del gráfico. Actualmente, el código utilizado es:

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Entiendo que MODE_HIGH y MODE_LOW obtienen los máximos y mínimos del día actual. ¿Cómo podría obtener el máximo y el mínimo del marco de tiempo actual de los gráficos?

Gracias.

P.D. No soy un programador, así que use palabras pequeñas por favor:)

No tienes que usar MarketInfo(). Si quieres obtener el máximo actual, utiliza High[0] y Low[n], Close[n], Open[n]. n' significa el desplazamiento desde la barra actual. Por ejemplo, para obtener el máximo de la barra anterior a la actual, puede utilizar High[1] ya que la actual es 0 y la barra anterior tiene un desplazamiento de 1 respecto a la actual.

Para comprobar los máximos, mínimos, aperturas y cierres de otros marcos temporales distintos a los que está viendo en el gráfico, puede utilizar las funciones iHigh(), iLow(), iClose() e iOpen.

Ejemplo de uso a continuación.

double high_of_gbpusd_4hours_current = iHigh("gbpusd", period_h4, 0);

 

¡Gracias! ¡Sois lo máximo!

 
mfurlend:

Creo que más o menos lo tengo funcionando (no estoy seguro??), pero por alguna razón el array se llena de un montón de valores '0' junto con los valores legítimos.

Así es como yo lo haría:

#define TICKET 0

#define PRICES 1

double ResumeArray[0,2];

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

bool success = false;

int k;

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

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;

if (OrderType() > OP_SELL || OrderProfit()> Cutoff)continue;

int arraycount=ArrayRange(ResumeArray,TICKET);

bool found = false;

for (k=arraycount-1; k>=0; k--)

{

if (ResumeArray[k,TICKET] == OrderTicket())

{

found = true;

if (ResumeArray[k,PRICES] + Cutoff < OrderProfit())break;

else

{

success=true;

Print ("ELSE");

ResumeArray[k,PRICES] = OrderProfit();

break;

}

}

}

if (found == false)

{

arraycount = ArrayResize(ResumeArray,arraycount+1)/2;

ResumeArray[arraycount-1,TICKET] = OrderTicket();

ResumeArray[arraycount-1,PRICES] = OrderProfit();

success=true;

}

}

if(success)return (1);

else return(0);

}

No tienes que usar las definiciones TICKET y PRICES, sólo las he incluido para mostrar cómo funciona un array de 2 dimensiones. Simplemente reemplace todas las ocurrencias de TICKET y PRICES con 0 y 1 respectivamente.

He sustituido los comandos "return" en el bucle "for" por "break", por lo que todas las órdenes abiertas serán procesadas.

Una cosa a tener en cuenta es que las órdenes cerradas nunca se eliminan del array, por lo que seguirá creciendo en tamaño, y ralentizará su plataforma.

d4v3

 

Límite del historial de barras

Estaría muy agradecido si alguien puede añadir la opción de límite de barras a este script RenkoLiveChart_v3.2.

Se necesitan demasiados recursos informáticos.

Archivos adjuntos:
 

Alerta básica EA

................[resuelto] ....................

 

reducción de ruido

Hola a todos - He estado buscando una manera de limitar el ruido en un comercio y hacer un corte más rápido

La idea es bastante simple

el ruido se muestra en esta imagen es dinámico lo que significa que sigue cambiando para adaptarse a la condición del mercado

Aquí hay un código que he hecho para el cierre, si alguien quiere usarlo, siéntase libre, sólo necesita algunos multiplicadores.

int beneficio = OrderProfit() + OrderSwap() + OrderCommission();

int Trades = ScanTrades(0,0);

if (Trades == 0) TS1 = 0;

if ((ScanTrades(2,0) > 0) && (profit < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + ruido + deslizamiento);

si ((ScanTrades(2,0) > 0) && (beneficio > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + ruido );

si ((ScanTrades(1,0) > 0) && (beneficio < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - ruido - deslizamiento);

si ((ScanTrades(1,0) > 0) && (beneficio > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - ruido );

/cortocircuito

si ((ScanTrades(2,0) > 0)&& (TS1 ==0 )) TS1 = TS;

si ((ScanTrades(2,0) > 0)&& (TS < TS1)) TS1 = TS;

if ((ScanTrades(2,0) > 0) && (MarketInfo(Symbol(),MODE_BID) > TS1)) CloseOrder(2);

//largo

if ((ScanTrades(1,0) > 0)&& (TS1 ==0 )) TS1 = TS;

si ((ScanTrades(1,0) > 0)&& (TS > TS1)) TS1 = TS;

if ((ScanTrades(1,0) > 0) && (MarketInfo(Symbol(),MODE_BID) < TS1)) CloseOrder(1);

cuál sería la mejor manera de obtener el máximo y el mínimo actual y anterior de un gráfico de barras. Necesito crear la variable "ruido"

He intentado esto, pero su éxito y la falta t1 y l1 son a veces 0 su más deprimente como es todo lo que se interpone entre el conjunto ea ser "terminado" si alguna vez hay tal cosa.

doble hh2=Alto;

double ll2=Low;

double hh3=Alto;

double ll3=Bajo;

double t1,l1,noise;

//ruido = solapamiento de las barras anteriores

si ((hh2 - hh3) > 0 ) t1 =(hh3); //básicamente escoge la barra "alta" más baja entre las dos -bullish

si ((hh3- hh2) > 0 ) t1=(hh2); //alcista

si ((ll2 - ll3) > 0 ) l1 =(ll2); //elección de la barra más baja alcista

si ((ll3-ll2) > 0 ) l1=(ll3); //alcista

ruido =(t1-l1);

Print("t1 = ",t1,"; l1 = ",l1);

los resultados típicos de la impresión son t1=0 l1=94.3 su más molesto es porque hh2 y hh3 son == simplemente no sé qué hacer no veo un problema con mi código.

Archivos adjuntos:
cutoff.jpg  5 kb
 

¿quién puede ayudarme?

¿alguien puede mostrarme cómo hacer un nuevo indicador que se basa en 3 indicadores conocidos? Hago una estrategia basada en 3 indicadores que muestran señales de compra/venta muy fuertes, pero quiero crear 1 indicador...

 

modificación de ea por favor

Por favor, ayúdenme a implementar los siguientes cambios en este ea

1)Añadir en la hora

A) indicador fisher_ 11 con ajustes 33,0.5,0.5

B) indicador tcf smoothed ajustes 17, 8, 0.7

c) Tambien quiero que el indicador dinap _basic no permita operaciones cuando haya dibujado en contra de la direccion de la señal, es decir, si dibuja hacia arriba, no se permite entrar en las señales de compra, si dibuja hacia abajo, no se permite entrar en las señales de venta.

2) Añadir en 15 minutos

A) indicador de supertendencia

B) Indicador Trendlord

Gestión monetaria de

1) Abrir 2 operaciones con un 3% de stop loss del total de la cuenta (1,5%) cada una

2) Una con 80 pips de take profit o 2,2% y la segunda con 3,8% de take profit

3) Doblar el tamaño del lote para la quinta operación después de 4 pérdidas consecutivas y luego incrementar los lotes lineales para las siguientes operaciones hasta dos victorias consecutivas y volver al tamaño del lote por defecto.

4) Trailing stop de 12pips (por encima de la venta y por debajo de la compra de la vela anterior atrstops_v1 indicador para todos los oficios.

Eso es todo por favor ayuda

Archivos adjuntos:
 

Podrías haber conseguido exactamente lo mismo con una línea de código.

GlobalVariableSet("TRENDSET_"+Symbol());

También podrías añadir el marco temporal para hacerlo aún más único.

Para ser sincero, no estoy muy seguro de cuál era el objetivo de tu mensaje.

Saludos

Lux

 

¿Cómo llamar al valor de H1 usando iCustom?

Hola,

Estoy tratando de codificar un indicador muy simple, pero soy incapaz de llamar al valor de Laguerre de H1.

lo que quiero hacer :

Usando 1M TF

señal de compra : Laguerre cruzando el nivel 0.15 cabeza arriba y Laguerre H1 > 0.75

señal de venta : Laguerre cruzando el nivel 0.75 cabeza abajo y Laguerre H1 < 0.15

he hecho el indicador para el cruce simple y funciona, el problema es cuando intento comprobar el valor de Laguerre H1: ¡es un lío!

He probado 2 formas:

La primera:

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 SeaGreen

#property indicator_color2 Red

#property indicator_width1 3

#property indicator_width2 3

double CrossUp[];

double CrossDown[];

extern bool SoundON=true;

double alertTag;

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

SetIndexStyle(0, DRAW_ARROW, EMPTY,3);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY,3);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Custom indicator iteration function |

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

int start() {

int limit, i;

int counted_bars=IndicatorCounted();

//---- check for possible errors

if(counted_bars<0) return(-1);

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(i = 0; i <= limit; i++) {

if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) > 0.15) && (iCustom(NULL,0,"Laguerre",0.66,9500,0,i+1) < 0.15)

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) > 0.75)) //check for buy signal

{

CrossUp = Close;

}

else if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) 0.75)

&& (iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) < 0.15)) //check for sell signal

{

CrossDown = Close;

}

if (SoundON==true && i==1 && CrossUp > CrossDown && alertTag!=Time[0]){

Alert("SHORT signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

if (SoundON==true && i==1 && CrossUp < CrossDown && alertTag!=Time[0]){

Alert("Long Signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

}

return(0);

}[/CODE]

second one:

[CODE]//+------------------------------------------------------------------+

//| Shift.mq4 |

//| me |

//|

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

#property copyright "me"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

#property indicator_width1 4

#property indicator_width2 4

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

bool Fact_Up = true; // Fact of report that market..

bool Fact_Dn = true; //..is bullish or bearish

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,241);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,242);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexEmptyValue(1,0.0);

//----

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

//int limit;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

if(counted_bars<0) return(-1);

//limit=Bars-counted_bars;

//----

double MA; // MA value on 0 bar

double MA2;

double MA3;

double MA4;

//--------------------------------------------------------------------

double value1, value2, value3;

for (int i=Bars-1;i>=0;i--)

//---- main loop

//for(int i=0; i<limit; i++)

{value1=0.0;

value2=0.0;

value3=0.0;

//--------------------------------------------------------------------

// Checking if bullish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) > 0.15) && (iCustom(Symbol(),NULL,"Laguerre",0,i+1) < 0.15) && Fact_Up == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) > 0.75))

{

Fact_Dn = true; // Report about bullish market

Fact_Up = false; // Don't report bullish market

// Alert("BUY SIGNAL.");

value1=Open;

}

//--------------------------------------------------------------------

// Checking if bearish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) 0.75) && Fact_Dn == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) < 0.15))

{

Fact_Up = true; // Report about bearish market

Fact_Dn = false; // Don't report bearish market

// Alert("SELL SIGNAL.");

value2=Open;

}

ExtMapBuffer1=value1;

ExtMapBuffer2=value2;

}

//----

return(0);

}

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

ambas no funcionan, la línea ROJA es el problema, sin la línea ROJA funciona perfectamente.

He probado (iCustom(Symbol(),PERIOD_H1, "Laguerre",0,i) < .....)

(iCustom(Symbol(),PERIOD_H1, "Laguerre",0,0) < ....)

(iCustom(Symbol(),60, "Laguerre",0, i) < ....)

(iCustom(Symbol(),60, "Laguerre",0, 0) < .....)

He probado también con las variables: (iCustom(Symbol(),PERIOD_H1, "Laguer re",0.66,9500,0,i)

iF i put:

Print(iCustom(Symbol(),60, "Laguerre ",0,i)); antes del "if" devuelve un número aleatorio...

pero con: Print(iCustom(Symbol(),60, "Laguerre ",0,0)); devuelve el valor bueno de H1

ahora el problema sigue siendo el mismo si uso iCustom(Symbol(),60, "Laguerre",0, 0); dentro del "if" no funciona...

el problema está en el "for" y en la "i" y en el valor "shift" de iCustom pero no consigo resolverlo.

¡su ayuda seria muy bienvenida !

adjunto el indicador de Laguerre que utilizo por si quieres darle una oportunidad.

si alguien esta dispuesto a recodificarlo desde cero por favor no lo dude

me esta volviendo loco...

Archivos adjuntos:
laguerre.mq4  3 kb