Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5 > Codeschnipsel

Codeschnipsel Codeschnipsel für MQL5.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3359
Beiträge: 33848
Benutzer: 5.342
Aktive Benutzer: 599
Links: 79
Wir begrüßen unseren neuesten Benutzer: maxi
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 5 Stunden
- maxi
vor 20 Stunden
- athaclena
vor einem Tag
- Naale
vor einem Tag
- csabi911
vor einem Tag
- Adlerflüge...

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 32
Gesamt: 35
Team: 0
Team:  
Benutzer:  fxnoob, Naale, SentiTrader
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
  • 1 Post By mawini
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Benutzerbild von Kronenchakra
Mitglied
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 110
Kronenchakra befindet sich auf einem aufstrebenden Ast
Lightbulb Indikator Buffer initialisieren mit nur EINER Zeile Code

Das Konzept der Indicatorbuffer bzw Plottbuffer ist von Metaquotes beim MT5 leider ziemlich versiebt worden.
Da sind die Sünden der Vergangenheit vom MT4 übernommen worden.
Die statischen Definitionen durch Kompilerdirektiven sind wirklich Steinzeit.
Bei Indikatoren mit vielen Plotbuffern eine äussert fehleranfällige Angelegenheit.
Man hat allerdings mit PlotIndexSetInteger(..), PlotIndexSetDouble(...) etc. Möglichkeiten bereitgestell etwa dynamischer zu arbeiten.
Deshalb habe ich zwei Varianten geschaffen um mir das Programmiererdasein zu erleichtern.
Variante 1 stelle ich jetzt vor, die prozedurale Lösung.
Gehört natürlich in eine mqh Datei ausgelagert.

Code:
//+------------------------------------------------------------------+
//| Initialization of buffers as function                            |
//+------------------------------------------------------------------+
bool InitIndi(double                 &Buffer[],                // the buffer
              ENUM_INDEXBUFFER_TYPE   BufType,                 // INDICATOR_DATA / INDICATOR_COLOR_INDEX / INDICATOR_CALCULATIONS
              ENUM_DRAW_TYPE          DrwType  =DRAW_NONE,     // DRAW_NONE .. DRAW_COLOR_CANDLES
              ENUM_LINE_STYLE         LineStyle=STYLE_SOLID,   // STYLE_SOLID .. STYLE_DASHDOTDOT
              int                     LineWidth=1,             // PLOT_LINE_WIDTH - 1 ........
              int                     LineColor=clrRed,        // PLOT_LINE_COLOR - clr.......
              int                     aIntValue=0,             // for SMA,EMA,WMA the period / for Max/Min lookback / for ArrowCode
              string                  PlotLabel="",            // PLOT_LABEL - "Any String"
              int                     PlotShift=0)             // PLOT_SHIFT
{
   static int BufIdx;                                          // counter for bufferindex
   SetIndexBuffer     (BufIdx,Buffer,          BufType  );
   PlotIndexSetInteger(BufIdx,PLOT_DRAW_TYPE,  DrwType  );
   PlotIndexSetInteger(BufIdx,PLOT_LINE_STYLE, LineStyle);
   PlotIndexSetInteger(BufIdx,PLOT_LINE_WIDTH, LineWidth);
   PlotIndexSetString (BufIdx,PLOT_LABEL,      PlotLabel);
   PlotIndexSetDouble (BufIdx,PLOT_EMPTY_VALUE,NULL     );
   PlotIndexSetInteger(BufIdx,PLOT_SHIFT,      PlotShift);
   
   if(DrwType==DRAW_ARROW)
      PlotIndexSetInteger(BufIdx,PLOT_ARROW, aIntValue);

   if(LineColor==0)
      PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,aIntValue+1);
   else
      PlotIndexSetInteger(BufIdx,PLOT_LINE_COLOR, LineColor);
   
   BufIdx++;                                                   // increment bufferindex for next Init()
   return(true);
}
Verwendet wird die Funktion dann etwa so:

Code:
#include <MyBuffers.mqh>

#define INDIS 5
#define PLOTS 3

#property indicator_buffers INDIS
#property indicator_plots   PLOTS

input int    inp_Period_1 =       6;       // Period
input int    inp_LWidth   =       1;       // Linewidth
input color  inp_Color_1  = clrGold;       // Color

double Dema1[], Ema11[], Ema12[];
double siUP1[], siDN1[];

void OnInit()
{
   InitIndi(Dema1,INDICATOR_DATA,DRAW_LINE ,STYLE_SOLID,inp_LWidth,inp_Color_1,  0,"DEMA"); 
   InitIndi(siUP1,INDICATOR_DATA,DRAW_ARROW,STYLE_SOLID,inp_LWidth,clrLime    ,159,"Signal UP");
   InitIndi(siDN1,INDICATOR_DATA,DRAW_ARROW,STYLE_SOLID,inp_LWidth,clrRed     ,159,"Signal DN");
   InitIndi(Ema11,INDICATOR_CALCULATIONS);
   InitIndi(Ema12,INDICATOR_CALCULATIONS);
}
Der BufferIndex wird automatisch vergeben!
Für diese 4 Zeilen Programmcode wären auf konventionelle Art etwa VIERZIG Zeilen notwendig!

Variante 2 kommt das nächste mal, die OOP-Lösung.
Da bekommen die Plottbuffer Eigenschaften und Methoden.
__________________
Das Gras wächst nicht schneller, wenn man daran zieht
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Benutzerbild von mawini
Mitglied
 
Registriert seit: Apr 2016
Beiträge: 74
mawini befindet sich auf einem aufstrebenden Ast
Standard

Hi Kronenchakra, vielen Dank für deinen Beitrag! Finde ihn sehr interessant, muss meinem Code auch noch kompakter gestalten. Glaube das könnte mir auch helfen!
Viele Grüße
Mawini

Gesendet von meinem D5503 mit Tapatalk
Kronenchakra likes this.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
buffer, codeschnipsel, codeschnipsel mql5, indikator buffer, programmierung, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.



-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2016 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2016 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------