黄金分割交易信号 fibocalc_V31.mq4-MT4指标-峰汇在线
诚信为本
量力而为
当前位置:峰汇在线 > MetaTrader 4 > MT4指标 > 正文

黄金分割交易信号 fibocalc_V31.mq4

fibocalc_V31 指标根据黄金分割提供交易参考信号。

图表:fibocalc_V31 指标

源码:

//+------------------------------------------------------------------+
//|                                                 fibocalc_V31.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.125808047.com"

#property indicator_chart_window
#property indicator_buffers 4

#property indicator_color1 DarkGreen
#property indicator_color2 Maroon
#property indicator_color3 Yellow
#property indicator_color4 Goldenrod

double PrevDayHiBuffer[];
double PrevDayLoBuffer[];
double PrevDayOpenBuffer[];
double PrevDayCloseBuffer[];

int fontsize=8;
double PrevDayHi, PrevDayLo, PrevDayOpen , PrevDayClose,fb,fs,fe,tp1,tp2,tp3;
double LastHigh,LastLow,LastOpen,LastClose,x;
double ri,re1,re2,re3,ra1,ra2,ra3;
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete("PrevDayHi");
   ObjectDelete("PrevDayLo");
   ObjectDelete("PrevDayOpen");
   ObjectDelete("PrevDayClose");
   ObjectDelete("fe");ObjectDelete("fe Line");
   ObjectDelete("fs");ObjectDelete("fs Line");
   ObjectDelete("tp3");ObjectDelete("tp3 Line");
   ObjectDelete("tp2");ObjectDelete("tp2 Line");
   ObjectDelete("tp1");ObjectDelete("tp1 Line");
   ObjectDelete("fb");ObjectDelete("fb Line");
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   string short_name;
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(0, PrevDayHiBuffer);
   SetIndexBuffer(1, PrevDayLoBuffer);
   SetIndexBuffer(2, PrevDayOpenBuffer);
   SetIndexBuffer(3, PrevDayCloseBuffer);
   short_name="Prev Hi-Lo levels";
   IndicatorShortName(short_name);
   SetIndexLabel(0, short_name);
   SetIndexDrawBegin(0,1);
   Comment("www.125808047.com");
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   int    counted_bars=IndicatorCounted();
   int limit, i;
   if (counted_bars==0)
   {
      x=Period();
      if (x>240) return(-1);
   }
   limit=(Bars-counted_bars)-1;
   for (i=limit; i>=0;i--)
   {
     LastHigh=High[Highest(NULL,0,MODE_HIGH,i+1)];
     LastLow=Low[Lowest(NULL,0,MODE_LOW,i+1)];
     if (Open[i+1]>LastOpen) LastOpen=Open[i+1];
     if (TimeDay(Time[i])!=TimeDay(Time[i+1]))
     {
       RefreshRates( ) ;
       PrevDayHi=LastHigh;
       PrevDayLo=LastLow;
       PrevDayOpen=LastClose;
       PrevDayClose=Open[i];
       LastLow=Open[i];
       LastHigh=Open[i];
       LastOpen=Open[i];
       LastClose=Open[i];

       if(ObjectFind("PrevDayHi") != 0)
       {
          ObjectCreate("PrevDayHi", OBJ_TEXT, 0, 0, 0);
          ObjectSetText("PrevDayHi", "                Day High",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayHi", 0, Time[i], PrevDayHi);
       }

       if(ObjectFind("PrevDayLo") != 0)
       {
         ObjectCreate("PrevDayLo", OBJ_TEXT, 0, 0, 0);
         ObjectSetText("PrevDayLo", "                Day Low",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayLo", 0, Time[i], PrevDayLo);
       }

       if(ObjectFind("PrevDayOpen") != 0)
       {
         ObjectCreate("PrevDayOpen", OBJ_TEXT, 0, 0, 0);
         ObjectSetText("PrevDayOpen", "                Prev. Day Open",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayOpen", 0, Time[i], PrevDayOpen);
       }

       if(ObjectFind("PrevDayClose") != 0)
       {
         ObjectCreate("PrevDayClose", OBJ_TEXT, 0, 0, 0);
         ObjectSetText("PrevDayClose", "                Prev. Day Close",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayClose", 0, Time[i], PrevDayClose);
       }
     }

     PrevDayHiBuffer[i]=PrevDayHi;
     PrevDayLoBuffer[i]=PrevDayLo;
     PrevDayOpenBuffer[i]=PrevDayOpen;
     PrevDayCloseBuffer[i]=PrevDayClose;
   }

   if (Ask > LastClose) {
     fb= PrevDayHi-(PrevDayHi-PrevDayLo)*0.382;
     fe= PrevDayHi-(PrevDayHi-PrevDayLo)*0.618;
     tp1=((PrevDayHi-PrevDayLo)*0.618)+fb;
     tp2=(PrevDayHi-PrevDayLo)+fb;
     tp3=1.618*(PrevDayHi-PrevDayLo)+fb;
     ri=MathRound((+fb-fe)*10000)/10000;
     re1=MathRound((+tp1-fb)*10000)/10000;
     re2=MathRound((+tp2-fb)*10000)/10000;
     re3=MathRound((+tp3-fb)*10000)/10000;
     ra1=MathRound((+re1/ri)*10)/10;
     ra2=MathRound((+re2/ri)*10)/10;
     ra3=MathRound((+re3/ri)*10)/10;
     RefreshRates( ) ;
     if(ObjectFind("fb") != 0)
     {
        ObjectCreate("fb", OBJ_TEXT, 0, Time[0], fb);
        ObjectSetText("fb", " BUY LEVEL", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("fb",fb, Time[0], fb);
     }
     if(ObjectFind("fb Line") != 0)
     {
        ObjectCreate("fb Line", OBJ_HLINE, 0, Time[0],fb);
        ObjectSet("fb Line", OBJPROP_STYLE, STYLE_DASHDOT);
        ObjectSet("fb Line", OBJPROP_COLOR, Blue);
     }
     else
     {
        ObjectMove("fb Line",0, Time[0], fb);
     }


     if((ra1>2)&&(ra2>2)&&(ra3>2))
        Comment("Owner : ", AccountName()," Account number : ", AccountNumber(),
        "\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was UP ",
        "\nBUY @ ",fb ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
        " Risk/Reward Ratio : ", ra1 ," OK Trade ","\nTakeProit 2 ",tp2 ,
        " Risk/Reward Ratio : ", ra2 ," OK Trade ","\nTakeProit 3 ",tp3,
        " Risk/Reward Ratio : ", ra3 ," OK Trade ");
     else
        Comment("Owner : ", AccountName()," Account number : ", AccountNumber(),
        "\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was UP ",
        "\nBUY @ ",fb ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
        " Risk/Reward Ratio : ", ra1 ," NO TRADE ","\nTakeProit 2 ",tp2 ,
        " Risk/Reward Ratio : ", ra2 ," NO TRADE ","\nTakeProit 3 ",tp3,
        " Risk/Reward Ratio : ", ra3 ," NO TRADE ");

   }

// SELL
   if (Bid < LastClose) {
     fs=(PrevDayHi-PrevDayLo)*0.382+(PrevDayLo);
     fe=(PrevDayHi-PrevDayLo)*0.618+(PrevDayLo);
     tp1=((PrevDayLo-PrevDayHi)*0.618)+fs;
     tp2=(PrevDayLo-PrevDayHi)+fs;
     tp3=1.618*(PrevDayLo-PrevDayHi)+fs;
     ri=MathRound((+fs-fe)*10000)/10000;
     re1=MathRound((+tp1-fs)*10000)/10000;
     re2=MathRound((+tp2-fs)*10000)/10000;
     re3=MathRound((+tp3-fs)*10000)/10000;
     ra1=MathRound((+re1/ri)*10)/10;
     ra2=MathRound((+re2/ri)*10)/10;
     ra3=((+re3/ri)*10)/10;
     RefreshRates( ) ;
     if(ObjectFind("fs") != 0)
     {
        ObjectCreate("fs", OBJ_TEXT, 0, Time[0], fs);
        ObjectSetText("fs", " SELL LEVEL", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("fs",fs, Time[0], fs);
     }
     if(ObjectFind("fs Line") != 0)
     {
        ObjectCreate("fs Line", OBJ_HLINE, 0, Time[0],fs);
        ObjectSet("fs Line", OBJPROP_STYLE, STYLE_DASHDOT);
        ObjectSet("fs Line", OBJPROP_COLOR, Red);
     }
     else
     {
        ObjectMove("fs Line",0, Time[0], fs);
     }


     if((ra1>2)&&(ra2>2)&&(ra3>2))
        Comment("Owner : ", AccountName(),"Account number : ", AccountNumber(),
        "\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was Down ",
        "\nSELL @ ",fs ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
        " Risk/Reward Ratio : ", ra1 ," OK Trade ","\nTakeProit 2 ",tp2 ,
        " Risk/Reward Ratio : ", ra2 ," OK Trade ","\nTakeProit 3 ",tp3,
        " Risk/Reward Ratio : ", ra3 ," OK Trade ");
     else
        Comment("Owner : ", AccountName(),"Account number : ", AccountNumber(),
        "\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was Down ",
        "\nSELL @ ",fs ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
        " Risk/Reward Ratio : ", ra1 ," NO TRADE ","\nTakeProit 2 ",tp2 ,
        " Risk/Reward Ratio : ", ra2 ," NO TRADE ","\nTakeProit 3 ",tp3,
        " Risk/Reward Ratio : ", ra3 ," NO TRADE ");
   }
     if(ObjectFind("fe") != 0)
     {
        ObjectCreate("fe", OBJ_TEXT, 0, Time[0], fe);
        ObjectSetText("fe", " STOPLOSS LEVEL", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("fe",fe, Time[0], fe);
     }
     if(ObjectFind("fe Line") != 0)
     {
        ObjectCreate("fe Line", OBJ_HLINE, 0, Time[0],fe);
        ObjectSet("fe Line", OBJPROP_STYLE, STYLE_DASHDOT);
        ObjectSet("fe Line", OBJPROP_COLOR,OrangeRed );
     }
     else
     {
        ObjectMove("fe Line",0, Time[0], fe);
     }

     if(ObjectFind("tp1") != 0)
     {
        ObjectCreate("tp1", OBJ_TEXT, 0, Time[0], tp1);
        ObjectSetText("tp1", " PROFIT TARGET 1", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("tp1",tp1, Time[0],tp1 );
     }

     if(ObjectFind("tp1 Line") != 0)
     {
        ObjectCreate("tp1 Line", OBJ_HLINE, 0, Time[0],tp1);
        ObjectSet("tp1 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
        ObjectSet("tp1 Line", OBJPROP_COLOR,SpringGreen );
     }
     else
     {
        ObjectMove("tp1 Line",0, Time[0],tp1 );
     }

     if(ObjectFind("tp2") != 0)
     {
        ObjectCreate("tp2", OBJ_TEXT, 0, Time[0], tp2);
        ObjectSetText("tp2", " PROFIT TARGET 2", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("tp2",tp2, Time[0],tp2);
     }
     if(ObjectFind("tp2 Line") != 0)
     {
        ObjectCreate("tp2 Line", OBJ_HLINE, 0, Time[0],tp2);
        ObjectSet("tp2 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
        ObjectSet("tp2 Line", OBJPROP_COLOR,SpringGreen );
     }
     else
     {
        ObjectMove("tp2 Line",0, Time[0],tp2);
     }

     if(ObjectFind("tp3") != 0)
     {
        ObjectCreate("tp3", OBJ_TEXT, 0, Time[0], tp3);
        ObjectSetText("tp3", " PROFIT TARGET 3", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("tp3",tp3, Time[0],tp3);
     }
     if(ObjectFind("tp3 Line") != 0)
     {
        ObjectCreate("tp3 Line", OBJ_HLINE, 0, Time[0],tp3);
        ObjectSet("tp3 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
        ObjectSet("tp3 Line", OBJPROP_COLOR,SpringGreen );
     }
     else
     {
        ObjectMove("tp3 Line",0, Time[0],tp3);
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
打赏
版权所有转载请注明标题及链接:峰汇在线 » 黄金分割交易信号 fibocalc_V31.mq4
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