投资者咨询:[求助]指标修改 (文华财经WH6赢顺V6.7)
来源:文华财经 日期:2018-5-24 16:26
//--------------------------------------------------------------------
// 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 );
}
MT4上面的源代码,在文华财经上面通不过,请老师帮忙看一下。。谢谢
技术人员回复
日期:2018-5-24 16:57
经分析您指标是轴心线,您用以下指标试试
PIVOT:= (HIGH + LOW + CLOSE) /3;
R1:= 2*PIVOT - LOW;
S1:= 2*PIVOT - HIGH;
R2:= PIVOT + (R1-S1);
S2:= PIVOT - (R1-S1);
R3:= HIGH - (2 * (LOW - PIVOT));
S3:= LOW - (2 * (HIGH - PIVOT));
DRAWSL(ISLASTBAR,PIVOT,0,-50,0,COLORRED);
DRAWSL(ISLASTBAR,R1,0,-50,0,COLORRED);
DRAWSL(ISLASTBAR,S1,0,-50,0,COLORRED);
DRAWSL(ISLASTBAR,R2,0,-50,0,COLORRED);
DRAWSL(ISLASTBAR,R2,0,-50,0,COLORRED);
DRAWNUMBER1(ISLASTBAR,PIVOT,PIVOT,0);
DRAWNUMBER1(ISLASTBAR,R1,R1,0);
DRAWNUMBER1(ISLASTBAR,S1,S1,0);
DRAWNUMBER1(ISLASTBAR,R2,R2,0);
DRAWNUMBER1(ISLASTBAR,S2,S2,0);
投资者咨询:[求助]指标修改 (文华财经WH6赢顺V6.7)
来源:文华财经 日期:2018-5-24 16:26
技术人员回复
日期:2018-5-24 18:01

