//+------------------------------------------------------------------+
//| DoubleRect.mq4 |
//| Copyright 2023, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_chart_window
input int days=5;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
{
ObjectDelete(0,name);
ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
double p1=iOpen(NULL,PERIOD_D1,1);
double p2=low[iLowest(NULL,0,MODE_LOW,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
datetime t1=iTime(NULL,PERIOD_D1,1);
datetime t2=time[iLowest(NULL,0,MODE_LOW,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
PutTrendLine("day"+"12",t1,p1,t2,p2,Gold);
double p13=iOpen(NULL,PERIOD_D1,1);
double p23=high[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
datetime t13=iTime(NULL,PERIOD_D1,1);
datetime t23=time[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
PutTrendLine("day"+"13",t13,p13,t23,p23,Gold);
double p14=iOpen(NULL,PERIOD_D1,1);
double p24=high[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
datetime t14=iTime(NULL,PERIOD_D1,1);
datetime t24=time[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
PutTrendLine("day"+"14",t13,p13,t23,p23,Gold);
Comment("\n T1: ",iTime(NULL,PERIOD_D1,0),
"\n T2: ",t2,
"\n T3: ",iTime(NULL,PERIOD_D1,1)+60*60*12,
"\n low: ",low[iLowest(NULL,0,MODE_LOW,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))],
"\n bar: ",iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)));
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool Stop(string symb, ulong magic)
{
HistorySelect(0,TimeCurrent());
ulong ticket=0;
for(int i=HistoryDealsTotal()-1; i>=0; i--)
{
if(PositionGetString(POSITION_SYMBOL)==symb)
{
if(PositionGetInteger(POSITION_MAGIC)==magic)
{
if((ticket=HistoryDealGetTicket(i))>0)
{
if(HistoryDealGetInteger(ticket,DEAL_REASON)==DEAL_REASON_SL)
return(true);
}
break;
}
}
}
return(false);
}
Только не понял почему в МТ4 версии такой код? StopLoss?
Рисунок-пояснение прилагаю.
2) прошу добавить настройки для каждой серии ордеров (кол-во ордеров) для 5 колен будет достаточно, после последнего колена открытие усреднения по 2 ордера через шаг и усреднени ( 1 серия — 5 ордеров, 2 серия — 4 ордера и тд это пример)
AM2