Stochastique - page 6

 
king1898:

dans cette image, deux flèches devraient produire deux signaux mais mon ea ne peut pas les envoyer, pourquoi ?

Comme nous ne voyons pas tout votre code, il est difficile de le dire. Vous pouvez imprimer les valeurs de vos buffers pour vérifier et comparer.
 
#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]);
 

Merci angevoyageur!

J'imprime ces variables cache et je l'ai dit avant, est le même, au moment où il devrait être envoyé le signal, mais K / D valeur est erronée, mais regardez programme il est corrent, si c'est un bug dans MQL5 faire ?

 
king1898:

Merci angevoyageur!

J'imprime ces variables cache et je l'ai dit avant, est le même, au moment où il devrait être envoyé le signal, mais K / D valeur est erronée, mais regardez programme il est corrent, si c'est un bug dans MQL5 faire ?

La question est une question de base, y at-il un problème dans la vérification du temps de barre dans la partie ci-dessous ?

//--- 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:

C'est une question de base, y a-t-il un problème pour vérifier l'heure du bar ?

Qui peut m'aider ? Merci d'avance !
 
king1898:
Qui peut m'aider ? Merci d'avance !

Merciangevoyageur

J'ai vérifié votre autre réponse, peut-être avez-vous raison :Oui, le signal sur une bougie fermée est meilleur, car le signal sur le courant peut être un faux signal. Bien qu'il y ait des traders qui tradent sur des bougies ouvertes, probablement avec certains filtres.

Je vais essayer de tester !

 

Forum sur le trading, les systèmes de trading automatisés et le test des stratégies de trading

Indicateurs : Oscillateur stochastique

newdigital, 2013.10.09 07:23

Déterminer les entrées de tendance avec les stochastiques

  • Une tendance haussière est constituée de hauts plus élevés et de bas plus élevés. Les traders peuvent utiliser le stochastique pour trouver d'excellentes entrées de risque à récompense à ces points de soutien bas dans la tendance.
  • Une tendance baissière se compose de hauts et de bas plus bas. Les traders peuvent utiliser les stochastiques pour trouver d'excellentes entrées à risque et à récompense à ces points de résistance élevés.
  • Les stochastiques peuvent être utilisés pour alerter un trader forex afin qu'il resserre ses stops, réduise la taille de sa position ou prenne ses bénéfices une fois dans une tendance.

De loin, les traders qui négocient dans la direction de la tendance quotidienne prédominante ont un pourcentage de réussite plus élevé que ceux qui négocient à contre-tendance. L'un des plus grands attraits du marché Forex est qu'il est caractérisé par de longues tendances qui offrent aux traders le potentiel de gagner des centaines de pips s'ils ont chronométré leurs entrées avec précision et utilisé des stops de protection pour limiter le risque.


Mais comment les traders peuvent-ils trouver où entrer avec un risque pour un gain maximum ?

Le mantra "la tendance est votre amie jusqu'à ce qu'elle se termine" se trouve dans de nombreux livres de trading, mais il semble que de nombreux traders forex n'ont pas fait de la tendance leur amie et dans certains cas, la tendance est devenue leur ennemie. Au lieu de recevoir les pips offerts aux traders qui sont entrés correctement dans la tendance, de nombreux traders se sont retrouvés à l'extrémité "donneuse" du trade, perdant des pips tout en combattant la tendance.

Tout comme les gens se sont tournés vers les services de rencontres en ligne pour rencontrer leur partenaire idéal, les traders forex peuvent se tourner vers les stochastiques pour faire en sorte que la tendance redevienne leur amie.


Dans une tendance haussière sur un graphique journalier, les lignes stochastiques %K et %D se déplaçant sous la ligne de référence horizontale '20' et revenant au-dessus de la ligne 20 indiquent que la correction de prise de bénéfices touche à sa fin. Le croisement à la hausse de la stochastique nous indique également que les acheteurs recommencent à entrer sur le marché. En outre, cela montre qu'il existe un bon support.

Comment négocier la tendance à l'aide des stochastiques ?

La patience est le nom du jeu lorsque vous essayez de négocier avec la tendance. Entrer dans la tendance trop tôt peut exposer les traders à d'importants drawdowns. Entrer trop tard dans la tendance réduit le montant du profit avant que le swing ne soit terminé.

Utilisez l'indicateur stochastique pour trouver cette entrée "Boucle d'or", ni trop tôt ni trop tard. Une fois qu'une forte tendance à la hausse est trouvée, attendez que les stochastiques avec les paramètres 15, 5, 5 se déplacent dans la région de survente sous la ligne de référence horizontale 20. Ensuite, attendez que les lignes %K et %D repassent au-dessus de la ligne 20. Entrez en position longue avec un stop placé quelques pips en dessous du dernier bas. Fixez une limite d'au moins deux fois la taille du stop.


Une fois dans une position de tendance haussière, les traders tenteront d'extraire le plus de bénéfices possible. Les traders prennent généralement des profits sur leur position ouverte ou des stops de suivi une fois que les stochastiques passent dans la région de surachat. Il est important de noter qu'une paire de devises forex peut continuer à atteindre de nouveaux sommets même si la stochastique se trouve dans la région de surachat.

Alors la prochaine fois que vous voyez une tendance et que vous ne savez pas comment en faire votre "ami", laissez l'indicateur stochastique vous initier ! Une fois que ces oscillations sont mises en évidence par la stochastique, le placement des stops devient également plus facile. Les croisements stochastiques dans une tendance haussière peuvent vous aider à repérer vos entrées pour rejoindre la tendance majeure.


 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Quelque chose d'intéressant

Sergey Golubev, 2016.03.28 14:13

C'est un très bon EA pour les débutants - pour les traders qui apprennent le fonctionnement de l'indicateur stochastique. L'EA négocie sur les niveaux de surachat/survente de l'indicateur stochastique avec les paramètres suivants qui ont été codés pour être dans cet EA :

  • les paramètres de l'indicateur stochastique qui ont été codés à l'intérieur de cet EA: 5/3/3.
  • lesniveaux de surachat/survente qui ont été codés dans l'EA: 80/20
ea_Stochastic_system - expert pour MetaTrader 4
  • "Le conseiller analyse les lectures de l'indicateur Stochastique a, le signal pour l'achat est l'intersection des lignes de l'indicateur principal et de signal dans la zone de survente, un signal pour l'intersection des ventes est l'indicateur principal et les lignes de signal dans la zone de surachat."

Le codeur a proposé un fichier d'ensemble pour cet EA afin que nous puissions utiliser cet EA sur l'EURUSD M15 en fonction de ce fichier d'ensemble/paramètres.

J'ai backtesté l'EA juste pour voir comment il fonctionne - veuillez trouver les résultats du backtesting et quelques graphiques avec les idées sur les niveaux de surachat/survente :






 

Bonjour

J'ai récemment rencontré un problème concernant la stochastique.

Je trade avec un EA que j'ai écrit moi-même. Une des conditions pour entrer un trade pour la vente est que la Stoch Main à la barre 1 < Stoch Signal Bar 1.

Dans le fichier joint pour un GBPUSD, on peut voir qu'à 10:00, la Stoch Main Bar 1 > Stoch Signal Bar 1, mais qu'un trdae pour la vente était ouvert.

La formule que j'ai utilisée pour Stochstic est la suivante

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

Une possibilité que je soupçonne est que sur la base de ce qui précède StochMain1T30 < StochSignal1T30, mais ce n'est pas ce que nous voyons sur le graphique.

Pouvez-vous m'aider à expliquer ce qui précède ?

J'ai appelé Oanda, le courtier, ils m'ont dit que la position n'a pas été ouverte par eux et qu'elle a été ouverte par l'EA.

Merci.

Dossiers :
 

Forum sur le trading, les systèmes de trading automatisés et le test des stratégies de trading.

Quelque chose d'intéressant à lire en avril 2014

Sergey Golubev, 2014.04.14 20:48

Théorie des processus stochastiques : avec des applications aux mathématiques financières et à la théorie du risque.



Ce livre est un recueil d'exercices couvrant tous les principaux sujets de la théorie moderne des processus stochastiques et de ses applications, notamment en finance, en mathématiques actuarielles, en théorie des files d'attente et en théorie du risque.

L'objectif de ce livre est de fournir au lecteur le matériel théorique et pratique nécessaire à une compréhension approfondie des principaux sujets de la théorie des processus stochastiques et de ses domaines connexes.

Le livre est divisé en chapitres selon les différents thèmes abordés. Chaque chapitre contient des problèmes, des conseils, des solutions, ainsi qu'une partie théorique indépendante qui fournit tout le matériel nécessaire à la résolution des problèmes. Des références à la littérature sont également données.

Les exercices ont différents niveaux de complexité et varient de simples, utiles pour les étudiants qui étudient les notions et techniques de base, à des exercices très avancés qui révèlent certains faits théoriques et constructions importants.

Ce livre est l'une des plus grandes collections de problèmes de la théorie des processus stochastiques et de ses applications. Les problèmes de ce livre peuvent être utiles aux étudiants de premier et deuxième cycles, ainsi qu'aux spécialistes de la théorie des processus stochastiques.