Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 14.08.22
MA-EA MA-EA ist offline
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard Custom-Indikator lässt MT4 einfrieren

Hallo.


Ein Eigener Indi lässt immer wieder den MT4 einfrieren. Dass er 6 Buffer hat, sollte ja eigentlich egal sein. Ist Im Anhang. Hab schon Vieles geändert, immer das gleiche Problem.


Der eigene Indi im Anhang mit 4 Buffern ist im Grunde genauso, funktioniert aber ohne Probleme.

Code:
//=============================================================================
#property version     "OdHML_6B_SEP_v2.mq4"
#property description "erst mal keine"
#property link        "daniel-rudloff@web.de"
//=============================================================================

#property indicator_separate_window// Unterfenster

#property indicator_buffers 6

#property indicator_color1 clrGreen// Farbe der Linie
#property indicator_width1 1

#property indicator_color2 clrOrange// Farbe der Linie
#property indicator_width2 1

#property indicator_color3 clrPaleGreen// Farbe der Linie
#property indicator_width3 1

#property indicator_color4 clrPaleGreen// Farbe der Linie
#property indicator_width4 1

#property indicator_color5 clrRed// Farbe der Linie
#property indicator_width5 1

#property indicator_color6 clrGreen// Farbe der Linie
#property indicator_width6 1

//=============================================================================

//=============================================================================================================
// G L O B A L E   E I N S T E L L U N G E N
//=============================================================================================================


extern int               MA_Hi_Period     = 6;// Zum Testen 6
extern int               MA_Hi_ChartShift = 0;
input ENUM_MA_METHOD     MA_Hi_Method     = MODE_SMA;


input ENUM_APPLIED_PRICE Price_Mi=PRICE_CLOSE;

extern int               MA_Mi_Period     = 6;// Zum Testen 6
extern int               MA_Mi_ChartShift = 0;
input ENUM_MA_METHOD     MA_Mi_Method     = MODE_SMA;
input ENUM_APPLIED_PRICE MA_Mi_Price      = PRICE_CLOSE;


extern int               MA_Lo_Period     = 6;// Zum Testen 6
extern int               MA_Lo_ChartShift = 0;
input ENUM_MA_METHOD     MA_Lo_Method     = MODE_SMA;


//=============================================================================================================
// G L O B A L E   D E K L A
//=============================================================================================================
//=============================================================================================================
string IndisName = "OdHML_6B_SEP";  // Indikatorname
//-------------------------------------------------------------------------------------------------------------

double

Pr_Hi,Pr_Op,Pr_Cl,Pr_Lo,Pr_ME,Pr_TY,Pr_WE,


hiPR,miPR,loPR,
hiMA,miMA,loMA,


OD_hiPR,OD_hiMA,
OD_miPR,OD_miMA,
OD_loPR,OD_loMA,


BUF_A[]// Buffer 0
,
BUF_B[]// Buffer 1
,
BUF_C[]// Buffer 2
,
BUF_D[]// Buffer 3
,
BUF_E[]// Buffer 4
,
BUF_F[]// Buffer 5


;

//-------------------------------------------------------------------------------------------------------------

int

i

;

//=============================================================================================================
// O P Z   D I V
//=============================================================================================================

double ODIV(

  double ODIV_ToDiv// Soll dividiert werden
  ,
  double ODIV_Div// Wert, der kleiner als 1.0 ist
  
){
  
  double
  ODIV_DIV_mt
  ,
  ODIV_DivEd
  ,
  ODIV_DivEd_t;
  
  int ODIV_mt;
  

  if( ODIV_Div <= -1.0 || ODIV_Div >= 1.0 )ODIV_DivEd = ODIV_ToDiv / ODIV_Div;


  if( ODIV_Div > -1.0 && ODIV_Div < 1.0 ){
  
    ODIV_mt=0;
    while( ODIV_Div > -1.0 && ODIV_Div < 1.0 ){
  
      ODIV_DIV_mt = ODIV_Div * 10.0;
    
      ODIV_Div = ODIV_DIV_mt;
    
      ODIV_mt++;}
  
  
    ODIV_DivEd = ODIV_ToDiv / ODIV_DIV_mt;


    for( ODIV_mt ; ODIV_mt > 1 ; ODIV_mt-- ){
  
      ODIV_DivEd_t = ODIV_DivEd * 10.0;
    
      ODIV_DivEd = ODIV_DivEd_t;}
  
  }

  return ODIV_DivEd;

}

