[求助]指标修改 (文华财经WH6赢顺V6.7)

投资者咨询:[求助]指标修改 (文华财经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
 老师,你好。。我加载了,跑到副图上面去上。。能不能直接加载在主图上?
我上传了在MT4里的指标和文华里的,相差有点大。。老师能否再帮我看看呢?

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看
技术人员回复
日期:2018-5-24 18:01
 MT4与文华指标语言差异比较大,建议您可以根据原指标思路具体量化一下

我们直接在文华轴心线的基础上根据您的思路编写完善