Expert Advisors: Polish Layer

 

Polish Layer:

Dieser EA wurde basierend auf den folgenden Indikatoren gebaut: RSI, WPR, Stochastic, Moving Average, deMarker

Polish Layer tester

Autor: Vladimir Karputov

Polish Layer
Polish Layer
  • Stimmen: 15
  • 2017.03.20
  • Vladimir Karputov
  • www.mql5.com
Dieser EA wurde basierend auf den folgenden Indikatoren gebaut: RSI, WPR, Stochastic, Moving Average, deMarker
 

Hallo Vladimir,

Ich finde immer Ihre Codes.Dies ist eine weitere gute EA.Ich frage Sie : Ich brauche einen Trailing Stop.Bitte, bauen Sie es in Code.


Vielen Dank!

 

Hallo Vladimir,

ich habe den von dir geschriebenen Polish Layer Code für meine Zwecke abgeändert. Ich möchte die Ergebnisse mehrerer Indikatoren kombinieren und diese aus den Ergebnissen herausziehen. Wie kann ich das machen?

 
csezo2 :

Hallo Vladimir,

ich habe den von dir geschriebenen Polish Layer Code für meine Zwecke abgeändert. Ich möchte die Ergebnisse mehrerer Indikatoren kombinieren und diese aus den Ergebnissen herausziehen. Wie kann ich das machen?

Beschreibe detailliert, was du gemacht hast. Zeigen Sie den Code. Sagen Sie mir, was noch getan werden muss.

 
Wie kann ich den Code richtig einfügen? Oder einfach kopieren und einfügen? Ich kann die Funktion Alt+S sehen, aber ich weiß nicht, wie sie funktioniert.
 
csezo2:
Wie kann ich den Code richtig einfügen? Oder einfach kopieren und einfügen? Ich sehe zwar die Funktion Alt+S, aber ich weiß nicht, wie sie funktioniert.
 
 
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
#include <Trade\AccountInfo.mqh>
CPositionInfo  m_position;                   // Handelsposition Objekt
CTrade         m_trade;                      // Handelsobjekt
CSymbolInfo    m_symbol;                     // Symbol-Info-Objekt
CAccountInfo   m_account;                    // Kontoinfo-Verpackung
//--- Eingabeparameter
input ENUM_TIMEFRAMES      per_kis    = PERIOD_M15; 
input ENUM_TIMEFRAMES      per_nagy   = PERIOD_H1; 
input int                  kis_trend_gyors_per= 99;
input int                  kis_trend_lassú_per= 99;
input int                  nagy_trend_gyors_per= 99;
input int                  nagy_trend_lassú_per= 99;
input ENUM_MA_METHOD       MA_method_kis   = MODE_SMA;                    
input ENUM_MA_METHOD       MA_method_nagy    = MODE_SMA;                    
input int                  ST_indikátor_periódus     = 14;    
input int                  RSI_indikátor_periódus     = 14;
input int                  STh_alsó    = 20;  
input int                  ST_lassuló    = 3; 
input ushort               TakeProfit=11111;
input ushort               StopLoss=90;
input ushort               TrailingStop=20;
input double               Lots=0.1;

ulong          m_magic=1;              // magische Zahl
ulong          m_slippage=30;                // Schlupf

int            handle_iMA_kis_trend_gyors;               // Variable zum Speichern des Handles des iMA-Indikators 
int            handle_iMA_kis_trend_lassú;    
int            handle_iMA_nagy_trend_gyors;
int            handle_iMA_nagy_trend_lassú;
int            handle_iRSI;
int            handle_iStochastic_M15;       // Variable zum Speichern des Handles des iStochastic-Indikators 

