Язь это ТР ))))
С этого момента можно поподробнее и желательно со скринами.
Язь это ТР ))))
Язь по свечамЧто это? Трал наверное?
//+------------------------------------------------------------------+
//| Shadow.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 300; // лось
extern int TakeProfit = 400; // язь
extern int TimeClose = 1440; // время закрытия
extern int CloseTake = 1; // 1-кроем сначала плюс 0-минус
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
if(type==1 || type==3 || type==5)
{
clr=Red;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Время открытия позиции |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
{
datetime dt=0;
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) dt=OrderOpenTime();
}
}
return(dt);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Mode()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0 && Bid>OrderOpenPrice()-StopLoss*Point && CloseTake==1)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
if(OrderTakeProfit()==0 && Bid<OrderOpenPrice()+TakeProfit*Point && CloseTake==0)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+TakeProfit*Point,0,Yellow);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0 && Ask<OrderOpenPrice()+StopLoss*Point && CloseTake==1)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
if(OrderTakeProfit()==0 && Ask>OrderOpenPrice()-TakeProfit*Point && CloseTake==0)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-TakeProfit*Point,0,Yellow);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>=TakeProfit*Point && CloseTake==1)
{
CloseAll(0);
}
if(OrderOpenPrice()-Bid>=StopLoss*Point && CloseTake==0)
{
CloseAll(0);
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()-Ask>=TakeProfit*Point && CloseTake==1)
{
CloseAll(1);
}
if(Ask-OrderOpenPrice()>=StopLoss*Point && CloseTake==0)
{
CloseAll(1);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1 && t!=Time[0])
{
PutOrder(0,Ask);
PutOrder(1,Bid);
t=Time[0];
}
if(CountTrades()>0) CloseProfit();
if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll(-1);
if(CountTrades()==1) Mode();
Comment("\n TimeOrderOpen: ",TimeOrderOpen(),
"\n TimeCurrent: ",TimeCurrent(),
"\n Minus: ",(int)(TimeCurrent()-TimeOrderOpen()));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Shadow.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 300; // лось
extern int TakeProfit = 400; // язь
extern int TimeClose = 1440; // время закрытия
extern int CloseTake = 1; // 1-кроем сначала плюс 0-минус
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
if(type==1 || type==3 || type==5)
{
clr=Red;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Время открытия позиции |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
{
datetime dt=0;
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) dt=OrderOpenTime();
}
}
return(dt);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Mode()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0 && Bid>OrderOpenPrice()-StopLoss*Point && CloseTake==1)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
if(OrderTakeProfit()==0 && Bid<OrderOpenPrice()+TakeProfit*Point && CloseTake==0)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+TakeProfit*Point,0,Yellow);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0 && Ask<OrderOpenPrice()+StopLoss*Point && CloseTake==1)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
if(OrderTakeProfit()==0 && Ask>OrderOpenPrice()-TakeProfit*Point && CloseTake==1)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-TakeProfit*Point,0,Yellow);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>=TakeProfit*Point && CloseTake==1)
{
CloseAll(0);
}
if(OrderOpenPrice()-Bid>=StopLoss*Point && CloseTake==0)
{
CloseAll(0);
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()-Ask>=TakeProfit*Point && CloseTake==1)
{
CloseAll(1);
}
if(Ask-OrderOpenPrice()>=StopLoss*Point && CloseTake==0)
{
CloseAll(1);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1 && t!=Time[0])
{
PutOrder(0,Ask);
PutOrder(1,Bid);
t=Time[0];
}
if(CountTrades()>0) CloseProfit();
if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll(-1);
if(CountTrades()==1) Mode();
Comment("\n TimeOrderOpen: ",TimeOrderOpen(),
"\n TimeCurrent: ",TimeCurrent(),
"\n Minus: ",(int)(TimeCurrent()-TimeOrderOpen()));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Shadow.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 300; // лось
extern int TakeProfit = 400; // язь
extern int TimeClose = 1440; // время закрытия
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
if(type==1 || type==3 || type==5)
{
clr=Red;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Время открытия позиции |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
{
datetime dt=0;
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) dt=OrderOpenTime();
}
}
return(dt);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Mode()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0 && Bid>OrderOpenPrice()-StopLoss*Point)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0 && Ask<OrderOpenPrice()+StopLoss*Point)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>=TakeProfit*Point)
{
CloseAll(0);
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()-Ask>=TakeProfit*Point)
{
CloseAll(1);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1 && t!=Time[0])
{
PutOrder(0,Ask);
PutOrder(1,Bid);
t=Time[0];
}
if(CountTrades()>0) CloseProfit();
if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll(-1);
if(CountTrades()==1) Mode();
Comment("\n TimeOrderOpen: ",TimeOrderOpen(),
"\n TimeCurrent: ",TimeCurrent(),
"\n Minus: ",(int)(TimeCurrent()-TimeOrderOpen()));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Shadow.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 0; // лось
extern int TakeProfit = 0; // язь
extern int TimeClose = 30; // время закрытия
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
if(type==1 || type==3 || type==5)
{
clr=Red;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Время открытия позиции |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
{
datetime t=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) t=OrderOpenTime();
}
}
}
return(t);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Mode()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0 && OrderProfit()<0)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0 && OrderProfit()<0)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>=TakeProfit*Point)
{
CloseAll(0);
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()-Ask>=TakeProfit*Point)
{
CloseAll(1);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1)
{
PutOrder(0,Ask);
PutOrder(1,Bid);
}
else CloseProfit();
if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll();
if(CountTrades()==1) Mode();
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Entry.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 100.0
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Lime
input int BarsCount=500;
input int Trend=0; //0-Flat. 1-Trend
input string MA_Inputs="---------------";
input int MAPeriod=30;
input int MAShift=0;
input int MAMethod=0;
input int MAPrice=0;
input string MACD_Inputs="---------------";
input int FastPeriod=12;
input int SlowPeriod=26;
input int SignalPeriod=9;
input int MACDPrice=0;
input string Stochastic_Inputs="---------------";
input int Kperiod = 5;
input int Dperiod = 3;
input int Slowing = 3;
input int StLevel = 30;
input string RSI_Inputs="---------------";
input int RSIPeriod=14;
input int RSIPrice=0;
input int RSILevel=30;
double up[];
double dn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,5);
SetIndexBuffer(0,up);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,5);
SetIndexBuffer(1,dn);
//---
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[])
{
//---
for(int i=1;i<BarsCount;i++)
{
double st1 = iStochastic(NULL,0,Kperiod,Dperiod,Slowing,0,0,0,i);
double st2 = iStochastic(NULL,0,Kperiod,Dperiod,Slowing,0,0,0,i+1);
double ma = iMA(NULL,0,MAPeriod,MAShift,MAMethod,MAPrice,i);
double macd = iMACD(NULL,0,FastPeriod,SlowPeriod,SignalPeriod,MACDPrice,0,i);
double rsi = iRSI(NULL,0,RSIPeriod,RSIPrice,i);
if(Trend==0)
{
if(st1<StLevel && macd<0 && rsi<RSILevel) dn[i] = 100;
if(st1>100-StLevel && macd>0 && rsi>100-RSILevel) up[i] = 100;
}
if(Trend==1)
{
if(macd<0 && close[i]<ma) up[i] = 100;
if(macd>0 && close[i]>ma) dn[i] = 100;
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Индикатор должен показывать стрелками то направление куда показывают два из трёх индикаторов (Heiken_Ashi_Smoothed, 3colormacd, Accelerator).
Стрелка индикатора должна находиться над или под нулевым баром (она может то появляться, то исчезать, т.к. индикатор 3colormacd может менять
цвета на нулевом баре несколько раз).
Если стрелка на покупку, то она должна находиться под свечей и сдвигаться в низ если цена идёт в низ т.е. не заползать на свечу, если сигнал на продажу, то стрелка должна находиться выше свечи и сдвигаться в верх если цена идёт в верх т.е. не заползать на свечу.
Необходимо сделать фильтр для более сильного сигнала Для этого в случае если показания индикатора 3colormacd на предыдущем баре были больше или
меньше установленного во входных параметрах значения, то индикатор должен выставить сигнал отличающийся, например это может быть стрелка большего
размера.
Например мы установили параметры для 3colormacd 0.01 и -0.02 т.е. если поступит сигнал БАЙ и значение индикатора на предыдущем баре находилось
ниже -0.02, то индикатор должен выставить большую стрелку, и если поступил сигнал СЕЛЛ и значение индикатора на предыдущем баре находилось выше 0.01,
то индикатор тоже должен выставить большую стрелку.
Сигналом смены тренда для индикатора (Heiken_Ashi_Smoothed) считать только когда индикатор полностью поменяет цвет (а то бывает так что он
одновременно бывает красно-зелёным, пример на скрине).
Нужно сделать чтоб на основе индикатора можно было бы написать советник. Индикатор должен быть на протяжении всей доступной истории, а то на
некоторых индикаторах есть ограничения по истории.
Во входных параметрах должны быть настройки индикатора (Heiken_Ashi_Smoothed), уровни индикатора 3colormacd (для увеличения стрелки), размеры и цвета
стрелок.
AM2