//=============================================================================================================
// O P Z   M U L
//=============================================================================================================

double OMUL(

  double OMUL_ToMul// Soll multipliziert werden
  ,  
  double OMUL_Mul// Wert, der kleiner als 1.0 ist

){
  
  double
  OMUL_MUL_mt
  ,
  OMUL_MulEd
  ,
  OMUL_MulEd_t;
  
  int OMUL_mt;


  if( OMUL_ToMul <= -1.0 || OMUL_ToMul >= 1.0 || OMUL_Mul <= -1.0 || OMUL_Mul >= 1.0 )OMUL_MulEd = OMUL_ToMul * OMUL_Mul;
  
  
  if( OMUL_ToMul > -1.0 && OMUL_ToMul < 1.0 && OMUL_Mul > -1.0 && OMUL_Mul < 1.0 ){

    OMUL_mt=0;
    while( OMUL_Mul > -1.0 && OMUL_Mul < 1.0 ){
  
      OMUL_MUL_mt = OMUL_Mul * 10.0;
    
      OMUL_Mul = OMUL_MUL_mt;
    
      OMUL_mt++;}
  
  
    OMUL_MulEd = OMUL_ToMul * OMUL_MUL_mt;


    for( OMUL_mt ; OMUL_mt > 1 ; OMUL_mt-- ){
  
      OMUL_MulEd_t = OMUL_MulEd / 10.0;
    
      OMUL_MulEd = OMUL_MulEd_t;}
  
  }

  return OMUL_MulEd;

}

//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){
   // === Anzeige des Indikatornamens und der Werte
    IndicatorShortName(IndisName);
    IndicatorBuffers(6);// Gesamtanzahl aller Buffer
//-------------------------------------------------------------------------------------------------------------


// Buffer 0
SetIndexBuffer(0,BUF_A);
SetIndexLabel(0,
              "BUF_A"
             );// Beschreibung im Datenfenster
SetIndexDrawBegin(0,0);


// Buffer 1
SetIndexBuffer(1,BUF_B);
SetIndexLabel(1,
              "BUF_B"
             );// Beschreibung im Datenfenster
SetIndexDrawBegin(1,0);


// Buffer 2
SetIndexBuffer(2,BUF_C);
SetIndexLabel(2,
              "BUF_C"
             );// Beschreibung im Datenfenster
SetIndexDrawBegin(2,0);


// Buffer 3
SetIndexBuffer(3,BUF_D);
SetIndexLabel(3,
              "BUF_D"
             );// Beschreibung im Datenfenster
SetIndexDrawBegin(3,0);

// Buffer 4
SetIndexBuffer(4,BUF_E);
SetIndexLabel(4,
              "BUF_E"
             );// Beschreibung im Datenfenster
SetIndexDrawBegin(4,0);


// Buffer 5
SetIndexBuffer(5,BUF_F);
SetIndexLabel(5,
              "BUF_F"
             );// Beschreibung im Datenfenster
SetIndexDrawBegin(5,0);

