Stochastisch - Seite 6

 
king1898:

in diesem Bild, zwei Pfeile sollten zwei Signale erzeugen, aber mein Ea kann nicht senden, warum?

Da wir nicht sehen, alle Ihre code es ist schwer zu sagen. Sie können Ihre Pufferwerte drucken, um zu überprüfen und zu vergleichen.
 
#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]);
 

Danke angevoyageur!

Ich drucke diese Variablen Cache und ich sagte vor, ist das gleiche, zu der Zeit sollte es das Signal gesendet werden, aber K / D Wert ist falsch, aber schauen Programm ist es corrent, ob dies ein Fehler in MQL5 tun?

 
king1898:

Danke angevoyageur!

Ich drucke diese Variablen Cache und ich sagte vor, ist das gleiche, zu der Zeit sollte es das Signal gesendet werden, aber K / D Wert ist falsch, aber schauen Programm ist es corrent, ob dies ein Fehler in MQL5 tun?

Die Frage ist eine grundlegende Frage, gibt es ein Problem bei der Überprüfung bar Zeit in unten Teil?

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

Dies ist eine grundsätzliche Frage: Gibt es ein Problem bei der Überprüfung der Taktzeit?

Wer kann mir helfen? Vielen Dank im Voraus!
 
king1898:
Wer kann mir helfen? Vielen Dank im Voraus!

Dankeangevoyageur

Ich habe mir Ihre andere Antwort angesehen, vielleicht haben Sie Recht:Ja, ein Signal bei geschlossener Kerze ist besser, da ein Signal bei der aktuellen Kerze ein falsches Signal sein kann. Allerdings gibt es auch Trader, die mit offenen Kerzen handeln, wahrscheinlich mit einigen Filtern.

Ich werde versuchen, das zu testen!

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Indikatoren: Stochastischer Oszillator

newdigital, 2013.10.09 07:23

Forex-Trendhandelseinstieg mit Stochastik erkennen

  • Ein Aufwärtstrend setzt sich aus höheren Hochs und höheren Tiefs zusammen. Händler können die Stochastik nutzen, um an diesen niedrigen Unterstützungspunkten im Trend hervorragende Einstiegsmöglichkeiten zu finden.
  • Ein Abwärtstrend setzt sich aus niedrigeren Hochs und niedrigeren Tiefs zusammen. Devisenhändler können die Stochastik nutzen, um an diesen Widerstandshochs hervorragende Einstiegsmöglichkeiten mit hohem Risiko zu finden.
  • Stochastics kann verwendet werden, um einen Devisenhändler zu warnen, entweder die Stopps zu verschärfen, die Positionsgröße zu reduzieren oder den Gewinn mitzunehmen, sobald er in einem Trend handelt.

Händler, die in Richtung des vorherrschenden Tagestrends handeln, haben bei weitem einen höheren Prozentsatz an Erfolg als diejenigen, die gegen den Trend handeln. Eine der größten Attraktionen des Forex-Marktes ist, dass er durch lange Trends gekennzeichnet ist, die Händlern das Potenzial bieten, Hunderte von Pips zu verdienen, wenn sie ihre Einstiege präzise getimt und schützende Stopps zur Risikobegrenzung eingesetzt haben.


Aber wie können Händler herausfinden, wo sie mit einem Risiko für maximalen Gewinn einsteigen sollten?

Das Mantra "Der Trend ist dein Freund, bis er endet" ist in vielen Handelsbüchern zu finden, aber es scheint, dass viele Devisenhändler den Trend nicht zu ihrem Freund gemacht haben und in einigen Fällen ist der Trend zum Feind geworden. Anstatt am empfangenden Ende der Pips zu stehen, die sich Händler leisten, die richtig in den Trend eingestiegen sind, waren viele Händler am "gebenden" Ende des Handels und verloren Pips, während sie den Trend bekämpften.

So wie die Menschen sich an Online-Partnervermittlungen wenden, um ihren idealen Partner zu finden, können sich Devisenhändler an die Stochastik wenden, um den Trend wieder zu ihrem Freund zu machen.


Wenn sich die Stochastik-Linien %K und %D in einem Aufwärtstrend auf einem Tages-Chart unter die horizontale 20er-Referenzlinie bewegen und wieder über die 20er-Linie steigen, deutet dies darauf hin, dass die Gewinnmitnahme-Korrektur zu Ende geht. Das Überschreiten der Stochastik-Linie nach oben deutet ebenfalls darauf hin, dass die Käufer wieder in den Markt einsteigen. Darüber hinaus zeigt dies, dass es eine gute Unterstützung gibt.

Wie man mit Hilfe der Stochastik auf den Trend reagiert

Geduld ist das A und O beim Handel mit dem Trend. Wenn man zu früh in den Trend einsteigt, kann der Händler große Verluste erleiden. Wenn man zu spät einsteigt, verringert sich der Gewinn, bevor der Swing abgeschlossen ist.

Verwenden Sie den Stochastik-Indikator, um den "Goldlöckchen"-Einstieg zu finden, der nicht zu früh und nicht zu spät erfolgt. Sobald ein starker Aufwärtstrend gefunden ist, warten Sie darauf, dass die Stochastik mit den Einstellungen 15, 5, 5 in den überverkauften Bereich unterhalb der horizontalen Referenzlinie von 20 eintritt. Warten Sie dann, bis die Linien %K und %D wieder über die 20er-Linie steigen. Gehen Sie mit einem Stopp, der einige Punkte unter dem letzten Tiefstand liegt, in den Kauf über. Setzen Sie ein Limit von mindestens der doppelten Größe des Stopps.


