直近のZIgZagでフィボナッチリトレースメントを引くインジケーターを作りました。
38.2%や61.8%地点への反発を狙いやすくなります。
現在進行形でZigZagが更新されているときは一つ前のZigZagでフィボナッチを引き、そうでない場合は最新のZigZagでフィボナッチを引くようにしています。
目次
ソースコード
//+------------------------------------------------------------------+
//| ZigZagFibnacchi.mq4 |
//| Copyright 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
input int InpDepth=12; // Depth
input int InpDeviation=5; // Deviation
input int InpBackstep=3; // Backstep
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
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 zigCnt=0;
datetime zigTime1=NULL;
datetime zigTime2=NULL;
double zig1=0;
double zig2=0;
if(iCustom(NULL,0,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,0)>0)
{
for (int i=0; i<100; i++)
{
double zig = iCustom(NULL,0,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i);
if(zig!=0)
{
zigCnt++;
}
if(zigCnt==2 && zigTime1==NULL)
{
zigTime1=iTime(NULL,0,i);
zig1=zig;
}
if(zigCnt==3)
{
zigTime2=iTime(NULL,0,i);
zig2=zig;
ObjectsDeleteAll();
if(zig1>zig2)
{
ObjectCreate(0,(string)zigTime1,OBJ_FIBO,0,zigTime2,iLow(NULL,0,iBarShift(NULL,0,zigTime2)),zigTime1,iHigh(NULL,0,iBarShift(NULL,0,zigTime1)));
}
if(zig1<zig2)
{
ObjectCreate(0,(string)zigTime1,OBJ_FIBO,0,zigTime2,iHigh(NULL,0,iBarShift(NULL,0,zigTime2)),zigTime1,iLow(NULL,0,iBarShift(NULL,0,zigTime1)));
}
return(rates_total);
}
}
}
else
{
for (int i=0; i<100; i++)
{
double zig = iCustom(NULL,0,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i);
if(zig!=0)
{
zigCnt++;
}
if(zigCnt==1 && zigTime1==NULL)
{
zigTime1=iTime(NULL,0,i);
zig1=zig;
}
if(zigCnt==2)
{
zigTime2=iTime(NULL,0,i);
zig2=zig;
ObjectsDeleteAll();
if(zig1>zig2)
{
ObjectCreate(0,(string)zigTime1,OBJ_FIBO,0,zigTime2,iLow(NULL,0,iBarShift(NULL,0,zigTime2)),zigTime1,iHigh(NULL,0,iBarShift(NULL,0,zigTime1)));
}
if(zig1<zig2)
{
ObjectCreate(0,(string)zigTime1,OBJ_FIBO,0,zigTime2,iHigh(NULL,0,iBarShift(NULL,0,zigTime2)),zigTime1,iLow(NULL,0,iBarShift(NULL,0,zigTime1)));
}
return(rates_total);
}
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
コメント