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?
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 sehe zwar die Funktion Alt+S, aber ich weiß nicht, wie sie funktioniert.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Allgemeine Regeln und bewährte Praktiken des Forums.
Alain Verleyen, 2017.07.19 11:03
Wenn Sie Code posten, benutzen Sie bitte den SRC-Button!
#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.
//--- 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; //---
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.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Polish Layer:
Dieser EA wurde basierend auf den folgenden Indikatoren gebaut: RSI, WPR, Stochastic, Moving Average, deMarker
Autor: Vladimir Karputov