ну вот эта часть же необязательной была?
extern bool StopOrders = false; //выставлять стоп ордера
extern bool LimitOrders = true; //выставлять лимит ордера
extern double PriceSellStop = 0; //если 0, то начальная линия ставится на минимум прошлого дня
extern double PriceBuyStop = 0; //если 0, то начальная линия ставится на максимум прошлого дня
extern double PriceSellLimit = 0; //если 0, то начальная линия ставится на максимум прошлого дня
extern double PriceBuyLimit = 0; //если 0, то начальная линия ставится на минимум прошлого дня
extern int Stoploss = 0, //стоплосс ордеров
Takeprofit = 0; //тейкпрофит ордеров
extern double Lot = 0.1; //
extern int Magic = 100; //уникальный номер ордеров этого советника
extern int FontSize = 8; //размер шрифта
extern color ColorText = Lime;
//+------------------------------------------------------------------+
//| Begin.mq4 |
//| Copyright © 2007 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Heaven"
#property link "http://Beginner.com"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#define SH_BUY 1
#define SH_SELL -1
//---- Входные параметры
extern bool SoundON=true;
extern int AllBars=0;//Для скольки баров считать. 0 - для всех.
extern int Otstup=30;//Отступ.
extern double Per=9;//Период.
//----
int SH,NB,i,UD;
double R,SHMax,SHMin;
double BufD[];
double BufU[];
int flagval1=0;
int flagval2=0;
//+------------------------------------------------------------------+
//| Функция инициализации |
//+------------------------------------------------------------------+
int init()
{
//В NB записываем количество баров для которых считаем индикатор
if (Bars<AllBars+Per || AllBars==0) NB=Bars-Per; else NB=AllBars;
IndicatorBuffers(2);
IndicatorShortName("SHI_SilverTrendSig");
SetIndexStyle(0,DRAW_ARROW,0,1);
SetIndexStyle(1,DRAW_ARROW,0,1);
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexBuffer(0,BufU);
SetIndexBuffer(1,BufD);
SetIndexDrawBegin(0,Bars-NB);//Индикатор будет отображаться только для NB баров
SetIndexDrawBegin(1,Bars-NB);
ArrayInitialize(BufD,0.0);//Забьём оба буфера ноликами. Иначе будет мусор при смене таймфрейма.
ArrayInitialize(BufU,0.0);
return(0);
}
//+------------------------------------------------------------------+
//| Функция деинициализации |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Собсна индикатор |
//+------------------------------------------------------------------+
int start()
{
int CB=IndicatorCounted();//
i=Bars-CB-1;//
/* Тут вот та самая оптимизационная фишка. В язык введена функция, которая возвращает количество
посчитанных баров, причём очень хитро. При первом вызове индикатора это 0, всё понятно, ещё ничего
не считалось, а затем выдаёт количество обсчитанных баров минус один. Т.е. если всего баров 100,
то функция вернёт 99. Я ввёл такой код, выше у меня определялась NB - кол-во баров подлежащих
обсчёту. В принципе этот параметр можно и выкинуть, однако для тех кто в танке (I80286) можно
и оставить. Так вот, здесь, при первом вызове NB остаётся прежней, а при последующих уменьшается
до последнего бара, т.е. 1 или 2, ну или сколько там осталось посчитать*/
/*прошу посмотреть индикатор и попробовать его исправить.
индикатор достаточно точный, но проблемма в том, что он не
обновляет данные и что бы он работал(находил точки разворота),
его нужно постоянно вручную обновлять следующим способом:
либо заходить в свойства имитируя установку на график,
либо переключать таймфреймы((
вот например на М1 или М5 эти манипуляции приходится делать
чуть ли не каждые две-три минуты*/
for(i=1;i<=CB;i++)//Прочёсываем график от 1 до NB
{
int k=0;
SHMax=High[Highest(NULL,0,MODE_HIGH,Per,i)];//хай и лоу за 10 баров
SHMin=Low[Lowest(NULL,0,MODE_LOW,Per,i)];
if (Close[i]<SHMin+Otstup*Point && UD!=SH_SELL)//если текущее закрытие меньше минимума... т.е. проход цены от лоя
{
// Pop an Alert
if (k==1 && flagval1==0)
{
flagval1=1;//ставим только стрелку под лоем
flagval2=0;
if (SoundON) Alert("BUY signal at Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());
}
BufU[i]=Low[i]-Otstup*Point;//ставим стрелку под лоем
UD=SH_SELL;
}
if (Close[i]>SHMax-Otstup*Point && UD!=SH_BUY)
{
// pop an Alert
if (k==1 && flagval2==0)
{
flagval2=1;//ставим только стрелку над хаем
flagval1=0;
if (SoundON) Alert("SELL signal at Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());
}
BufD[i]=High[i]+Otstup*Point; UD=SH_BUY;//ставим стрелку над хаем
}
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Pointer.mq4 |
//| Copyright © 2015, AM2. |
//| http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2."
#property link "http://www.forexsyatems.biz"
#define MagicNumber 20110315
extern double StopLoss = 2400;
extern double TakeProfit = 900;
extern double Slip = 20;
extern string Pointer = "BUY";
extern double Lot = 0.1;
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void OnTick()
{
if(OrdersTotal()<1)
{//----
int res;
double price=0;
//--- удаление всех созданных объектов
int obj_total=ObjectsTotal();
for(int i=obj_total-1;i>=0;i--)
{
string name=ObjectName(i);
if(ObjectType(name)==OBJ_ARROW)
{
price=ObjectGet(Pointer,OBJPROP_PRICE1);
}
}
Comment("\n Цена покупки ",price,
"\n Цена Ask ",Ask);
//---- buy
if((Ask>=price && Ask<=price+Slip*Point) || (Ask<=price && Ask>=price-Slip*Point))
{
res=OrderSend(Symbol(),OP_BUY,Lot,Ask,100,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
if(res<0)
{
Print("Ошибка: ",GetLastError());
Sleep(500);
RefreshRates();
}
else
Print("OK Order Buy");
return;
}
/*---- sell
if(price==Bid)
{
res=OrderSend(Symbol(),OP_SELL,Lot,Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
return;
} */
}
}
//+------------------------------------------------------------------+
AM2