Custom-Indikator lässt MT4 einfrieren
Liste der Anhänge anzeigen (Anzahl: 2)
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
|