投资者咨询:[求助]指标修改(轴心线) (文华财经WH6赢顺V6.7)
来源:文华财经 日期:2018-5-24 17:38
MT4上面的源代码如下:
//-------------------------------------------------------------------- // PIVOT POINTS - DAILY (SHIFTED).MQ4 // COPYRIGHT ?2009, SWINGTREE LTD // // THIS INDICATOR PLOTS HORIZONTAL LINES AT DAILY PIVOT LEVELS R3, R2, // R1, PIVOT, S1, S2 & S3, USING A DAY THAT IS ADVANCED (OR RETARDED) // FROM THE SERVER TIME (CALLED PIVOT DAY). // // THE ONLY INPUT IS THE INTEGER "SHIFTHRS", WHICH GIVES THE NUMBER OF // HOURS TO ADVANCE THE PIVOT DAY. A NEGATIVE VALUE DELAYS THE DAY FOR // PIVOT CALCULATION. FOR EXAMPLE, IF YOUR SERVER IS ON NEW YORK TIME // (GMT-5) AND YOU WANT PIVOT POINTS IN LONDON TIME (GMT), THEN // SHIFTHRS IS SET TO +5 (THE DEFAULT IN THE CODE). // // SATURDAY AND SUNDAY TRADING IS NOT IGNORED (AFTER ALL IT WAS REAL // TRADING). IF THE PIVOT DAY SHIFT RESULTS IN DATA APPEARING ON // SATURDAY, IT WAS REALLY FRIDAY WHERE IT OCCURED, SO THE INDICATOR // TREATS IT AS PART OF FRIDAY. IF THE PIVOT DAY SHIFT RESULTS IN DATA // APPEARING ON SUNDAY, IT WAS REALLY MONDAY WHERE IT OCCURED, SO THE // INDICATOR TREATS IT AS MONDAY. // // IT USES AN INDICATOR BUFFER FOR EACH LINE, SO PIVOT LEVELS OF // PREVIOUS DAYS REMAIN VISIBLE. (THIS HAS A NEGATIVE CONSEQUENCE: // IT IS NOT POSSIBLE TO USE THE SAME TECHNIQUE TO DRAW INTERMEDIATE // LEVELS (S0.5, S1.5, ETC.) BECAUSE OF THE LIMIT OF 8 BUFFERS.) // // LABELS ARE SHOWN FOR THE MOST RECENT DAY'S LEVELS. // // THIS INDICATOR CAN BE APPLIED TO ANY CHART PERIOD, ALTHOUGH DAILY // PIVOTS ON CHARTS WITH LONG PERIODS ARE MEANINGLESS. // // 2009.07.02 // THERE WAS AN ERROR IN THE CALCULATION OF R3 & S3, // WHICH IS NOW CORRECTED. // //-------------------------------------------------------------------- #PROPERTY COPYRIGHT "COPYRIGHT ?2009, SWINGTREE LTD" #DEFINE R3_NAME "DAILY R3" #DEFINE R2_NAME "DAILY R2" #DEFINE R1_NAME "DAILY R1" #DEFINE PIVOT_NAME "DAILY PP" #DEFINE S1_NAME "DAILY S1" #DEFINE S2_NAME "DAILY S2" #DEFINE S3_NAME "DAILY S3" #DEFINE FONT "ARIAL" #DEFINE R3_COL RED #DEFINE R2_COL RED #DEFINE R1_COL RED #DEFINE PIVOT_COL DIMGRAY #DEFINE S1_COL LIMEGREEN #DEFINE S2_COL LIMEGREEN #DEFINE S3_COL LIMEGREEN #PROPERTY INDICATOR_CHART_WINDOW #PROPERTY INDICATOR_BUFFERS 7 #PROPERTY INDICATOR_COLOR1 R3_COL #PROPERTY INDICATOR_COLOR2 R2_COL #PROPERTY INDICATOR_COLOR3 R1_COL #PROPERTY INDICATOR_COLOR4 PIVOT_COL #PROPERTY INDICATOR_COLOR5 S1_COL #PROPERTY INDICATOR_COLOR6 S2_COL #PROPERTY INDICATOR_COLOR7 S3_COL // INPUT(S) EXTERN INT SHIFTHRS = 5; // PIVOT DAY SHIFT // POSITIVE VALUE MOVES PIVOT DAY EARLIER // BUFFERS FOR LEVELS DOUBLE RES3[], RES2[], RES1[], PIVOT[], SUP1[], SUP2[], SUP3[]; DOUBLE PDAYHIGH, PDAYLOW; STRING THISSYMBOL; DATETIME BARTIME, PIVOTDAYSTARTTIME; INT VISIBLEBARS, DAYSTARTBAR, LEFTMOSTBAR, RIGHTMOSTBAR; //-------------------------------------------------------------------- // INITIALIZATION //-------------------------------------------------------------------- INT INIT() { // ATTACH INDICATOR ARRAYS TO BUFFERS SETINDEXBUFFER( 0, RES3); SETINDEXBUFFER( 1, RES2); SETINDEXBUFFER( 2, RES1); SETINDEXBUFFER( 3, PIVOT); SETINDEXBUFFER( 4, SUP1); SETINDEXBUFFER( 5, SUP2); SETINDEXBUFFER( 6, SUP3); // SET STYLES SETINDEXSTYLE( 0, DRAW_LINE, STYLE_DOT, 1); SETINDEXSTYLE( 1, DRAW_LINE, STYLE_DOT, 1); SETINDEXSTYLE( 2, DRAW_LINE, STYLE_DOT, 1); SETINDEXSTYLE( 3, DRAW_LINE, STYLE_DOT, 1); SETINDEXSTYLE( 4, DRAW_LINE, STYLE_DOT, 1); SETINDEXSTYLE( 5, DRAW_LINE, STYLE_DOT, 1); SETINDEXSTYLE( 6, DRAW_LINE, STYLE_DOT, 1); // SET EMPTY VALUES SETINDEXEMPTYVALUE( 0, EMPTY_VALUE ); SETINDEXEMPTYVALUE( 1, EMPTY_VALUE ); SETINDEXEMPTYVALUE( 2, EMPTY_VALUE ); SETINDEXEMPTYVALUE( 3, EMPTY_VALUE ); SETINDEXEMPTYVALUE( 4, EMPTY_VALUE ); SETINDEXEMPTYVALUE( 5, EMPTY_VALUE ); SETINDEXEMPTYVALUE( 6, EMPTY_VALUE ); // SET LABELS SETINDEXLABEL( 0, R3_NAME ); SETINDEXLABEL( 1, R2_NAME ); SETINDEXLABEL( 2, R1_NAME ); SETINDEXLABEL( 3, PIVOT_NAME ); SETINDEXLABEL( 4, S1_NAME ); SETINDEXLABEL( 5, S2_NAME ); SETINDEXLABEL( 6, S3_NAME ); // PUT TEXT ON THE CHART OBJECTCREATE( R3_NAME, OBJ_TEXT, 0, 0, 0 ); OBJECTCREATE( R2_NAME, OBJ_TEXT, 0, 0, 0 ); OBJECTCREATE( R1_NAME, OBJ_TEXT, 0, 0, 0 ); OBJECTCREATE( PIVOT_NAME, OBJ_TEXT, 0, 0, 0 ); OBJECTCREATE( S1_NAME, OBJ_TEXT, 0, 0, 0 ); OBJECTCREATE( S2_NAME, OBJ_TEXT, 0, 0, 0 ); OBJECTCREATE( S3_NAME, OBJ_TEXT, 0, 0, 0 ); // SET THE TEXT CHARACTERISTICS OBJECTSETTEXT( R3_NAME, R3_NAME, 8, FONT, R3_COL ); OBJECTSETTEXT( R2_NAME, R2_NAME, 8, FONT, R2_COL ); OBJECTSETTEXT( R1_NAME, R1_NAME, 8, FONT, R1_COL ); OBJECTSETTEXT( PIVOT_NAME, PIVOT_NAME, 8, FONT, PIVOT_COL ); OBJECTSETTEXT( S1_NAME, S1_NAME, 8, FONT, S1_COL ); OBJECTSETTEXT( S2_NAME, S2_NAME, 8, FONT, S2_COL ); OBJECTSETTEXT( S3_NAME, S3_NAME, 8, FONT, S3_COL ); // CATCH BAD INPUT IF( MATHABS( SHIFTHRS ) > 23 ) { ALERT( "SHIFTHRS IS TOO LARGE. RESET TO 0 HRS. "); SHIFTHRS = 0; } THISSYMBOL = SYMBOL(); PIVOTDAYSTARTTIME = TIME[BARS-1]; // THE FIRST BAR RETURN(0); } //-------------------------------------------------------------------- //| DE-INITIALIZATION | //-------------------------------------------------------------------- INT DEINIT() { // REMOVE TEXTS OBJECTDELETE( R3_NAME ); OBJECTDELETE( R2_NAME ); OBJECTDELETE( R1_NAME ); OBJECTDELETE( PIVOT_NAME ); OBJECTDELETE( S1_NAME ); OBJECTDELETE( S2_NAME ); OBJECTDELETE( S3_NAME ); RETURN(0); } //-------------------------------------------------------------------- //| MAIN ITERATION | //-------------------------------------------------------------------- INT START() { INT I, COUNT; DOUBLE RANGE; I = BARS - INDICATORCOUNTED() - 1; WHILE(I >= 0) { // IF THE PIVOT DAY CHANGES... IF( PIVOTDAY( TIME[I+1], SHIFTHRS ) != PIVOTDAY( TIME[I], SHIFTHRS ) ) { // DETERMINE HIGH & LOW FOR THE PREVIOUS PIVOT DAY COUNT = IBARSHIFT( NULL, 0, PIVOTDAYSTARTTIME ) - I; // NUMBER OF BARS IN THE DAY PDAYHIGH = HIGH[ IHIGHEST( NULL, 0, MODE_HIGH, COUNT, I+1 ) ]; // PIVOT DAY HIGH PDAYLOW = LOW[ ILOWEST( NULL, 0, MODE_LOW, COUNT, I+1 ) ]; // PIVOT DAY LOW // PIVOT CALCULATIONS PIVOT[I] = ( PDAYHIGH + PDAYLOW + CLOSE[I+1] ) / 3; // PIVOT POINT RANGE = PDAYHIGH - PDAYLOW; RES1[I] = 2 * PIVOT[I] - PDAYLOW; // R1 RES2[I] = PIVOT[I] + RANGE; // R2 RES3[I] = RES1[I] + RANGE; // R3 SUP1[I] = 2 * PIVOT[I] - PDAYHIGH; // S1 SUP2[I] = PIVOT[I] - RANGE; // S2 SUP3[I] = SUP1[I] - RANGE; // S3 // DON'T DRAW THE TRANSITION BETWEEN LEVELS RES3[I+1] = EMPTY_VALUE; RES2[I+1] = EMPTY_VALUE; RES1[I+1] = EMPTY_VALUE; PIVOT[I+1] = EMPTY_VALUE; SUP1[I+1] = EMPTY_VALUE; SUP2[I+1] = EMPTY_VALUE; SUP3[I+1] = EMPTY_VALUE; // REMEMBER WHEN THE DAY CHANGED OVER PIVOTDAYSTARTTIME = TIME[I]; } ELSE // NO CHANGE TO PIVOT LEVELS { RES3[I] = RES3[I+1]; RES2[I] = RES2[I+1]; RES1[I] = RES1[I+1]; PIVOT[I] = PIVOT[I+1]; SUP1[I] = SUP1[I+1]; SUP2[I] = SUP2[I+1]; SUP3[I] = SUP3[I+1]; } // MOVE THE LABELS TO SENSIBLE PLACES // IF THIS IS THE LAST BAR AND (IT'S A NEW BAR OR TIME SCALE HAS CHANGED)... IF( I == 0 && ( BARTIME != TIME[I] || VISIBLEBARS != WINDOWBARSPERCHART() ) ) { DAYSTARTBAR = IBARSHIFT( THISSYMBOL, PERIOD(), PIVOTDAYSTARTTIME ); LEFTMOSTBAR = WINDOWFIRSTVISIBLEBAR()-7; RIGHTMOSTBAR = 15; IF( DAYSTARTBAR < RIGHTMOSTBAR ) // LABEL TOO CLOSE TO THE RIGHT { OBJECTMOVE( R3_NAME, 0, TIME[RIGHTMOSTBAR], RES3[I] ); OBJECTMOVE( R2_NAME, 0, TIME[RIGHTMOSTBAR], RES2[I] ); OBJECTMOVE( R1_NAME, 0, TIME[RIGHTMOSTBAR], RES1[I] ); OBJECTMOVE( PIVOT_NAME, 0, TIME[RIGHTMOSTBAR], PIVOT[I] ); OBJECTMOVE( S1_NAME, 0, TIME[RIGHTMOSTBAR], SUP1[I] ); OBJECTMOVE( S2_NAME, 0, TIME[RIGHTMOSTBAR], SUP2[I] ); OBJECTMOVE( S3_NAME, 0, TIME[RIGHTMOSTBAR], SUP3[I] ); } ELSE IF ( DAYSTARTBAR > LEFTMOSTBAR ) // LABEL TOO CLOSE TO THE LEFT { OBJECTMOVE( R3_NAME, 0, TIME[LEFTMOSTBAR], RES3[I] ); OBJECTMOVE( R2_NAME, 0, TIME[LEFTMOSTBAR], RES2[I] ); OBJECTMOVE( R1_NAME, 0, TIME[LEFTMOSTBAR], RES1[I] ); OBJECTMOVE( PIVOT_NAME, 0, TIME[LEFTMOSTBAR], PIVOT[I] ); OBJECTMOVE( S1_NAME, 0, TIME[LEFTMOSTBAR], SUP1[I] ); OBJECTMOVE( S2_NAME, 0, TIME[LEFTMOSTBAR], SUP2[I] ); OBJECTMOVE( S3_NAME, 0, TIME[LEFTMOSTBAR], SUP3[I] ); } ELSE // MOVE IT WITH THE BARS { OBJECTMOVE( R3_NAME, 0, PIVOTDAYSTARTTIME, RES3[I] ); OBJECTMOVE( R2_NAME, 0, PIVOTDAYSTARTTIME, RES2[I] ); OBJECTMOVE( R1_NAME, 0, PIVOTDAYSTARTTIME, RES1[I] ); OBJECTMOVE( PIVOT_NAME, 0, PIVOTDAYSTARTTIME, PIVOT[I] ); OBJECTMOVE( S1_NAME, 0, PIVOTDAYSTARTTIME, SUP1[I] ); OBJECTMOVE( S2_NAME, 0, PIVOTDAYSTARTTIME, SUP2[I] ); OBJECTMOVE( S3_NAME, 0, PIVOTDAYSTARTTIME, SUP3[I] ); } } VISIBLEBARS = WINDOWBARSPERCHART(); BARTIME = TIME[I]; I--; } RETURN(0); } //-------------------------------------------------------------------- // INT PIVOTDAY( DATETIME BARTIME, DATETIME SHIFTHRS ) // RETURNS THE DAY OF THE WEEK FOR PIVOT POINT CALCULATIONS. // DATETIME BARTIME: TIME STAMP OF THE BAR OF INTEREST // DATETIME SHIFT: THE PIVOT TIME - SERVER TIME SHIFT // I.E. IF THE TIME FOR PIVOT CALCULATION IS AHEAD // OF SERVER TIME, THE SHIFT IS POSITIVE. //-------------------------------------------------------------------- INT PIVOTDAY( DATETIME BARTIME, DATETIME SHIFTHRS ) { INT PDAY = TIMEDAYOFWEEK( BARTIME + SHIFTHRS * 3600 ); IF( PDAY == 0 ) PDAY = 1; // COUNT SUNDAY AS MONDAY IF( PDAY == 6 ) PDAY = 5; // COUNT SATURDAY AS FRIDAY RETURN( PDAY ); }
|
技术人员回复
日期:2018-5-24 18:01

文件名:1.png