[MT4指标]fibocalc指标
主图指标
mt4指标类型:趋势指标
是否能用在mt4手机版上:否
是否含有未来函数:无
/*+------------------------------------------------------------------+
| FiboCalc |
| Author: Copyright ? 2006, |
| |
| |
+------------------------------------------------------------------+*/
#property copyright \"Copyright ? 2006,\"
#property link \"http://www.metaquotes.net\"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkGreen
#property indicator_color2 Maroon
#property indicator_color3 Magenta
#property indicator_color4 Goldenrod
//---- buffers
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 |
//+------------------------------------------------------------------+
int deinit()
{
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\");
Comment(\" \");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
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);
//---- name for DataWindow and indicator subwindow label
short_name=\"Prev Hi-Lo levels\";
IndicatorShortName(short_name);
SetIndexLabel(0, short_name);
SetIndexLabel(1, \"Maroon\");
SetIndexLabel(2, \"Magenta\");
SetIndexLabel(3, \"Goldenrod\");
//----
SetIndexDrawBegin(0,1);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
int limit, i;
//---- indicator calculation
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) != TimeDay(Time[i+1]))
{
PrevDayHi = LastHigh;
PrevDayLo = LastLow;
PrevDayOpen = LastClose;
PrevDayClose = Open;
//----
LastLow = Open;
LastHigh = Open;
LastOpen = Open;
LastClose = Open;
//----
if(ObjectFind(\"PrevDayHi\") != 0)
{
ObjectCreate(\"PrevDayHi\", OBJ_TEXT, 0, 0, 0);
ObjectSetText(\"PrevDayHi\", \" Day High\", fontsize, \"Arial\", Black);
}
else
{
ObjectMove(\"PrevDayHi\", 0, Time, PrevDayHi);
}
//----
if(ObjectFind(\"PrevDayLo\") != 0)
{
ObjectCreate(\"PrevDayLo\", OBJ_TEXT, 0, 0, 0);
ObjectSetText(\"PrevDayLo\", \" Day Low\", fontsize, \"Arial\", Black);
}
else
{
ObjectMove(\"PrevDayLo\", 0, Time, 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, PrevDayOpen);
}
//----
if(ObjectFind(\"PrevDayClose\") != 0)
{
ObjectCreate(\"PrevDayClose\", OBJ_TEXT, 0, 0, 0);
ObjectSetText(\"PrevDayClose\", \" Prev. Day Close\", fontsize,
\"Arial\", Black);
}
else
{
ObjectMove(\"PrevDayClose\", 0, Time, PrevDayClose);
}
}
PrevDayHiBuffer = PrevDayHi;
PrevDayLoBuffer = PrevDayLo;
PrevDayOpenBuffer = PrevDayOpen;
PrevDayCloseBuffer = PrevDayClose;
}
// BUY
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;
//----
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;
//----
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(0);
}
//+------------------------------------------------------------------+