Estocástico - página 6

 
king1898:

en esta imagen, dos flechas deben producir dos señales pero mi ea no puede enviar, ¿por qué?

Como no vemos todo su código es difícil de decir. Puedes imprimir los valores de tus buffers para comprobar y comparar.
 
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//-------------------------------------------------------------------


//-------------------------------------------------------------------
#include <Trade\Trade.mqh>
//--- input parameters
input int      StopLoss=-100;      // Stop Loss$
//input int      TakeProfit=100;   // Take Profit
//input int      KD_Period=9;     // KD Period
input int      K_Period=9;     // K Period
input int      D_Period=3;     // D Period
//input int      MA_Period=8;      // Moving Average Period
input int      EA_Magic=12345;   // EA Magic Number
//input double   Adx_Min=22.0;     // Minimum ADX Value
//---
//---input double Lot=0.01;   // Lots to Trade
input double MaxPosition=3.00;  //Max position
input double P1=0.12;    //P1 position1
input double P2=0.32;
input double P3=0.77;
input double P4=1.92;
input double P5=2.85;
input double P6=3.57;
//
input double PF1=10;     //PF1 profit1
input double PF2=50;
input double PF3=100;
input double PF4=500;
input double PF5=800;
input double PF6=1500;

//

//--- Other parameters
int KDHandle; // handle for our stochastic indicator
//int maHandle;  // handle for our Moving Average indicator
double 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 bars
double p_close; // Variable to store the close value of a bar
int STP, TKP;   // To be used for Stop Loss & Take Profit values
double 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 times
int Selltimes; // to be used for sell times
bool special_close_p=false;
double special_profit=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 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 Handle
   if(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                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Release our indicator handles
   IndicatorRelease(KDHandle);
//   IndicatorRelease(maHandle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Do we have enough bars to work with
   if(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.

   static datetime 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 appeared
         if(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 bar
   if(IsNewBar==false)
     {
      return;
     }

//--- Do we have enough bars to work with
   int 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 trade
   MqlTick latest_price;      // To be used for getting recent/latest price quotes
   MqlTradeRequest mrequest;  // To be used for sending our trade requests
   MqlTradeResult mresult;    // To be used to get our trade results
   MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar
   ZeroMemory(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 arrays
   ArraySetAsSeries(mrate,true);
// the KD Kvalues array
   ArraySetAsSeries(K,true);
// the KD Dvalues array
   ArraySetAsSeries(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 Structure
   if(!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 handle
   if(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 position
   bool Sell_opened=false; // variables to hold the result of Sell opened position

   if(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);
        }
      else if(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 Conditions
   bool Buy_Condition_1 = (K[0]>=D[0] && K[1]<=D[1]); // k>=D and K1<=D1
   bool 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]);
 

¡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?

 
king1898:

¡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?

//--- Do we have enough bars to work with
   if(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.

   static datetime 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 appeared
         if(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 bar
   if(IsNewBar==false)
     {
      return;
     }

//--- Do we have enough bars to work with
   int 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;
     }
 
king1898:

Esta es una pregunta de base, ¿hay algún problema en comprobar la hora del bar?

¿Quién puede ayudarme? ¡Gracias de antemano!
 
king1898:
¿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

  • 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.


 

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 4
  • "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:






 

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.

Archivos adjuntos:
 

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.