Sobald sie sich in einem Aufwärtstrend befinden, werden Händler versuchen, so viel Gewinn wie möglich mitzunehmen. Händler nehmen in der Regel Gewinne aus ihrer offenen Position mit oder ziehen Stopps nach, sobald die Stochastik in den überkauften Bereich eintritt. Es ist wichtig zu beachten, dass ein Devisenpaar weiterhin neue Höchststände erreichen kann, auch wenn sich der Stochastikwert im überkauften Bereich befindet.

Wenn Sie also das nächste Mal einen Trend sehen und nicht wissen, wie Sie ihn zu Ihrem "Freund" machen können, lassen Sie sich vom Stochastik-Indikator einweisen! Sobald diese Schwankungen von der Stochastik hervorgehoben werden, wird auch die Platzierung von Stopps einfacher. Stochastik-Crossovers in einem Aufwärtstrend können Ihnen helfen, Ihre Einstiege in den Haupttrend genau zu bestimmen.


 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Etwas Interessantes

Sergey Golubev, 2016.03.28 14:13

Dies ist ein sehr guter EA für Neulinge - für die Händler, die lernen, Stochastik-Indikator über, wie es funktioniert. EA ist der Handel auf überkauften/überverkauften Ebenen der Stochastik-Indikator mit den folgenden Parametern, die codiert wurden, um in diesem EA sein:

  • die Parameter des Stochastik-Indikators, die in diesem EA kodiert wurden: 5/3/3
  • überkaufte/überverkaufte Niveaus, die im EA kodiert werden: 80/20
ea_Stochastic_system - Experte für MetaTrader 4
  • "Advisor analysiert die Messwerte des Indikators Stochastic hat, Signal für den Kauf ist der Schnittpunkt der Haupt-und Signal-Indikator-Linien in der überverkauften Zone, ein Signal für den Schnittpunkt der Verkäufe ist der Haupt-Indikator und Signal-Linien in der überkauften Zone."

Der Coder hat eine Datei für diesen EA vorgeschlagen, so dass wir diesen EA auf dem EURUSD M15 Zeitrahmen gemäß dieser Datei/Parameter verwenden können.

Ich habe den EA im Backtesting getestet, um zu sehen, wie er funktioniert - hier finden Sie die Backtesting-Ergebnisse und einige Charts mit den Ideen zu den überkauften/überverkauften Levels:






 

Hallo

ich bin kürzlich auf ein Problem mit der Stochastik gestoßen.

Ich handle mit einem EA, den ich selbst geschrieben habe. Eine der Bedingungen für die Eingabe eines Handels für den Verkauf ist, dass Stoch Main bei bar 1 < Stoch Signal Bar 1.

Aus der beigefügten Datei für einen GBPUSD, können wir sehen, dass um 10:00, Stoch Main Bar 1 > Stoch Signal Bar 1, aber ein Handel für den Verkauf war offen.

Die Formel, die ich für Stochstic verwendet habe, lautet

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

Eine Möglichkeit, die ich vermute, ist, dass auf der Grundlage der oben genannten StochMain1T30 < StochSignal1T30, aber das ist nicht das, was wir auf dem Chart zu sehen.

Können Sie mir helfen, den obigen Sachverhalt zu erklären?

Ich habe den Broker Oanda angerufen, der mir mitteilte, dass die Position nicht von ihm, sondern vom EA geöffnet wurde.

Ich danke Ihnen.

Dateien:
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Etwas Interessantes zu lesen April 2014

Sergey Golubev, 2014.04.14 20:48

Theorie der stochastischen Prozesse: Mit Anwendungen auf Finanzmathematik und Risikotheorie



Dieses Buch ist eine Sammlung von Übungen, die alle wichtigen Themen der modernen Theorie stochastischer Prozesse und ihrer Anwendungen abdecken, einschließlich Finanz- und Versicherungsmathematik, Warteschlangentheorie und Risikotheorie.

Ziel dieses Buches ist es, dem Leser das theoretische und praktische Material an die Hand zu geben, das für ein tieferes Verständnis der Hauptthemen der Theorie stochastischer Prozesse und der damit verbundenen Gebiete notwendig ist.

Das Buch ist entsprechend den verschiedenen Themen in Kapitel unterteilt. Jedes Kapitel enthält Probleme, Hinweise, Lösungen sowie einen in sich geschlossenen theoretischen Teil, der das gesamte für die Lösung der Probleme erforderliche Material enthält. Literaturhinweise sind ebenfalls enthalten.

Die Übungen sind unterschiedlich komplex und reichen von einfachen Aufgaben, die für das Erlernen grundlegender Begriffe und Techniken nützlich sind, bis hin zu sehr fortgeschrittenen Aufgaben, die wichtige theoretische Fakten und Konstruktionen aufzeigen.

Dieses Buch ist eine der größten Sammlungen von Problemen in der Theorie der stochastischen Prozesse und ihrer Anwendungen. Die Probleme in diesem Buch können sowohl für Studenten im Grund- und Hauptstudium als auch für Spezialisten in der Theorie stochastischer Prozesse nützlich sein.