//-------------------------------------------------------------------------------------------------------------
}// OnInit
//=============================================================================================================
// D E I N I T
//=============================================================================================================
void OnDeinit(const int reason){}// nothing to do here
//=============================================================================================================
// O N C A L C U L A T E
//=============================================================================================================
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){
//-------------------------------------------------------------------------------------------------------------

for( i=0 ; rates_total-MA_Mi_Period-3 > i ; i++ ){// ?

//=============================================================================================================
// D E K L A R A T I O N   P R I C E
//=============================================================================================================

Pr_Hi=iHigh (NULL,NULL,i);
Pr_Op=iOpen (NULL,NULL,i);
Pr_Cl=iClose(NULL,NULL,i);
Pr_Lo=iLow  (NULL,NULL,i);

Pr_ME = ( Pr_Hi + Pr_Lo ) / 2.0;

Pr_TY = ( Pr_Hi + Pr_Cl + Pr_Lo ) / 3.0;

Pr_WE = ( Pr_Hi + Pr_Cl + Pr_Cl + Pr_Lo ) / 4.0;


// Zuweisung miPR
if(Price_Mi==PRICE_HIGH    )miPR=Pr_Hi;
if(Price_Mi==PRICE_CLOSE   )miPR=Pr_Cl;
if(Price_Mi==PRICE_OPEN    )miPR=Pr_Op;
if(Price_Mi==PRICE_LOW     )miPR=Pr_Lo;
if(Price_Mi==PRICE_MEDIAN  )miPR=Pr_ME;
if(Price_Mi==PRICE_TYPICAL )miPR=Pr_TY;
if(Price_Mi==PRICE_WEIGHTED)miPR=Pr_WE;

//=============================================================================================================
// D E K L A R A T I O N   M A S
//=============================================================================================================

hiMA=iMA(Symbol(),Period(),MA_Hi_Period,MA_Hi_ChartShift,MA_Hi_Method,PRICE_HIGH,i);
miMA=iMA(Symbol(),Period(),MA_Mi_Period,MA_Mi_ChartShift,MA_Mi_Method,MA_Mi_Price,i);
loMA=iMA(Symbol(),Period(),MA_Lo_Period,MA_Lo_ChartShift,MA_Lo_Method,PRICE_LOW,i);

//=============================================================================================================
// O D I V
//=============================================================================================================


OD_hiPR = ODIV(1.0// Soll dividiert werden
               ,
               hiPR// Wert, der evtl. kleiner als 1.0 ist
              );


OD_hiMA = ODIV(1.0// Soll dividiert werden
               ,
               hiMA// Wert, der evtl. kleiner als 1.0 ist
              );


OD_miPR = ODIV(1.0// Soll dividiert werden
               ,
               miPR// Wert, der evtl. kleiner als 1.0 ist
              );


OD_miMA = ODIV(1.0// Soll dividiert werden
               ,
               miMA// Wert, der evtl. kleiner als 1.0 ist
              );


OD_loPR = ODIV(1.0// Soll dividiert werden
               ,
               loPR// Wert, der evtl. kleiner als 1.0 ist
              );


OD_loMA = ODIV(1.0// Soll dividiert werden
               ,
               loMA// Wert, der evtl. kleiner als 1.0 ist
              );


//=============================================================================================================
// B U F F E R
//=============================================================================================================


BUF_A[i] = OMUL(hiMA// Soll multipliziert werden
                ,
                OD_loPR// Wert, der evtl. kleiner als 1.0 ist
               );
                     

BUF_B[i] = OMUL(hiPR// Soll multipliziert werden
                ,
                OD_loMA// Wert, der evtl. kleiner als 1.0 ist
               );


BUF_C[i] = OMUL(OD_miPR// Soll multipliziert werden
                ,
                miMA// Wert, der evtl. kleiner als 1.0 ist
               );


BUF_D[i] = OMUL(OD_miMA// Soll multipliziert werden
                ,
                miPR// Wert, der evtl. kleiner als 1.0 ist
               );


BUF_E[i] = OMUL(loPR// Soll multipliziert werden
                ,
                OD_hiMA// Wert, der evtl. kleiner als 1.0 ist
               );


BUF_F[i] = OMUL(loMA// Soll multipliziert werden
                ,
                OD_hiPR// Wert, der evtl. kleiner als 1.0 ist
               );
                     

//=============================================================================================================
// E N D E   F U N K T I O N E N
//=============================================================================================================
}// for (i=ratestotal)...
//=============================================================================================================
// E N D E   I N D I
//=============================================================================================================
return(rates_total);}// OnCalculate
Angehängte Dateien
Dateityp: mq4 OdHML_6B_SEP_v2.mq4 (23,2 KB, 0x aufgerufen)
Dateityp: mq4 HML_4B_SEP_v1.mq4 (19,6 KB, 0x aufgerufen)