double ATR_Max() {
int i;
double m;
datetime tim;
iATR_H1_PER = 15;// периодif ( tim != Time[0] ) {
while( i < WindowBarsPerChart() ) {
double a = iATR( NULL, 0, iATR_H1_PER, i );
if ( m < a ) {
m = a;
}
i++;
tim = Time[0];
}
}
Alert( " Максимальное значение ATR для видимого количества баров равно - ", m );
return(m);
}
Boeing747 : Creo que tim = Time[0] estaría mejor colocado después del bucle ...porque preguntar a Time[0] se hace en todo el número de barras visibles - no es racional.
Gracias por la corrección. El número de errores crece exponencialmente en la noche))))
Buenas tardes. ¿Sabes si es posible cambiar los parámetros del indicador sobre la marcha en mql4? La idea es sencilla: el indicador ZigZag se instala en el gráfico. Hay que escribir el script y adjuntarle la tecla de acceso rápido, que al pulsarla cambiará los parámetros del zigzag en el gráfico.
Así, la función comprueba los valores de las dos barras anteriores y si son demasiado grandes, devuelve TRUE. La cuestión es cómo mejorarla bien y hacer que busque grandes velas en más velas. Por ejemplo, 24.
satorifx : Buenas tardes. ¿Sabes si es posible cambiar los parámetros del indicador sobre la marcha en mql4? La idea es sencilla: el indicador ZigZag se instala en el gráfico. Hay que escribir el script y adjuntarle la tecla de acceso rápido. En cuanto la pulse, los parámetros de ZigZag cambiarán en el gráfico.
Hice un Asesor Experto casero para probar el comercio, pero no puedo averiguar una cosa...
La bahía/venta se abre usando las MAs máximas y mínimas
// Condición para abrir la posición de COMPRA if(MA_L1<MA_L0&&Ask<=MA_L0&MA_0>MA_1&&HA_up>HA_dw)
// Condición para abrir una posición de VENTA if(MA_H1>MA_H0&&Bid>=MA_H0&MA_0<MA_1&HA_up<HA_dw)
#include <b-Lots.mqh>externdouble TrailingStop = 30;
externdouble Sploss = 15;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start() {
double HA_up,HA_dw;
double MA_H0,MA_H1,MA_L0,MA_L1,MA_0,MA_1;
int i, cnt, ticket, total;
bool flag=true;
if(Bars<100) {
Print("bars less than 100");
return(0);
}
// Проверяем стоит ли открываться
cnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
if(!flag) return(0);
//-----------------------------------------------
MA_H0=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,0);
MA_H1=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,1);
MA_0=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,0);
MA_1=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,1);
MA_L0=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,0);
MA_L1=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,1);
HA_up=iCustom(0,0,"Heiken Ashi",3,0);
HA_dw=iCustom(0,0,"Heiken Ashi",2,0);
//задали все данные
total=OrdersTotal();
if(total<1)
{
// Проверка свободной маржиif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Условие открытие позиции BUYif(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-Sploss*Point,0,"",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
elsePrint("Error opening BUY order : ",GetLastError());
return(0);
}
// Условие открытие позиции SELLif(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+Sploss*Point,0,"",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
elsePrint("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // длинная позиция открыта
{
if(NormalizeDouble (MathAbs(MA_H0-Bid),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
// трейлинг-стоп для длинной позицииif(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(NormalizeDouble (MathAbs(MA_L0-Ask),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}
// трейлинг-стоп для короткой позицииif(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
Pregunta: La posición en la vela actual no está cerrada (las condiciones no han llegado). Cómo cerrarla en la siguiente vela, cuando coincide con MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 );
Tenemos una condición para cerrarla: cruzar el máximo o el mínimo de la vela actual, pero necesitamos que la posición se cierre en la siguiente vela después de abrirla.
Podemos escribir if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), pero cómo cumplir la condición de la segunda vela abierta.
Si puedes responder con código, el ejemplo es más claro.
Gracias por la respuesta increíblemente detallada.
¿De verdad hay que ser un listillo para entender que si una persona nueva llega al foro con una pregunta, necesita una solución concreta o un enlace a algo similar, no una excusa tonta de que "todo es posible"?
Gracias por la respuesta increíblemente detallada.
¿Realmente hay que ser un listillo para entender que si una persona nueva llega al foro con una pregunta, necesita una solución concreta o un enlace a algo similar, no una excusa tonta de que "todo es posible"?
Las personas que intentan hacer algo por su cuenta reciben ayuda aquí. Te guían en la dirección correcta, te explican, etc. ...
Hiciste una pregunta y obtuviste una respuesta. ¿Ha intentado empezar a escribir algo usted mismo?
Cuando hagas una pregunta con un formato determinado, piensa primero en el tipo de respuesta que obtendrás al formato de la pregunta...
Así que, espero que la forma final de la función.
Así que, espero que la forma final de la función.
Así que, espero que la forma final de la función.
Creo que tim = Time[0] estaría mejor colocado después del bucle ...porque preguntar a Time[0] se hace en todo el número de barras visibles - no es racional.
Gracias por la corrección. El número de errores crece exponencialmente en la noche))))
La idea es sencilla: el indicador ZigZag se instala en el gráfico. Hay que escribir el script y adjuntarle la tecla de acceso rápido, que al pulsarla cambiará los parámetros del zigzag en el gráfico.
Continuando con el tema actual de encontrar un filtro de alta volatilidad. Este es el código de un filtro existente de WSR
int init()
Esta es la función propiamente dicha:
Así, la función comprueba los valores de las dos barras anteriores y si son demasiado grandes, devuelve TRUE. La cuestión es cómo mejorarla bien y hacer que busque grandes velas en más velas. Por ejemplo, 24.
Buenas tardes. ¿Sabes si es posible cambiar los parámetros del indicador sobre la marcha en mql4?
La idea es sencilla: el indicador ZigZag se instala en el gráfico. Hay que escribir el script y adjuntarle la tecla de acceso rápido. En cuanto la pulse, los parámetros de ZigZag cambiarán en el gráfico.
Hice un Asesor Experto casero para probar el comercio, pero no puedo averiguar una cosa...
Pregunta: La posición en la vela actual no está cerrada (las condiciones no han llegado). Cómo cerrarla en la siguiente vela, cuando coincide con MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 );La bahía/venta se abre usando las MAs máximas y mínimas
// Condición para abrir la posición de COMPRA
if(MA_L1<MA_L0&&Ask<=MA_L0&MA_0>MA_1&&HA_up>HA_dw)
// Condición para abrir una posición de VENTA
if(MA_H1>MA_H0&&Bid>=MA_H0&MA_0<MA_1&HA_up<HA_dw)
Tenemos una condición para cerrarla: cruzar el máximo o el mínimo de la vela actual, pero necesitamos que la posición se cierre en la siguiente vela después de abrirla.
Podemos escribir if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), pero cómo cumplir la condición de la segunda vela abierta.
Si puedes responder con código, el ejemplo es más claro.
Existe esa posibilidad.
Gracias por la respuesta increíblemente detallada.
¿De verdad hay que ser un listillo para entender que si una persona nueva llega al foro con una pregunta, necesita una solución concreta o un enlace a algo similar, no una excusa tonta de que "todo es posible"?
Gracias por la respuesta increíblemente detallada.
¿Realmente hay que ser un listillo para entender que si una persona nueva llega al foro con una pregunta, necesita una solución concreta o un enlace a algo similar, no una excusa tonta de que "todo es posible"?
Las personas que intentan hacer algo por su cuenta reciben ayuda aquí. Te guían en la dirección correcta, te explican, etc. ...
Hiciste una pregunta y obtuviste una respuesta. ¿Ha intentado empezar a escribir algo usted mismo?
Cuando hagas una pregunta con un formato determinado, piensa primero en el tipo de respuesta que obtendrás al formato de la pregunta...