#property copyright"Copyright 2010, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"//-------------------------------------------------------------------//-------------------------------------------------------------------#include <Trade\Trade.mqh>
//--- input parametersinputint StopLoss=-100; // Stop Loss$//input int TakeProfit=100; // Take Profit//input int KD_Period=9; // KD Periodinputint K_Period=9; // K Periodinputint D_Period=3; // D Period//input int MA_Period=8; // Moving Average Periodinputint EA_Magic=12345; // EA Magic Number//input double Adx_Min=22.0; // Minimum ADX Value//---//---input double Lot=0.01; // Lots to Tradeinputdouble MaxPosition=3.00; //Max positioninputdouble P1=0.12; //P1 position1inputdouble P2=0.32;
inputdouble P3=0.77;
inputdouble P4=1.92;
inputdouble P5=2.85;
inputdouble P6=3.57;
//inputdouble PF1=10; //PF1 profit1inputdouble PF2=50;
inputdouble PF3=100;
inputdouble PF4=500;
inputdouble PF5=800;
inputdouble PF6=1500;
////--- Other parametersint KDHandle; // handle for our stochastic indicator//int maHandle; // handle for our Moving Average indicatordouble K[],D[]; // Dynamic arrays to hold the values of K,D values for each bars//double maVal[]; // Dynamic array to hold the values of Moving Average for each barsdouble p_close; // Variable to store the close value of a barint STP, TKP; // To be used for Stop Loss & Take Profit valuesdouble TTL_profit; //to be used for Total profit//double hisBuyLot=0.05;//double hisSellLot=0.05;double TTLBuy_position;
double TTLSell_position;
int Buytimes; //to be use for buy timesint Selltimes; // to be used for sell timesbool special_close_p=false;
double special_profit=0;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Get handle for KD indicator
KDHandle=iStochastic(NULL,0,K_Period,D_Period,3,MODE_SMA,STO_LOWHIGH);
//--- Get the handle for Moving Average indicator// maHandle=iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);//--- What if handle returns Invalid Handleif(KDHandle<0)
{
Alert("Error Creating Handles for indicators - error: ",GetLastError(),"!!");
return(-1);
}
//--- Let us handle currency pairs with 5 or 3 digit prices instead of 4//STP = StopLoss;//TKP = TakeProfit;//if(_Digits==5 || _Digits==3)// {// STP = STP*10;// TKP = TKP*10;// }return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- Release our indicator handlesIndicatorRelease(KDHandle);
// IndicatorRelease(maHandle);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//--- Do we have enough bars to work withif(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
// We will use the static Old_Time variable to serve the bar time.// At each OnTick execution we will check the current bar time with the saved one.// If the bar time isn't equal to the saved time, it indicates that we have a new tick.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// copying the last bar time to the element New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true; // if it isn't a first call, the new bar has appearedif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0]; // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}
//--- EA should only check for new trade if we have a new barif(IsNewBar==false)
{
return;
}
//--- Do we have enough bars to work withint Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
//--- Define some MQL5 Structures we will use for our tradeMqlTick latest_price; // To be used for getting recent/latest price quotesMqlTradeRequest mrequest; // To be used for sending our trade requestsMqlTradeResult mresult; // To be used to get our trade resultsMqlRates mrate[]; // To be used to store the prices, volumes and spread of each barZeroMemory(mrequest); // Initialization of mrequest structure/*
Let's make sure our arrays values for the Rates, KD Values
is store serially similar to the timeseries array
*/// the rates arraysArraySetAsSeries(mrate,true);
// the KD Kvalues arrayArraySetAsSeries(K,true);
// the KD Dvalues arrayArraySetAsSeries(D,true);
// the ADX values arrays// ArraySetAsSeries(adxVal,true);// the MA-8 values arrays// ArraySetAsSeries(maVal,true);//--- Get the last price quote using the MQL5 MqlTick Structureif(!SymbolInfoTick(_Symbol,latest_price))
{
Alert("Error getting the latest price quote - error:",GetLastError(),"!!");
return;
}
//--- Get the details of the latest 3 bars,default period,if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
{
Alert("Error copying rates/history data - error:",GetLastError(),"!!");
ResetLastError();
return;
}
//--- Copy the new values of our indicators to buffers (arrays) using the handleif(CopyBuffer(KDHandle,0,0,2,K)<0 || CopyBuffer(KDHandle,1,0,2,D)<0)
{
Alert("Error copying Stochastic KD indicator Buffers - error:",GetLastError(),"!!");
ResetLastError();
return;
}
// double Buy_order=0.02; //Buy order double Sell_order=0.02;
//--- we have no errors, so continue//--- Do we have positions opened already?bool Buy_opened=false; // variable to hold the result of Buy opened positionbool Sell_opened=false; // variables to hold the result of Sell opened positionif(PositionSelect(_Symbol)==true) // we have an opened position
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //It is a Buy//Print("here - " , PositionsTotal());Print("1-Buy_opened - Total Buy position is ", PositionGetDouble(POSITION_VOLUME));
TTLBuy_position=PositionGetDouble(POSITION_VOLUME);
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // It is a Sell//Print("here - " , PositionsTotal());Print("1-Sell_opened - Total Sell position is ", PositionGetDouble(POSITION_VOLUME));
TTLSell_position=PositionGetDouble(POSITION_VOLUME);
}
}
// Copy the bar close price for the previous bar prior to the current bar, that is Bar 1
p_close=mrate[1].close; // bar 1 close price/*
1. Check for a long/Buy Setup : k/d cross 20
*///--- Declare bool type variables to hold our Buy Conditionsbool Buy_Condition_1 = (K[0]>=D[0] && K[1]<=D[1]); // k>=D and K1<=D1bool Buy_Condition_2 = (K[1]<=20 && D[0]<=20); // k1<=20 and d<=20//--- Check buy condition if(Buy_Condition_1 && Buy_Condition_2)
{
Print("Buy-1:When buy OK, K0 is:",K[0]," D0 is:",D[0]," K1 is:",K[1]," D1 is:",D[1]);
Imprimo estas variables caché y he dicho antes, es el mismo, en el momento en que se debe enviar la señal, pero K / D valor es incorrecto, pero mira programa es corrent, si se trata de un error en MQL5 hacer?
Imprimo estas variables caché y he dicho antes, es el mismo, en el momento en que se debe enviar la señal, pero K / D valor es incorrecto, pero mira programa es corrent, si se trata de un error en MQL5 hacer?
La pregunta es una pregunta de base, ¿hay un problema en la comprobación de tiempo de la barra en la parte inferior?
//--- Do we have enough bars to work withif(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
// We will use the static Old_Time variable to serve the bar time.// At each OnTick execution we will check the current bar time with the saved one.// If the bar time isn't equal to the saved time, it indicates that we have a new tick.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// copying the last bar time to the element New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true; // if it isn't a first call, the new bar has appearedif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0]; // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}
//--- EA should only check for new trade if we have a new barif(IsNewBar==false)
{
return;
}
//--- Do we have enough bars to work withint Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
He comprobado su otra respuesta, puede ser que usted tiene razón:Sí, la señal en la vela cerrada es mejor, como la señal en la corriente puede ser falsa señal. Aunque hay comerciantes que el comercio en la vela abierta, probablemente con algunos filtros.
Una tendencia alcista se compone de máximos y mínimos más altos. Los operadores pueden utilizar el estocástico para encontrar excelentes entradas de riesgo a recompensa en esos puntos de soporte bajos de la tendencia.
Una tendencia bajista se compone de máximos y mínimos más bajos. Los operadores de Forex pueden utilizar el estocástico para encontrar excelentes entradas de riesgo a recompensa en estos puntos altos de resistencia.
El estocástico se puede utilizar para alertar a un operador de divisas para reforzar las paradas, reducir el tamaño de la posición, o tomar ganancias una vez en una operación de tendencia
Con mucho, los operadores que operan en la dirección de la tendencia diaria predominante tienen un mayor porcentaje de éxito que los que operan en contra de la tendencia. Uno de los mayores atractivos del mercado de divisas es que se caracteriza por sus largas tendencias, que permiten a los operadores ganar cientos de pips si han programado sus entradas con precisión y han utilizado paradas de protección para limitar el riesgo.
Pero, ¿cómo pueden los operadores encontrar dónde entrar con riesgo para obtener la máxima ganancia?
El mantra, "la tendencia es tu amigo hasta que termina", se puede encontrar en muchos libros de trading, pero parece que muchos operadores de Forex no han hecho de la tendencia su amigo y en algunos casos, la tendencia se ha convertido en el enemigo. En lugar de estar en el extremo receptor de esos pips que se ofrecen a los operadores que han entrado correctamente en la tendencia, muchos operadores han estado en el extremo "dador" de la operación perdiendo pips mientras luchan contra la tendencia.
Al igual que la gente ha recurrido a los servicios de citas en línea para conocer a su pareja ideal, los operadores de divisas pueden recurrir a los estocásticos como una forma de hacer que la tendencia vuelva a ser su amiga.
En una tendencia alcista en un gráfico diario, las líneas %K y %D del estocástico que se mueven por debajo de la línea horizontal de referencia "20" y vuelven a estar por encima de la línea 20 indican que la corrección de toma de beneficios está llegando a su fin. El cruce del estocástico hacia arriba también nos indica que los compradores están empezando a entrar de nuevo en el mercado. Además, esto muestra que hay un buen soporte.
Cómo operar la tendencia con estocásticos
La paciencia es el nombre del juego cuando se intenta operar con la tendencia. Entrar en la tendencia demasiado pronto puede exponer a los operadores a grandes caídas. Entrar demasiado tarde reduce la cantidad de beneficios antes de que se complete el giro.
Utilice el indicador estocástico para encontrar esa entrada "Ricitos de Oro", ni demasiado pronto ni demasiado tarde. Una vez que se encuentra una fuerte tendencia alcista, espere a que los estocásticos con los ajustes de 15, 5, 5 se muevan a la región de sobreventa por debajo de la línea de referencia horizontal 20. A continuación, espere a que las líneas %K y %D vuelvan a situarse por encima de la línea 20. Entre en largo con un stop colocado unos pocos pips por debajo del último mínimo. Establezca un límite de al menos el doble del tamaño del stop.
Una vez en una posición de tendencia alcista, los operadores intentarán obtener el máximo beneficio posible. Los operadores suelen tomar beneficios en su posición abierta o hacer un seguimiento de las paradas una vez que el estocástico se mueve en la región de sobrecompra. Es importante tener en cuenta que un par de divisas puede seguir haciendo nuevos máximos aunque el estocástico esté en la región de sobrecompra.
Así que la próxima vez que vea una tendencia y no sepa cómo hacerla su "amiga", ¡deje que el indicador estocástico le presente! Una vez que estas oscilaciones son resaltadas por el estocástico, la colocación de los stops también se vuelve más fácil. Los cruces del estocástico en una tendencia alcista pueden ayudarle a precisar sus entradas para unirse a la tendencia principal.
Este es un muy buen EA para los novatos - para los comerciantes que están aprendiendo indicador estocástico acerca de cómo funciona. El EA está operando en los niveles de sobrecompra/sobreventa del indicador Estocástico con los siguientes parámetros que fueron codificados para estar dentro de este EA:
los parámetros del indicador estocástico que fueron codificados dentro de este EA: 5/3/3
losniveles de sobrecompra/sobreventa que se codificaron en el EA: 80/20
"Advisor analiza las lecturas del indicador Estocástico tiene, la señal para la compra es la intersección de las líneas del indicador principal y de la señal en la zona de sobreventa, una señal para la intersección de las ventas es el indicador principal y las líneas de la señal en la zona de sobrecompra."
El codificador propuso un archivo de conjunto para este EA, por lo que podemos usar este EA en el marco de tiempo EURUSD M15 de acuerdo con este archivo/parámetros de conjunto.
He probado el EA sólo para ver cómo funciona - por favor, encontrar los resultados de backtesting y algunos gráficos con las ideas sobre los niveles de sobrecompra / sobreventa:
Recientemente me he encontrado con un problema relacionado con el estocástico.
Opero con un EA que escribí yo mismo. Una de las condiciones para entrar en una operación de venta es que Stoch Main en la barra 1 < Stoch Signal Bar 1.
Desde el archivo adjunto para un GBPUSD, podemos ver que a las 10:00, Stoch Main Bar 1 > Stoch Signal Bar 1, pero un trdae para vender fue abierto.
Este libro es una colección de ejercicios que cubren todos los temas principales de la teoría moderna de los procesos estocásticos y sus aplicaciones, incluyendo las finanzas, las matemáticas actuariales, la teoría de colas y la teoría del riesgo.
El objetivo de este libro es proporcionar al lector el material teórico y práctico necesario para profundizar en los principales temas de la teoría de los procesos estocásticos y sus campos relacionados.
El libro está dividido en capítulos según los distintos temas. Cada capítulo contiene problemas, pistas y soluciones, así como una parte teórica independiente que proporciona todo el material necesario para resolver los problemas. También se ofrecen referencias a la bibliografía.
Los ejercicios tienen varios niveles de complejidad y varían desde los más sencillos, útiles para los estudiantes que estudian las nociones básicas y la técnica, hasta los más avanzados, que revelan algunos hechos y construcciones teóricas importantes.
Este libro es una de las mayores colecciones de problemas en la teoría de los procesos estocásticos y sus aplicaciones. Los problemas de este libro pueden ser útiles para estudiantes de grado y de posgrado, así como para especialistas en la teoría de los procesos estocásticos.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
en esta imagen, dos flechas deben producir dos señales pero mi ea no puede enviar, ¿por qué?
¡Gracias angevoyageur!
Imprimo estas variables caché y he dicho antes, es el mismo, en el momento en que se debe enviar la señal, pero K / D valor es incorrecto, pero mira programa es corrent, si se trata de un error en MQL5 hacer?
¡Gracias angevoyageur!
Imprimo estas variables caché y he dicho antes, es el mismo, en el momento en que se debe enviar la señal, pero K / D valor es incorrecto, pero mira programa es corrent, si se trata de un error en MQL5 hacer?
La pregunta es una pregunta de base, ¿hay un problema en la comprobación de tiempo de la barra en la parte inferior?
Esta es una pregunta de base, ¿hay algún problema en comprobar la hora del bar?
¿Quién puede ayudarme? ¡Gracias de antemano!
Graciasangevoyageur
He comprobado su otra respuesta, puede ser que usted tiene razón:Sí, la señal en la vela cerrada es mejor, como la señal en la corriente puede ser falsa señal. Aunque hay comerciantes que el comercio en la vela abierta, probablemente con algunos filtros.
¡Voy a tratar de probar!
Foro sobre trading, sistemas de trading automatizados y prueba de estrategias de trading
Indicadores: Oscilador Estocástico
newdigital, 2013.10.09 07:23
Identificar las entradas en la tendencia de Forex con los estocásticos
Con mucho, los operadores que operan en la dirección de la tendencia diaria predominante tienen un mayor porcentaje de éxito que los que operan en contra de la tendencia. Uno de los mayores atractivos del mercado de divisas es que se caracteriza por sus largas tendencias, que permiten a los operadores ganar cientos de pips si han programado sus entradas con precisión y han utilizado paradas de protección para limitar el riesgo.
Pero, ¿cómo pueden los operadores encontrar dónde entrar con riesgo para obtener la máxima ganancia?
El mantra, "la tendencia es tu amigo hasta que termina", se puede encontrar en muchos libros de trading, pero parece que muchos operadores de Forex no han hecho de la tendencia su amigo y en algunos casos, la tendencia se ha convertido en el enemigo. En lugar de estar en el extremo receptor de esos pips que se ofrecen a los operadores que han entrado correctamente en la tendencia, muchos operadores han estado en el extremo "dador" de la operación perdiendo pips mientras luchan contra la tendencia.
Al igual que la gente ha recurrido a los servicios de citas en línea para conocer a su pareja ideal, los operadores de divisas pueden recurrir a los estocásticos como una forma de hacer que la tendencia vuelva a ser su amiga.
En una tendencia alcista en un gráfico diario, las líneas %K y %D del estocástico que se mueven por debajo de la línea horizontal de referencia "20" y vuelven a estar por encima de la línea 20 indican que la corrección de toma de beneficios está llegando a su fin. El cruce del estocástico hacia arriba también nos indica que los compradores están empezando a entrar de nuevo en el mercado. Además, esto muestra que hay un buen soporte.
Cómo operar la tendencia con estocásticos
La paciencia es el nombre del juego cuando se intenta operar con la tendencia. Entrar en la tendencia demasiado pronto puede exponer a los operadores a grandes caídas. Entrar demasiado tarde reduce la cantidad de beneficios antes de que se complete el giro.
Utilice el indicador estocástico para encontrar esa entrada "Ricitos de Oro", ni demasiado pronto ni demasiado tarde. Una vez que se encuentra una fuerte tendencia alcista, espere a que los estocásticos con los ajustes de 15, 5, 5 se muevan a la región de sobreventa por debajo de la línea de referencia horizontal 20. A continuación, espere a que las líneas %K y %D vuelvan a situarse por encima de la línea 20. Entre en largo con un stop colocado unos pocos pips por debajo del último mínimo. Establezca un límite de al menos el doble del tamaño del stop.
Una vez en una posición de tendencia alcista, los operadores intentarán obtener el máximo beneficio posible. Los operadores suelen tomar beneficios en su posición abierta o hacer un seguimiento de las paradas una vez que el estocástico se mueve en la región de sobrecompra. Es importante tener en cuenta que un par de divisas puede seguir haciendo nuevos máximos aunque el estocástico esté en la región de sobrecompra.
Así que la próxima vez que vea una tendencia y no sepa cómo hacerla su "amiga", ¡deje que el indicador estocástico le presente! Una vez que estas oscilaciones son resaltadas por el estocástico, la colocación de los stops también se vuelve más fácil. Los cruces del estocástico en una tendencia alcista pueden ayudarle a precisar sus entradas para unirse a la tendencia principal.
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
Algo interesante
Sergey Golubev, 2016.03.28 14:13
Este es un muy buen EA para los novatos - para los comerciantes que están aprendiendo indicador estocástico acerca de cómo funciona. El EA está operando en los niveles de sobrecompra/sobreventa del indicador Estocástico con los siguientes parámetros que fueron codificados para estar dentro de este EA:
- los parámetros del indicador estocástico que fueron codificados dentro de este EA: 5/3/3
- losniveles de sobrecompra/sobreventa que se codificaron en el EA: 80/20
ea_Stochastic_system - experto para MetaTrader 4El codificador propuso un archivo de conjunto para este EA, por lo que podemos usar este EA en el marco de tiempo EURUSD M15 de acuerdo con este archivo/parámetros de conjunto.
He probado el EA sólo para ver cómo funciona - por favor, encontrar los resultados de backtesting y algunos gráficos con las ideas sobre los niveles de sobrecompra / sobreventa:
Hola
Recientemente me he encontrado con un problema relacionado con el estocástico.
Opero con un EA que escribí yo mismo. Una de las condiciones para entrar en una operación de venta es que Stoch Main en la barra 1 < Stoch Signal Bar 1.
Desde el archivo adjunto para un GBPUSD, podemos ver que a las 10:00, Stoch Main Bar 1 > Stoch Signal Bar 1, pero un trdae para vender fue abierto.
La fórmula que utilicé para el Stochstic es
double StochMain1T30 = iStochastic(NULL,30,10,10,3,MODE_EMA,0,MODE_MAIN,1); // T30 MODE_MAIN
double StochSignal1T30 = iStochastic(NULL,30,10,10,3,MODE_EMA,0,MODE_SIGNAL,1); // T30 MODE_SIGNAL
Una posibilidad que sospecho es que en base a lo anterior StochMain1T30 < StochSignal1T30, pero esto no es lo que vemos en el gráfico.
¿Me pueden ayudar a explicar lo anterior?
He llamado a Oanda, el broker, me han dicho que la posición no la han abierto ellos y que la ha abierto el EA.
Gracias.
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
Algo interesante para leer abril de 2014
Sergey Golubev, 2014.04.14 20:48
Teoría de los procesos estocásticos : con aplicaciones a la matemática financiera y a la teoría del riesgo
Este libro es una colección de ejercicios que cubren todos los temas principales de la teoría moderna de los procesos estocásticos y sus aplicaciones, incluyendo las finanzas, las matemáticas actuariales, la teoría de colas y la teoría del riesgo.
El objetivo de este libro es proporcionar al lector el material teórico y práctico necesario para profundizar en los principales temas de la teoría de los procesos estocásticos y sus campos relacionados.
El libro está dividido en capítulos según los distintos temas. Cada capítulo contiene problemas, pistas y soluciones, así como una parte teórica independiente que proporciona todo el material necesario para resolver los problemas. También se ofrecen referencias a la bibliografía.
Los ejercicios tienen varios niveles de complejidad y varían desde los más sencillos, útiles para los estudiantes que estudian las nociones básicas y la técnica, hasta los más avanzados, que revelan algunos hechos y construcciones teóricas importantes.
Este libro es una de las mayores colecciones de problemas en la teoría de los procesos estocásticos y sus aplicaciones. Los problemas de este libro pueden ser útiles para estudiantes de grado y de posgrado, así como para especialistas en la teoría de los procesos estocásticos.