double a=iCustom(NULL,TF,"Super-Point-Signal",0,1);
double b=iCustom(NULL,TF,"Super-Point-Signal",1,1);
<code>TimeBar=Time[0]+Period()*TaimOut*60;</code>
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 1; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern int StopLoss = 0; // стоп лосс
extern int TakeProfit = 0; // тейк профит
extern double Profit = 100; // общая прибыль
extern double Loss = 100; // общий убыток
extern int BULevel = 0; // уровень БУ
extern int BUPoint = 0; // пункты БУ
extern int TrailingStop = 0; // трал
extern bool Usredn = 1; // 1-использовать усреднение 0-не использовать
extern int Step = 50; // шаг усреднения
extern int Count = 5; // число ордеров
extern bool Buy = 1; //1-выстовить бай 0-не выставлять
extern bool Buystop = 1; //1-выстовить байстоп 0-не выставлять
extern int Step_stop = 50; // дистанция для стопордера
extern int Count_bs = 5; // число ордеров байстоп
extern bool Buylimit = 1; //1-выстовить байлимит 0-не выставлять
extern int Step_limit = 50; // дистанция для лимитордера
extern int Count_bl = 5; // число ордеров байлимт
extern bool Sell = 1; //1-выстовить селл 0-не выставлять
extern bool Sellstop = 1; //1-выстовить селлстоп 0-не выставлять
extern int Count_ss = 5; // число ордеров селлстоп
extern bool Selllimit = 1; //1-выстовить селлимит 0-не выставлять
extern int Count_sl = 5; // число ордеров селллимит
extern int Expiration = 5; // истечение
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int CloseSig = 0; // 1-закрытие по сигналу 0-нет
extern int TaimOut = 1; // тайм аут ордера
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern int MAPeriod = 240; // период МА
extern int EPeriod = 240;
extern int Method = 0;
extern int Price1 = 0;
extern int Shift = 0;
extern double Dev = 0.3;
datetime TimeBar;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int i;
double price=0;
double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
if(BULevel>0) BU();
if(TrailingStop>0) Trailing();
if(AllProfit()>Profit && Profit>0) CloseAll();
if(AllProfit()<-Loss && Loss>0) CloseAll();
//------------------------------
if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
{
if(Ask<EDN)
{
if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60;
//-----
if(Buylimit)
{
for (i=0; i<Count_bl; i++)
{
price=NormalizeDouble(Ask-Step_limit*(i+1)*Point,Digits);
PutOrder(2,price);
}
}
//-----
if(Sellstop)
{
for (i=0; i<Count_bl; i++)
{
price=NormalizeDouble(Bid-Step_stop*(i+1)*Point,Digits);
PutOrder(5,price);
}
}
}
//-------------------------------
if(Bid>EUP)
{
if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60;
//-----
if(Selllimit)
{
for (i=0; i<Count_sl; i++)
{
price=NormalizeDouble(Bid+Step_limit*(i+1)*Point,Digits);
PutOrder(3,price);
}
}
//-----
if(Buystop)
{
for (i=0; i<Count_sl; i++)
{
price=NormalizeDouble(Ask+Step_stop*(i+1)*Point,Digits);
PutOrder(4,price);
}
}
}
}
//---
if(Usredn)
{
if(CountTrades()>0 && CountTrades()<Count)
{
if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);
if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid);
}
}
if(CloseSig>0)
{
if(Bid>ma) CloseAll(0);
if(Ask<ma) CloseAll(1);
}
Comment("\n Lot: ",Lot(),
"\n Trades: ",CountTrades(),
"\n Profit: ",AllProfit());
}
//+------------------------------------------------------------------+
extern bool Buy = 1; //1-выстовить бай 0-не выставлять
extern int Count_bl = 5; // число ордеров байлимт
extern int Step_limit = 50; // дистанция для лимитордера
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 1; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern int StopLoss = 0; // стоп лосс
extern int TakeProfit = 0; // тейк профит
extern double Profit = 100; // общая прибыль
extern double Loss = 100; // общий убыток
extern int BULevel = 0; // уровень БУ
extern int BUPoint = 0; // пункты БУ
extern int TrailingStop = 0; // трал
extern bool Usredn = 1; // 1-использовать усреднение 0-не использовать
extern int Step = 50; // шаг усреднения
extern int Count = 5; // число ордеров
extern bool Buy = 1; //1-выстовить бай 0-не выставлять
extern bool Buystop = 1; //1-выстовить байстоп 0-не выставлять
extern int Step_stop = 50; // дистанция для стопордера
extern int Count_bs = 5; // число ордеров байстоп
extern bool Buylimit = 1; //1-выстовить байлимит 0-не выставлять
extern int Step_limit = 50; // дистанция для лимитордера
extern int Count_bl = 5; // число ордеров байлимт
extern bool Sell = 1; //1-выстовить селл 0-не выставлять
extern bool Sellstop = 1; //1-выстовить селлстоп 0-не выставлять
extern int Count_ss = 5; // число ордеров селлстоп
extern bool Selllimit = 1; //1-выстовить селлимит 0-не выставлять
extern int Count_sl = 5; // число ордеров селллимит
extern int Expiration = 5; // истечение
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int CloseSig = 0; // 1-закрытие по сигналу 0-нет
extern int TaimOut = 1; // тайм аут ордера
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern int MAPeriod = 240; // период МА
extern int EPeriod = 240;
extern int Method = 0;
extern int Price1 = 0;
extern int Shift = 0;
extern double Dev = 0.3;
datetime TimeBar;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int i;
double price=0;
double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
if(BULevel>0) BU();
if(TrailingStop>0) Trailing();
if(AllProfit()>Profit && Profit>0) CloseAll();
if(AllProfit()<-Loss && Loss>0) CloseAll();
//------------------------------
if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
{
if(Ask<EDN)
{
if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60;
//-----
if(Buylimit)
{
for (i=0; i<Count_bl; i++)
{
price=NormalizeDouble(Ask-Step_limit*(i+1)*Point,Digits);
PutOrder(2,price);
}
}
//-----
if(Sellstop)
{
for (i=0; i<Count_bl; i++)
{
price=NormalizeDouble(Bid-Step_stop*(i+1)*Point,Digits);
PutOrder(5,price);
}
}
}
//-------------------------------
if(Bid>EUP)
{
if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60;
//-----
if(Selllimit)
{
for (i=0; i<Count_sl; i++)
{
price=NormalizeDouble(Bid+Step_limit*(i+1)*Point,Digits);
PutOrder(3,price);
}
}
//-----
if(Buystop)
{
for (i=0; i<Count_sl; i++)
{
price=NormalizeDouble(Ask+Step_stop*(i+1)*Point,Digits);
PutOrder(4,price);
}
}
}
}
//---
if(Usredn)
{
if(CountTrades()>0 && CountTrades()<Count)
{
if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);
if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid);
}
}
if(CloseSig>0)
{
if(Bid>ma) CloseAll(0);
if(Ask<ma) CloseAll(1);
}
Comment("\n Lot: ",Lot(),
"\n Trades: ",CountTrades(),
"\n Profit: ",AllProfit());
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Envelopes for RSI.mq4 |
//| Copyright 2018, Tor |
//| https://www.mql5.com/ru/users/tormovies |
//+------------------------------------------------------------------+
/*
https://www.mql5.com/ru/code/21187
Очередная версия стрелочного канального индикатора Envelopes, который строится на стандартном индикаторе RSI.
Не все трейдеры согласны ждать пересечения индикатором RSi общих уровней перекупленности и перепроданности,
поэтому они строят усредненные каналы RSI, например, BB или Envelopes.
Envelopes построить стандартными способами над индикатором RSI нельзя, наш индикатор теперь решает эту проблему.
Индикатор рисует стрелки или вертикальные линии на местах пересечений данных уровней Envelopes:
?Для продажи - пересечение верхнего уровня Envelopes сверху вниз;
?Для покупки - пересечение нижнего уровня Envelopes снизу вверх.
*/
#property copyright "Copyright 2018, Tor"
#property link "https://www.mql5.com/ru/users/tormovies"
#property version "1.0"
#property description "This indicator is based on standard indicator Relative Strength Index"
#property description "and draws a Envelopes channel for him"
#property strict
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots 5
#property indicator_minimum 0
#property indicator_maximum 100
input string t1="--- Input RSI parameters ---";
input int RSIPeriod = 14; // RSI Period
input int MaxLevel = 70; // Max signal level
input int MinLevel = 30; // Min signal level
input color rsicolor=clrDodgerBlue;// RSI color
input int rsiwidth=1; // RSI width
input string t2="--- Input Envelopes parameters ---";
input int EnvPeriod=80; // Envelopes Period
input ENUM_MA_METHOD EnvMethod=MODE_EMA;//Envelopes method
input double EnvDeviation= 35;// Envelopes Deviation
input color Envcolor=clrLime;// Envelopes Color
input int EnvWidth=1;// Envelopes Width
input ENUM_LINE_STYLE EnvStyle=STYLE_SOLID;// Envelopes line style
input string t3="--- Other parameters ---";
input int alertShift=1; // Candle which look for the signal (0 = current candle)
input bool showLine=false; // Show vertical lines
input bool showArrows=true; // Show arrows
double RSIx[],bbup[],bbdn[],buy[],sell[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorShortName("Env for RSI");
SetIndexBuffer(0,RSIx);
SetIndexBuffer(1,bbup);
SetIndexBuffer(2,bbdn);
SetIndexBuffer(3,buy);
SetIndexBuffer(4,sell);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,rsiwidth,rsicolor);
SetIndexStyle(1,DRAW_LINE,EnvStyle,EnvWidth,Envcolor);
SetIndexStyle(2,DRAW_LINE,EnvStyle,EnvWidth,Envcolor);
SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,1,clrBlue);
SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID,1,clrRed);
SetIndexArrow(3,233);
SetIndexArrow(4,234);
SetIndexLabel(0,"RSI");
SetIndexLabel(1,"Envelopes Up");
SetIndexLabel(2,"Envelopes Down");
SetLevelValue(1,MinLevel);
SetLevelValue(2,MaxLevel);
SetLevelValue(3,50);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
int deinit()
{
del("Envfrs_");
return(0);
}
//+------------------------------------------------------------------+
//| 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; int xxx=0;
static datetime altime=0;
//---
if(rates_total<=1)
return(0);
//--- last counted bar will be recounted
limit=rates_total-prev_calculated;
if(prev_calculated>0)
limit=limit+2;
for(int x=limit-2; x>=0; x--)
{
RSIx[x]=iRSI(Symbol(),0,RSIPeriod,PRICE_CLOSE,x);
}
for(int x2=limit-2; x2>=0; x2--)
{
bbup[x2]=iEnvelopesOnArray(RSIx,0,EnvPeriod,EnvMethod,0,EnvDeviation,MODE_UPPER,x2);
bbdn[x2]=iEnvelopesOnArray(RSIx,0,EnvPeriod,EnvMethod,0,EnvDeviation,MODE_LOWER,x2);
}
for(int x3=limit-2; x3>=0; x3--)
{
if(RSIx[x3+alertShift]<bbup[x3+alertShift] && RSIx[x3+alertShift+1]>bbup[x3+alertShift+1])
{
if(showArrows){ sell[x3]=RSIx[x3]; }
if(showLine){ Lines(x3,"Sell",clrRed); }
}
if(RSIx[x3+alertShift]>bbdn[x3+alertShift] && RSIx[x3+alertShift+1]<bbdn[x3+alertShift+1])
{
if(showArrows){ buy[x3]=RSIx[x3]; }
if(showLine){ Lines(x3,"Buy",clrBlue); }
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
void Lines(int shift,string txt,color clr=clrRed)
{
datetime time=iTime(Symbol(),0,shift);
ObjectCreate(0,"Envfrs_"+txt+"_"+(string)time,OBJ_VLINE,0,time,0);
ObjectSetInteger(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_COLOR,clr);
ObjectSetInteger(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_STYLE,STYLE_DOT);
ObjectSetString(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_TOOLTIP,txt);
ObjectSetInteger(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_BACK,true);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int del(string name)
{
for(int n=ObjectsTotal()-1; n>=0; n--)
{
string Obj_Name=ObjectName(n);
if(StringFind(Obj_Name,name,0)!=-1)
{
ObjectDelete(Obj_Name);
}
}
return 0;
}
//+------------------------------------------------------------------+
<code>#include <stdlib.mqh> // Стандартная библиотека #include <b-Positions.mqh> // Стандартная библиотека</code>
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 1; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern int StopLoss = 0; // стоп лосс
extern int TakeProfit = 0; // тейк профит
extern double Profit = 100; // общая прибыль
extern double Loss = 100; // общий убыток
extern int BULevel = 0; // уровень БУ
extern int BUPoint = 0; // пункты БУ
extern int TrailingStop = 0; // трал
extern bool Usredn = 1; // 1-использовать усреднение 0-не использовать
extern int Step = 50; // шаг усреднения
extern int Count = 5; // число ордеров
extern bool Buy = 1; //1-выстовить бай 0-не выставлять
extern bool Buystop = 1; //1-выстовить байстоп 0-не выставлять
extern int Step_stop = 50; // дистанция для стопордера
extern int Count_bs = 5; // число ордеров байстоп
extern bool Buylimit = 1; //1-выстовить байлимит 0-не выставлять
extern int Step_limit = 50; // дистанция для лимитордера
extern int Count_bl = 5; // число ордеров байлимт
extern bool Sell = 1; //1-выстовить селл 0-не выставлять
extern bool Sellstop = 1; //1-выстовить селлстоп 0-не выставлять
extern int Count_ss = 5; // число ордеров селлстоп
extern bool Selllimit = 1; //1-выстовить селлимит 0-не выставлять
extern int Count_sl = 5; // число ордеров селллимит
extern int Expiration = 5; // истечение
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int CloseSig = 0; // 1-закрытие по сигналу 0-нет
extern int TaimOut = 1; // тайм аут ордера
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern int MAPeriod = 240; // период МА
extern int EPeriod = 240;
extern int Method = 0;
extern int Price1 = 0;
extern int Shift = 0;
extern double Dev = 0.3;
datetime TimeBar;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int i;
double price=0;
double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
if(BULevel>0) BU();
if(TrailingStop>0) Trailing();
if(AllProfit()>Profit && Profit>0) CloseAll();
if(AllProfit()<-Loss && Loss>0) CloseAll();
//--- стоповые в обратную сторону первой позиции
if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
{
if(Ask<EDN)
{
if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60;
if(Buylimit)
{
for (i=0; i<Count_bl; i++)
{
price=NormalizeDouble(Ask-Step_limit*(i+1)*Point,Digits);
PutOrder(2,price);
}
}
if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
}
if(Bid>EUP)
{
if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60;
if(Selllimit)
{
for (i=0; i<Count_sl; i++)
{
price=NormalizeDouble(Bid+Step_limit*(i+1)*Point,Digits);
PutOrder(3,price);
}
}
if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
}
}
//---
if(Usredn)
{
if(CountTrades()>0 && CountTrades()<Count)
{
if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);
if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid);
}
}
if(CloseSig>0)
{
if(Bid>ma) CloseAll(0);
if(Ask<ma) CloseAll(1);
}
Comment("\n Lot: ",Lot(),
"\n Trades: ",CountTrades(),
"\n Profit: ",AllProfit());
}
//+------------------------------------------------------------------+
ssg