Estocástico - página 6

 
king1898:

nesta foto, duas setas devem produzir dois sinais, mas minha ea não pode enviar, por quê?

Como não vemos todo o seu código, é difícil dizer. Você pode imprimir seus buffers de valores para verificar e 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]);
 

Graças ao angevoyageur!

Eu imprimo o cache destas variáveis e eu disse antes, é o mesmo, no momento em que deveria ser enviado o sinal, mas o valor K / D está errado, mas olha programa é corrente, se este é um bug na MQL5 fazer?

 
king1898:

Graças ao angevoyageur!

Eu imprimo o cache destas variáveis e eu disse antes, é o mesmo, no momento em que deveria ser enviado o sinal, mas o valor K / D está errado, mas olha programa é corrente, se este é um bug na MQL5 fazer?

A pergunta é uma pergunta básica, há algum problema em verificar o tempo de barra na parte abaixo?

//--- 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 é uma pergunta básica, há algum problema na verificação do tempo de bar?

Quem pode me ajudar? Obrigado de antemão!
 
king1898:
Quem pode me ajudar? Obrigado de antemão!

Obrigadoangevoyageur

eu verifiquei sua outra resposta, talvez você esteja certo:Sim, sinal em vela fechada é melhor, pois sinal em corrente pode ser sinal falso. Embora haja comerciantes que negociam em velas abertas, provavelmente com alguns filtros.

vou tentar testar!

 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Indicadores: Oscilador estocástico

newdigital, 2013.10.09 07:23

Identificando Entradas de Comércio de Tendências de Forex com Estocásticos

  • Uma tendência de alta é composta por altos e baixos mais altos. Os comerciantes podem usar os estocásticos para encontrar um excelente risco para recompensar as entradas naqueles pontos baixos de apoio na tendência.
  • Uma tendência de baixa é composta de altas mais baixas e baixas mais baixas. Os negociadores Forex podem usar os Estocásticos para encontrar um excelente risco para recompensar as entradas nestes pontos de resistência altos.
  • Os estocásticos podem ser usados para alertar um negociador forex para apertar paradas, reduzir o tamanho da posição ou ter lucro uma vez em uma negociação de tendência.

De longe, os comerciantes que comercializam na direção da tendência diária predominante têm uma porcentagem maior de sucesso do que aqueles que comercializam a tendência contrária. Uma das maiores atrações do mercado Forex é caracterizada por longas tendências que oferecem aos negociadores o potencial de fazer centenas de pips se eles cronometraram suas entradas com precisão e usaram paradas protetoras para limitar o risco.


Mas como os comerciantes podem encontrar onde entrar com um risco para obter o máximo de lucro?

O mantra, "a tendência é seu amigo até o fim", pode ser encontrado em muitos livros de negociação, mas parece que muitos comerciantes forex não fizeram da tendência seu amigo e, em alguns casos, a tendência se tornou o inimigo. Ao invés de estar no lado receptor daqueles pips oferecidos aos comerciantes que entraram corretamente na tendência, muitos comerciantes estiveram no lado "doador" do comércio perdendo pips enquanto lutavam contra a tendência.

Como as pessoas se voltaram para os serviços de encontros on-line para encontrar seu par ideal, os comerciantes forex podem recorrer aos estocásticos como uma forma de fazer da tendência o seu amigo novamente.


Em uma tendência ascendente em um gráfico diário, as linhas estocásticas %K e %D movendo-se abaixo da linha de referência horizontal '20' e voltando acima da linha 20 indicam que a correção de tomada de lucro está chegando ao fim. O cruzamento estocástico para cima também nos diz que os compradores estão começando a entrar no mercado novamente. Além disso, isto mostra que há um bom suporte.

Como negociar a tendência usando os estocásticos

Paciência é o nome do jogo quando se tenta negociar com a tendência. Entrar na tendência muito cedo pode expor os comerciantes a grandes drawdowns. Entrar tarde demais reduz a quantidade de lucro antes que o swing seja completado.

Use o indicador estocástico para descobrir que a entrada "Goldilocks" de não muito cedo e não muito tarde. Uma vez encontrada uma forte tendência de alta, aguarde que os estocásticos com as configurações de 15, 5, 5 se movam para a região sobre-vendida abaixo da linha de referência horizontal de 20. Em seguida, aguarde que as linhas %K e %D se movam para trás acima das 20 linhas. Entrar longo com uma parada colocada alguns pips abaixo da última baixa. Defina um limite para pelo menos o dobro do tamanho da parada.


