
アレ?このロジック使えるんじゃね?
というような場面で、ロジックの確認を矢印で確認したい場合に使えるインジケーターです。
//+------------------------------------------------------------------+
//| ArrowTemplate.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
#property indicator_buffers 3
#property indicator_color1 Turquoise
#property indicator_color2 Crimson
#property indicator_color3 Khaki
double _Buy[];
double _Sell[];
double _Close[];
//--- indicator parameters
input int InpBandsPeriod=20; // Bands Period
input double InpBandsDeviations=2.0; // Bands Deviations
input int InpBandsShift=12; // Bands Shift
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SetIndexBuffer(0,_Buy);
SetIndexBuffer(1,_Sell);
SetIndexBuffer(2,_Close);
SetIndexStyle(0,DRAW_ARROW,0,2);
SetIndexStyle(1,DRAW_ARROW,0,2);
SetIndexStyle(2,DRAW_ARROW,0,3);
SetIndexArrow(0, 236);
SetIndexArrow(1, 238);
SetIndexArrow(2, 251);
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 limit = Bars - IndicatorCounted() - 1;
for (int i = 0; i < limit; i++)
{
double upper0=iBands(NULL,0,InpBandsPeriod,InpBandsDeviations,InpBandsShift,PRICE_CLOSE,MODE_UPPER,i);
double midle0=iBands(NULL,0,InpBandsPeriod,InpBandsDeviations,InpBandsShift,PRICE_CLOSE,MODE_MAIN,i);
double lower0=iBands(NULL,0,InpBandsPeriod,InpBandsDeviations,InpBandsShift,PRICE_CLOSE,MODE_LOWER,i);
double upper1=iBands(NULL,0,InpBandsPeriod,InpBandsDeviations,InpBandsShift,PRICE_CLOSE,MODE_UPPER,i+1);
double midle1=iBands(NULL,0,InpBandsPeriod,InpBandsDeviations,InpBandsShift,PRICE_CLOSE,MODE_MAIN,i+1);
double lower1=iBands(NULL,0,InpBandsPeriod,InpBandsDeviations,InpBandsShift,PRICE_CLOSE,MODE_LOWER,i+1);
//買い条件
if(Close[i]>upper0 && Close[i+1]<upper1)
{
_Buy[i]=Close[i];
}
//売り条件
else if(Close[i]<lower0 && Close[i+1]>lower1)
{
_Sell[i]=Close[i];
}
//決済損切り条件
else if((Open[i]>midle0 && Close[i]<midle0) || (Open[i]<midle0 && Close[i]>midle0) )
{
_Close[i]=Close[i];
}
}
return(rates_total);
}
コメント