ENUM_ACCOUNT_MARGIN_MODE m_margin_mode;
double         m_adjusted_point;             // Punktwert angepasst für 3 oder 5 Punkte
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
  {
   SetMarginMode();
   if(!IsHedging())
     {
      Print("Hedging only!");
      return(INIT_FAILED);
     }
     if(TrailingStop>=TakeProfit)
     {
      Print("Error! TrailingStop>=TakeProfit!");
      return(INIT_PARAMETERS_INCORRECT);
     }
//---
   m_symbol.Name(Symbol());                  // setzt den Symbolnamen
   if(!RefreshRates())
     {
      Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
            ", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
      return(INIT_FAILED);
     }
   m_symbol.Refresh();
//---
   m_trade.SetExpertMagicNumber(m_magic);
//---
   m_trade.SetDeviationInPoints(m_slippage);
//--- Abstimmung für 3 oder 5 Ziffern
   int digits_adjust=1;
    
   m_adjusted_point=m_symbol.Point()*digits_adjust;

//--- Handle des Indikators iMA erstellen
   handle_iMA_kis_trend_gyors=iMA(m_symbol.Name(),per_kis,kis_trend_gyors_per,0, MA_method_kis,PRICE_CLOSE);
//--- Handle des Indikators iMA erstellen
   handle_iMA_kis_trend_lassú=iMA(m_symbol.Name(),per_kis,kis_trend_lassú_per ,0,MA_method_kis , PRICE_CLOSE );
//--- Handle des Indikators iMA erstellen
   handle_iMA_nagy_trend_gyors=iMA(m_symbol.Name(),per_nagy,nagy_trend_gyors_per ,0, MA_method_nagy , PRICE_CLOSE ); 
//--- Handle des Indikators iMA erstellen
   handle_iMA_nagy_trend_lassú=iMA(m_symbol.Name(),per_nagy,nagy_trend_lassú_per ,0, MA_method_nagy , PRICE_CLOSE );
//--- Handle des Indikators iRSI erstellen
   handle_iRSI=iRSI(m_symbol.Name(),per_kis,RSI_indikátor_periódus, PRICE_CLOSE);
//--- Handle des Indikators iStochastic erstellen
   handle_iStochastic_M15=iStochastic(m_symbol.Name(),per_kis,ST_indikátor_periódus,3,ST_lassuló,MODE_SMA,STO_CLOSECLOSE);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
 
//---

  }
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
 if(kis_trend_gyors_per>=kis_trend_lassú_per || nagy_trend_gyors_per>=nagy_trend_lassú_per)
  return;
 
 static datetime PrevBars=0;
   datetime time_0=iTime(0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
//--- вычисляем начальные параметры индикаторов для поиска условий входа
   double MA_kis_trend_gyors   = iMAGet(handle_iMA_kis_trend_gyors,0);
   double MA_kis_trend_lassú    = iMAGet(handle_iMA_kis_trend_lassú,0);
   double MA_nagy_trend_gyors    = iMAGet(handle_iMA_nagy_trend_gyors,0);
   double MA_nagy_trend_lassú    = iMAGet(handle_iMA_nagy_trend_lassú,0);
   
    
   double Stoh_fast = iStochasticGet(MAIN_LINE,0);
   double Stoh_fast_prew=iStochasticGet(MAIN_LINE,1);

   double RSI0    = iRSIGet(0);
   double RSI1    = iRSIGet(1);
       
   double StRSI=(Stoh_fast*RSI0)/100;//------------------------------------------------------------------------ I would like to draw out these outcomes.
   double StRSI_prew=(Stoh_fast_prew*RSI1)/100;//--------------------------------------------------------------
    
   double price_M15=iClose(1,NULL,per_kis);
   bool Long=false;
       
   if(MA_kis_trend_gyors>MA_kis_trend_lassú   &&   MA_nagy_trend_gyors>MA_nagy_trend_lassú)
     Long=true;
       
   if(!Long  )
      return; 

//--- проверка условий для совершения сделки
   if(Long==true  )
     {
       if(  StRSI>STh_alsó && StRSI_prew<=STh_alsó  )
         { 
         
         if(!RefreshRates())
            return;

         //--- Volumen vor OrderSend prüfen, um Fehler "nicht genug Geld" zu vermeiden (CTrade)
         double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),Lots,m_symbol.Ask(),ORDER_TYPE_BUY);

         if(chek_volime_lot!=0.0)
            if(chek_volime_lot>=Lots)
              {
               Print("BUY разница (MA_M15-price_M15) = ",DoubleToString(MA_kis_trend_gyors,m_symbol.Digits()),
                     " MA_M15 = ",DoubleToString(MA_kis_trend_gyors,m_symbol.Digits()),
                     " price_M15 = ",DoubleToString(MA_kis_trend_gyors,m_symbol.Digits()));
               double sl=m_symbol.NormalizePrice(m_symbol.Bid()-StopLoss*m_adjusted_point);
               double tp=m_symbol.NormalizePrice(m_symbol.Bid()+TakeProfit*m_adjusted_point);

               if(m_trade.Buy(Lots,NULL,m_symbol.Ask(),sl,tp))
                 {
                  if(m_trade.ResultDeal()==0)
                     Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                           ", description of result: ",m_trade.ResultRetcodeDescription());
                  else
                     Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
                           ", description of result: ",m_trade.ResultRetcodeDescription());
                 }
               else
                  Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                        ", description of result: ",m_trade.ResultRetcodeDescription());
              }
            }     
        }
//--- трейлинг
   if(TrailingStop==0)
      return;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // wählt die Position über den Index aus, um weiteren Zugriff auf ihre Eigenschaften zu erhalten
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
             if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
             if(!RefreshRates())
                  continue;

               if(m_symbol.Bid()-m_position.PriceOpen()>TrailingStop*m_adjusted_point)
                 {
                  if(m_position.StopLoss()<m_symbol.Bid()-TrailingStop*m_adjusted_point)
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_symbol.Bid()-TrailingStop*m_adjusted_point),
                        m_position.TakeProfit()))
                        Print("PositionModify -> false. Result Retcode: ",m_trade.ResultRetcode(),
                              ", description of result: ",m_trade.ResultRetcodeDescription());
                    }
                 }
              }
            }
//---
   return;
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void SetMarginMode(void)
  {
   m_margin_mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
bool IsHedging(void)
  {
   return(m_margin_mode==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);
  }
//+------------------------------------------------------------------+
//| Aktualisiert die Daten der Symbolzitate|
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- Aktualisierungsraten
   if(!m_symbol.RefreshRates())
      return(false);
//--- Schutz gegen den Rückgabewert "Null"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+
//| Wert der Puffer für die iMA abfragen|
//+------------------------------------------------------------------+
double iMAGet(int handle_iMA,const int index)
  {
   double MA[1];
//--- Fehlercode zurücksetzen 
   ResetLastError();
//--- einen Teil des iMABuffer-Arrays mit Werten aus dem Indikatorpuffer füllen, der den Index 0 hat 
   if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
     {
      //--- falls das Kopieren fehlschlägt, geben Sie den Fehlercode an 
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- Beenden mit einem Ergebnis von Null - dies bedeutet, dass der Indikator als nicht berechnet gilt 
      return(0.0);
     }
   return(MA[0]);
  }
//+------------------------------------------------------------------+
//| Wert der Puffer für die iStochastic abfragen |
//| Die Puffernummern sind die folgenden:|
//| 0 - MAIN_LINE, 1 - SIGNAL_LINE|
//+------------------------------------------------------------------+
double iStochasticGet(const int buffer,const int index)
  {
   double Stochastic[1];
//--- Fehlercode zurücksetzen 
   ResetLastError();
//--- einen Teil des Arrays iStochasticBuffer mit Werten aus dem Indikatorpuffer mit dem Index 0 füllen 
   if(CopyBuffer(handle_iStochastic_M15,buffer,index,1,Stochastic)<0)
     {
      //--- falls das Kopieren fehlschlägt, geben Sie den Fehlercode an 
      PrintFormat("Failed to copy data from the iStochastic indicator, error code %d",GetLastError());
      //--- Beenden mit einem Ergebnis von Null - dies bedeutet, dass der Indikator als nicht berechnet gilt 
      return(0.0);
     }
   return(Stochastic[0]);
  }
 
  
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Wert der Puffer für den iRSI abfragen|
//+------------------------------------------------------------------+
double iRSIGet(const int index)
  {
   double RSI[1];
//--- Fehlercode zurücksetzen 
   ResetLastError();
//--- einen Teil des iRSI-Arrays mit Werten aus dem Indikatorpuffer füllen, der den Index 0 hat 
   if(CopyBuffer(handle_iRSI,0,index,1,RSI)<0)
     {
      //--- falls das Kopieren fehlschlägt, geben Sie den Fehlercode an 
      PrintFormat("Failed to copy data from the iRSI indicator, error code %d",GetLastError());
      //--- Beenden mit einem Ergebnis von Null - dies bedeutet, dass der Indikator als nicht berechnet gilt 
      return(0.0);
     }
   return(RSI[0]);
  }
  
  //+------------------------------------------------------------------+ 
//| Hole Close für angegebenen Bar-Index| 
//+------------------------------------------------------------------+ 
double iClose(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=per_kis;
   double Close[1];
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,Close);
   if(copied>0) close=Close[0];
   return(close);
  }
//+------------------------------------------------------------------+ 
//| Zeit für angegebenen Taktindex abfragen| 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=per_kis;
   datetime Time[1];
   datetime time=0;
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0) time=Time[0];
   return(time);
  }
//+------------------------------------------------------------------+
 
Kombination von Polish Layer und Get Trend. Ich habe das Thema mit einem leeren Hintergrund hervorgehoben.
 
csezo2:
Kombination von Polish Layer und Get Trend. Ich habe das Thema mit einem leeren Hintergrund hervorgehoben.
//--- Handle des Indikators iMA erstellen
   handle_iMA_kis_trend_gyors=iMA(m_symbol.Name(),per_kis,kis_trend_gyors_per,0,MA_method_kis,PRICE_CLOSE);
//--- wenn der Handle nicht erstellt wird 
   if(handle_iMA_kis_trend_gyors==INVALID_HANDLE)
     {
      //--- über den Fehler informieren und den Fehlercode ausgeben 
      PrintFormat("Failed to create handle \"handle_iMA_kis_trend_gyors\" of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(per_kis),
                  GetLastError());
      //--- der Indikator wird vorzeitig gestoppt 
      return(INIT_FAILED);
     }
//--- Handle des Indikators iMA erstellen
   handle_iMA_kis_trend_lassú=iMA(m_symbol.Name(),per_kis,kis_trend_lassú_per,0,MA_method_kis,PRICE_CLOSE);
//--- wenn der Handle nicht erstellt wird 
   if(handle_iMA_kis_trend_lassú==INVALID_HANDLE)
     {
      //--- über den Fehler informieren und den Fehlercode ausgeben 
      PrintFormat("Fehler beim Erstellen des Handles "handle_iMA_kis_trend_lassú" des iMA-Indikators für das Symbol %s/%s, Fehlercode %d",
                  m_symbol.Name(),
                  EnumToString(per_kis),
                  GetLastError());
      //--- der Indikator wird vorzeitig gestoppt 
      return(INIT_FAILED);
     }
//--- Handle des Indikators iMA erstellen
   handle_iMA_nagy_trend_gyors=iMA(m_symbol.Name(),per_nagy,nagy_trend_gyors_per,0,MA_method_nagy,PRICE_CLOSE);
//--- wenn der Handle nicht erstellt wird 
   if(handle_iMA_nagy_trend_gyors==INVALID_HANDLE)
     {
      //--- über den Fehler informieren und den Fehlercode ausgeben 
      PrintFormat("Failed to create handle \"handle_iMA_nagy_trend_gyors\" of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(per_kis),
                  GetLastError());
      //--- der Indikator wird vorzeitig gestoppt 
      return(INIT_FAILED);
     }
//--- Handle des Indikators iMA erstellen
   handle_iMA_nagy_trend_lassú=iMA(m_symbol.Name(),per_nagy,nagy_trend_lassú_per,0,MA_method_nagy,PRICE_CLOSE);
//--- wenn der Handle nicht erstellt wird 
   if(handle_iMA_nagy_trend_lassú==INVALID_HANDLE)
     {
      //--- über den Fehler informieren und den Fehlercode ausgeben 
      PrintFormat("Fehler beim Erstellen des Handles "handle_iMA_nagy_trend_lassú" des iMA-Indikators für das Symbol %s/%s, Fehlercode %d",
                  m_symbol.Name(),
                  EnumToString(per_kis),
                  GetLastError());
      //--- der Indikator wird vorzeitig gestoppt 
      return(INIT_FAILED);
     }
//--- Handle des Indikators iRSI erstellen
   handle_iRSI=iRSI(m_symbol.Name(),per_kis,RSI_indikátor_periódus,PRICE_CLOSE);
//--- wenn der Handle nicht erstellt wird 
   if(handle_iRSI==INVALID_HANDLE)
     {
      //--- über den Fehler informieren und den Fehlercode ausgeben 
      PrintFormat("Failed to create handle \"handle_iRSI\" of the iRSI indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(per_kis),
                  GetLastError());
      //--- der Indikator wird vorzeitig gestoppt 
      return(INIT_FAILED);
     }
//--- Handle des Indikators iStochastic erstellen
   handle_iStochastic_M15=iStochastic(m_symbol.Name(),per_kis,ST_indikátor_periódus,3,ST_lassuló,MODE_SMA,STO_CLOSECLOSE);
//--- wenn der Handle nicht erstellt wird 
   if(handle_iStochastic_M15==INVALID_HANDLE)
     {
      //--- über den Fehler informieren und den Fehlercode ausgeben 
      PrintFormat("Failed to create handle \"handle_iStochastic_M15\"  of the iStochastic indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(per_kis),
                  GetLastError());
      //--- der Indikator wird vorzeitig gestoppt 
      return(INIT_FAILED);
     }

//--- Ich möchte diese Ergebnisse hervorheben.
   double StRSI=(Stoh_fast*RSI0)/100.0;
   double StRSI_prew=(Stoh_fast_prew*RSI1)/100.0;
//---
Dateien:
1.mq5  33 kb
 
Ich möchte das Ergebnis der Stochastik multipliziert mit dem RSI aufzeigen.
 
csezo2 :
Ich möchte das Ergebnis der Stochastik multipliziert mit RSI zu zeichnen.

Ich verstehe nicht.

Versuchen Sie, in anderen Worten zu erklären oder ein Bild zu zeichnen.