Uma vez em uma posição de tendência de alta, os comerciantes tentarão espremer o máximo de lucro possível. Os comerciantes geralmente obtêm lucros em sua posição aberta ou o rastro pára quando os estocásticos se movem para a região de sobre-compra. É importante notar que um par de moedas estrangeiras pode continuar a fazer novos máximos, mesmo que os estocásticos estejam na região de sobre-compra.

Portanto, da próxima vez que você vir uma tendência e não souber como fazer dela seu "amigo", deixe que o indicador dos estocásticos lhe apresente! Uma vez que estas oscilações são destacadas pelos estochásticos, a parada de colocação também se torna mais fácil. Os cruzamentos estocásticos em uma tendência ascendente podem ajudá-lo a identificar suas entradas para se juntar à tendência principal.


 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Algo interessante

Sergey Golubev, 2016.03.28 14:13

Isto é muito bom EA para iniciantes - para os comerciantes que estão aprendendo o indicador estocástico sobre como ele funciona. O EA está negociando nos níveis de sobre-compra/sobre-vendido do indicador estocástico com os seguintes parâmetros que foram codificados para estar dentro deste EA:

  • os parâmetros do indicador estocástico que foram codificados dentro deste EA: 5/3/3
  • níveis sobre-comprados/sobre-vendidos a serem codificados na EA: 80/20
ea_Stochastic_system - especialista para MetaTrader 4
  • "Advisor analisa as leituras do indicador Stochastic tem, sinal para a compra é a interseção das linhas principais e de sinal indicador na zona de sobre-venda, um sinal para a interseção das vendas é o indicador principal e linhas de sinal na zona de sobre-compra".

O codificador propôs um arquivo de conjunto para este EA, de modo que podemos usar este EA em EURUSD M15 de acordo com este arquivo/parâmetros de conjunto.

Eu testei o EA apenas para ver como ele funciona - por favor, encontre os resultados dos testes e alguns gráficos com as idéias sobre os níveis de overbought/sobrebold:






 

Hi

Recentemente encontrei um problema com relação ao estocástico.

Eu mesmo escrevi para uma EA. Uma das condições para entrar em um comércio para venda é que Stoch Main no bar 1 < Stoch Signal Bar 1.

Do arquivo anexo para um GBPUSD, podemos ver que às 10:00, Stoch Main Bar 1 > Stoch Signal Bar 1, mas um trdae para venda estava aberto.

A fórmula que usei para Stochstic é

duplo StochMain1T30 = iStochastic(NULL,30,10,10,3,MODE_EMA,0,MODE_MAIN,1); // T30 MODE_MAIN

duplo StochSignal1T30 = iStochastic(NULL,30,10,10,3,MODE_EMA,0,MODE_SIGNAL,1); // T30 MODE_SIGNAL

Uma possibilidade que suspeito é que, com base no StochMain1T30 < StochSignal1T30 acima, mas isto não é o que vemos no gráfico.

Pode me ajudar a explicar o acima?

Eu liguei para Oanda, o corretor, eles me disseram que a posição não foi aberta por eles e foi aberta pela EA.

Obrigado.

Arquivos anexados:
 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Algo interessante para ler em abril de 2014

Sergey Golubev, 2014.04.14 20:48

Teoria dos Processos Estocásticos : Com Aplicações à Matemática Financeira e Teoria do Risco



Este livro é uma coleção de exercícios que cobrem todos os principais tópicos da moderna teoria dos processos estocásticos e suas aplicações, incluindo finanças, matemática atuarial, teoria das filas de espera e teoria dos riscos.

O objetivo deste livro é fornecer ao leitor o material teórico e prático necessário para o entendimento mais profundo dos principais tópicos da teoria dos processos estocásticos e seus campos relacionados.

O livro é dividido em capítulos de acordo com os vários tópicos. Cada capítulo contém problemas, dicas, soluções, assim como uma parte teórica autônoma que dá todo o material necessário para a solução dos problemas. Referências à literatura também são dadas.

Os exercícios têm vários níveis de complexidade e variam de simples, úteis para os estudantes que estudam noções básicas e técnicas, a exercícios muito avançados que revelam alguns fatos teóricos e construções importantes.

Este livro é uma das maiores coleções de problemas na teoria dos processos estocásticos e suas aplicações. Os problemas deste livro podem ser úteis para estudantes de graduação e pós-graduação, bem como para especialistas na teoria dos processos estocásticos.


Razão: