Stocastico - pagina 6

 
king1898:

in questa immagine, due frecce dovrebbero produrre due segnali ma il mio ea non può inviare, perché?

Dato che non vediamo tutto il tuo codice è difficile dirlo. Puoi stampare i valori dei tuoi buffer per controllare e confrontare.
 
#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]);
 

Grazie angevoyageur!

Stampo queste variabili cache e ho detto prima, è lo stesso, al momento dovrebbe essere inviato il segnale, ma K / D valore è sbagliato, ma guarda programma è corrent, se questo è un bug in MQL5 fare?

 
king1898:

Grazie angevoyageur!

Stampo queste variabili cache e ho detto prima, è lo stesso, al momento dovrebbe essere inviato il segnale, ma K / D valore è sbagliato, ma guarda programma è corrent, se questo è un bug in MQL5 fare?

La domanda è una domanda di base, c'è un problema nel controllo del tempo bar in parte sotto?

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

Questa è una domanda di base, c'è un problema nel controllare il tempo del bar?

Chi può aiutarmi? Grazie in anticipo!
 
king1898:
Chi può aiutarmi? Grazie in anticipo!

Grazieangevoyageur

Ho controllato un'altra tua risposta, forse hai ragione:Sì, il segnale su candela chiusa è meglio, come segnale su corrente può essere falso segnale. Anche se ci sono trader che fanno trading su candele aperte, probabilmente con alcuni filtri.

Proverò a testare!

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Indicatori: Oscillatore stocastico

newdigital, 2013.10.09 07:23

Individuare le entrate di trading di tendenza nel Forex con lo stocastico

  • Un trend rialzista è fatto di massimi e minimi più alti. I trader possono usare lo stocastico per trovare eccellenti entrate di rischio e ricompensa in quei punti di supporto bassi del trend.
  • Una tendenza al ribasso è fatta di alti e bassi più bassi. I commercianti di Forex possono usare la stocastica per trovare un rischio eccellente per ricompensare le entrate in questi punti alti di resistenza.
  • Lo stocastico può essere usato per avvertire un trader di forex di stringere gli stop, ridurre la dimensione della posizione o prendere profitto una volta in un trade di tendenza

Di gran lunga, i trader che operano nella direzione del trend giornaliero predominante hanno una percentuale di successo maggiore di quelli che operano in controtendenza. Una delle maggiori attrazioni del mercato Forex è caratterizzata da lunghe tendenze che offrono ai trader il potenziale di fare centinaia di pips se hanno temporizzato le loro entrate con precisione e usato stop protettivi per limitare il rischio.


Ma come possono i trader trovare dove entrare con un rischio per il massimo guadagno?

Il mantra, "il trend è tuo amico finché non finisce", può essere trovato in molti libri di trading, ma sembra che molti trader forex non abbiano fatto del trend il loro amico e in alcuni casi, il trend è diventato il nemico. Invece di trovarsi a ricevere quei pips concessi ai trader che sono entrati correttamente nel trend, molti trader si sono trovati alla fine del trade a perdere pips mentre combattevano il trend.

Come le persone si sono rivolte ai servizi di dating online per incontrare il loro partner ideale, i trader di forex possono rivolgersi allo stocastico come un modo per rendere il trend di nuovo loro amico.


In una tendenza al rialzo su un grafico giornaliero, le linee stocastiche %K e %D che si muovono al di sotto della linea di riferimento orizzontale "20" e tornano al di sopra della linea 20 indicano che la correzione della presa di profitto sta per finire. L'incrocio stocastico verso l'alto ci dice anche che i compratori stanno iniziando ad entrare di nuovo nel mercato. Inoltre, questo mostra che c'è un buon supporto.

Come fare trading sul trend usando lo stocastico

La pazienza è il nome del gioco quando si cerca di fare trading con il trend. Entrare nel trend troppo presto può esporre i trader a grandi drawdown. Entrare troppo tardi riduce la quantità di profitto prima che lo swing sia completato.

Usa l'indicatore stocastico per trovare quell'entrata "Goldilocks" non troppo presto e non troppo tardi. Una volta trovato un forte trend rialzista, aspetta che lo stocastico con le impostazioni di 15, 5, 5 si muova nella regione di ipervenduto sotto la linea di riferimento orizzontale 20. Poi, aspetta che le linee %K e %D si muovano di nuovo sopra la linea 20. Entrare long con uno stop posizionato qualche pip sotto l'ultimo minimo. Imposta un limite di almeno due volte la dimensione dello stop.


Una volta in una posizione di trend rialzista, i trader cercheranno di ottenere il maggior profitto possibile. I trader di solito prendono profitti sulla loro posizione aperta o seguono gli stop una volta che lo stocastico si muove nella regione di ipercomprato. È importante notare che una coppia di valute forex può continuare a fare nuovi massimi anche se lo stocastico si trova nella regione di ipercomprato.

Quindi la prossima volta che vedi un trend e non sai come renderlo tuo "amico", lascia che sia l'indicatore stocastico a presentarti! Una volta che queste oscillazioni sono evidenziate dallo stocastico, anche il posizionamento degli stop diventa più facile. Gli incroci stocastici in un trend rialzista possono aiutarti a individuare i tuoi ingressi per unirti al trend principale.


 

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

Qualcosa di interessante

Sergey Golubev, 2016.03.28 14:13

Questo è un ottimo EA per i principianti - per i trader che stanno imparando l'indicatore stocastico su come funziona. L'EA fa trading sui livelli di ipercomprato/ipervenduto dell'indicatore stocastico con i seguenti parametri che sono stati codificati per essere all'interno di questo EA:

  • i parametri dell'indicatore stocastico che sono stati codificati all'interno di questo EA: 5/3/3
  • livelli di ipercomprato/ipervenduto da codificare nell'EA: 80/20
ea_Stochastic_system - esperto per MetaTrader 4
  • "Advisor analizza le letture dell'indicatore Stocastico ha, segnale per l'acquisto è l'intersezione delle linee dell'indicatore principale e del segnale nella zona di ipervenduto, un segnale per l'intersezione delle vendite è l'indicatore principale e le linee del segnale nella zona di ipercomprato."

Il codificatore ha proposto il file di set per questo EA in modo da poter utilizzare questo EA su EURUSD M15 timeframe secondo questo file/parametri di set.

Ho testato l'EA solo per vedere come funziona - si prega di trovare i risultati del backtesting e alcuni grafici con le idee sui livelli di ipercomprato/ipervenduto:






 

Ciao

Recentemente ho incontrato un problema riguardante lo stocastico.

Faccio trading con un EA che ho scritto io stesso. Una delle condizioni per entrare in un trade per vendere è che Stoch Main alla barra 1 < Stoch Signal Bar 1.

Dal file allegato per un GBPUSD, possiamo vedere che alle 10:00, Stoch Main Bar 1 > Stoch Signal Bar 1, ma un trdae per vendere era aperto.

La formula che ho usato per lo Stochstic è

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 possibilità che sospetto è che in base al precedente StochMain1T30 < StochSignal1T30, ma questo non è quello che vediamo sul grafico.

Può aiutarmi a spiegare quanto sopra?

Ho chiamato Oanda, il broker, mi hanno detto che la posizione non è stata aperta da loro ed è stata aperta dall'EA.

Grazie.

File:
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Qualcosa di interessante da leggere aprile 2014

Sergey Golubev, 2014.04.14 20:48

Teoria dei processi stocastici: con applicazioni alla matematica finanziaria e alla teoria del rischio



Questo libro è una raccolta di esercizi che copre tutti i principali argomenti della moderna teoria dei processi stocastici e le sue applicazioni, tra cui la finanza, la matematica attuariale, la teoria delle code e la teoria del rischio.

Lo scopo di questo libro è di fornire al lettore il materiale teorico e pratico necessario per una comprensione più profonda dei principali argomenti della teoria dei processi stocastici e dei campi correlati.

Il libro è diviso in capitoli secondo i vari argomenti. Ogni capitolo contiene problemi, suggerimenti, soluzioni, così come una parte teorica autonoma che fornisce tutto il materiale necessario per risolvere i problemi. Vengono anche forniti riferimenti alla letteratura.

Gli esercizi hanno vari livelli di complessità e variano da quelli semplici, utili per gli studenti che studiano le nozioni e la tecnica di base, a quelli molto avanzati che rivelano alcuni importanti fatti e costruzioni teoriche.

Questo libro è una delle più grandi raccolte di problemi nella teoria dei processi stocastici e delle sue applicazioni. I problemi in questo libro possono essere utili per studenti universitari e laureati, così come per gli specialisti nella teoria dei processi stocastici.


Motivazione: