|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Custom Indicator lässt MT4 einfrieren
Hallo.
Experimentiere derzeit mit ein paar eigenen Indis rum. Im Anhang der MAdPR_SEP_v1.mq4. Versuche, im Unterfenster nen MA durch nen Price zu dividieren und andersrum. Beim Kompilieren gibts keine Fehlermeldung und es scheint Alles richtig zu sein. Aber wenn ich im MT4 den Indi in irgend einen Chart ziehe, und im Konfig-Fensterchen OK klicke, friert der gesamte MT4 ein und lässt sich bloß noch mit Windoof zwangs-schließen. Davon abgesehn hab ich nen eigenen Indi, der im Unterfenster 2 Preise, Jeder durch den Anderen dividiert. Der ist eigentlich das Selbe wie der MAdPR-Indi und mit dem gibts keinerlei Probleme. Lad ich auch mal hoch. Code:
for( i=0 ; rates_total>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 Price if(Price==PRICE_HIGH )PR=Pr_Hi; if(Price==PRICE_CLOSE )PR=Pr_Cl; if(Price==PRICE_OPEN )PR=Pr_Op; if(Price==PRICE_LOW )PR=Pr_Lo; if(Price==PRICE_MEDIAN )PR=Pr_ME; if(Price==PRICE_TYPICAL )PR=Pr_TY; if(Price==PRICE_WEIGHTED)PR=Pr_WE; //============================================================================================================= // D E K L A R A T I O N M A //============================================================================================================= MA=iMA(Symbol(),Period(),MA_Period,MA_ChartShift,MA_Method,MA_Price,i); //============================================================================================================= // B U F F E R P R d M A //============================================================================================================= if( MA <= -1.0 || MA >= 1.0 )BUF_PdM[i] = PR / MA; //------------------------------------------------------------------------------------------------------------- if( MA > -1.0 && MA < 1.0 ){ mT=0;// mal 10 MA_T = MA; while( MA_T > -1.0 && MA_T < 1.0 ){ MA_mT = MA_T * 10.0;// MA_T * 10 MA_T = MA_mT; mT++; } PdM_T = PR / MA_mT; for( j=mT ; j>0 ; j-- ){ PdM_mT = PdM_T * 10.0; PdM_T = PdM_mT; } BUF_PdM[i] = PdM_mT; } //============================================================================================================= // B U F F E R M A d P R //============================================================================================================= if( PR <= -1.0 || PR >= 1.0 )BUF_MdP[i] = MA / PR; //------------------------------------------------------------------------------------------------------------- if( PR > -1.0 && PR < 1.0 ){ mT=0;// mal 10 PR_T = PR; while( PR_T > -1.0 && PR_T < 1.0 ){ PR_mT = PR_T * 10.0;// * 10 PR_T = PR_mT; mT++; } MdP_T = MA / PR_mT; for( k=mT ; k>0 ; k-- ){ MdP_T = MdP_mT * 10.0; MdP_mT = MdP_T; } BUF_MdP[i] = MdP_mT; } |
|
|||
Code:
fPr_Hi=iHigh (NULL,NULL,i); Nur das Erste, was mir ins Gesicht sprang. AVT |
|
|||
Danke für den Hinweis.
Problem wurde inzwischen gelöst. Zu Übungszwecken könnt Ihr ja mal gucken, ob Ihr den Fehler findet. Tipp:Es war nur ein einziges Zeichen, dass den MT4 hat freezen lassen... |
|
|||
Zu früh gefreut, funktioniert doch nicht wie ich dachte. Aber das ist ja inzwischen keine grosse Überraschung mehr.
Das Problem war und ist die Kerzen-Angabe in der MA Deklaration. Code:
MA=iMA(Symbol(),Period(),MA_Period,MA_ChartShift,MA_Method,MA_Price,0); Wie macht man das jetzt? |
|
|||
Hallo.
Irgendwo in diesem Stück Code muss/muessen Fehler drin sein, die den ganzen MT4 einfrieren lassen, wenn der Indi in ein Chartfenster gezogen wird. Wenn der MA >= 1.0 ist, funktioniert das Gerät ohne Probleme. Aber wenn der folgende Teile nötig wird, also wenn der MA kleiner als 1.0 ist, friert wie gesagt der ganze MT4 sofort ein. Kann sein, dass der untere Teil völlig überflüssig ist, vielleicht fehlt aber auch irgendwo irgendwas. Bin wie gesagt leider kein Mathe-Experte. Ziel ist, aus dem Verhältnis von MA und Price sozusagen Trendlinien zu malen, um die man sich dann nicht weiter kümmern muss und die wie z.B. ganz normale MAs in nem MA-EA genutzt werden können. Wenn der Indi funktioniert, schaut das für den Anfang nicht schlecht aus, aber wenn eben der MA kleiner als 1.0 ist... Code:
//============================================================================================================= // B U F F E R W E N N M A < 1 //============================================================================================================= if( MA > -1.0 && MA < 1.0 ){ //------------------------------------------------------------------------------------------------------------- // 1. MA mal 10 bis er nicht mehr kleiner als 1 ist. mt=0; M_t=MA; while( M_t > -1.0 && M_t < 1.0 ){ M_mt = M_t * 10.0; M_t = M_mt; mt++; } // 2. Price / "angepassten" MA PM_t = PR / M_mt; // Müsste bis hier Alles richtig sein... for( k=mt ; k>0 ; k-- ){ PM_mt = PM_t * 10.0; PM_t = PM_mt; } //Wenn PMT_mt if( PM_mt <= -1.0 || PM_mt >= 1.0 )BUF_PRdMAdPDM[i] = PM_mt; } /* //------------------------------------------------------------------------------------------------------------- //Wenn PdM_T kleiner als 1.0 ist... if( PMT_mt > -1.0 && PMT_mt < 1.0 ){ // ...PdM_T so oft mit 10 multipl. bis er nicht mehr kleiner als 1.0 ist: mt=0;// mal 10 PdMmt_t=PdMmt; while( PM_t > -1.0 && PM_t < 1.0 ){ PdMmt_mt = PdMmt_t * 10.0;// MA_T * 10 PdMmt_t = PdMmt_mt; mt++; } MdPdM_t = MA / PdMmt_mt; for( j=mt ; j>0 ; j-- ){ MdPdM_mt = MdPdM_t * 10.0; MdPdM_t = MdPdM_mt; } BUF_PRdMAdPDM[i] = MdPdM_mt; } } */ //============================================================================================================= // 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 |
Lesezeichen |
|
|