в нем зоны на линии заменить?
объясните пож-ста какой в этом смысл??

в нем зоны на линии заменить?
мне просто индикатор нужен
добавить в бота время торговли для открытия ордеров.
Спасибо огромное!!!
<code>//+------------+-----------------------------------------------------+ //| v.22.04.05 | up and Down.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_buffers 1 #property indicator_style1 STYLE_SOLID #property indicator_color1 Yellow #property indicator_level1 0 //#property indicator_level2 -2 //#property indicator_level3 2 //#property indicator_level4 -1 //#property indicator_level5 1 #property indicator_minimum -3 #property indicator_maximum 3 #define PREFIX "xxx" extern int period = 18; extern bool Arrow = true; extern int ArrowSize = 1; extern int SIGNAL_BAR = 1; extern color clArrowBuy = Blue; extern color clArrowSell = Red; double ExtBuffer0[]; // ------------------------------------------------------------------------------------------------------------- int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtBuffer0); IndicatorShortName("Up and Down"); return(0); } // ------------------------------------------------------------------------------------------------------------- int deinit() { for (int i = ObjectsTotal()-1; i >= 0; i--) if (StringSubstr(ObjectName(i), 0, StringLen(PREFIX)) == PREFIX) ObjectDelete(ObjectName(i)); return(0); } // ------------------------------------------------------------------------------------------------------------- int start() { int limit; int counted_bars; //double prev, current, old; double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0; double price; double MinL=0; double MaxH=0; counted_bars = IndicatorCounted(); if ( counted_bars > 0 ) counted_bars--; limit = Bars - counted_bars; for(int i=0; i<limit; i++) { MaxH = High[iHighest(NULL,0,MODE_CLOSE,period,i)]; MinL = Low[iLowest(NULL,0,MODE_CLOSE,period,i)]; price = (Open[i]+ Close[i])/2; if(MaxH-MinL == 0) Value = 0.33*2*(0-0.5) + 0.67*Value1; else Value = 0.33*2*((price-MaxH)/(MinL-MaxH)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); if(1-Value == 0) ExtBuffer0[i]=0.5+0.5*Fish1; else ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0[i]; } int counted_bars2 = IndicatorCounted(); if ( counted_bars2 > 0 ) counted_bars2--; int limit2 = Bars - counted_bars2; for ( int j = limit2; j >= 0; j-- ) { if ( Arrow ) { if ( ExtBuffer0[j+SIGNAL_BAR+1] > 0.0 && ExtBuffer0[j+SIGNAL_BAR] < 0.0 ) manageArr(j+1, clArrowBuy, 233, false); if ( ExtBuffer0[j+SIGNAL_BAR+1] < 0.0 && ExtBuffer0[j+SIGNAL_BAR] > 0.0 ) manageArr(j+1, clArrowSell, 234, true ); } } return(0); } // ------------------------------------------------------------------------------------------------------------- void manageArr(int j, color clr, int theCode, bool up) { string objName = PREFIX + Time[j]; double gap = 3.0*iATR(NULL,0,20,j)/4.0; ObjectCreate(objName, OBJ_ARROW,0,Time[j],0); ObjectSet (objName, OBJPROP_COLOR, clr); ObjectSet (objName, OBJPROP_ARROWCODE,theCode); ObjectSet (objName, OBJPROP_WIDTH,ArrowSize); if ( up ) ObjectSet(objName,OBJPROP_PRICE1,Open[j]+gap); else ObjectSet(objName,OBJPROP_PRICE1,Close[j] -gap); } // ------------------------------------------------------------------------------------------------------------- </code>
void CloseAll()
{
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()==OP_BUY)
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==OP_SELL)
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
{
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()==type || (OrderType()>=0 && type==-1)) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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,STYLE_SOLID);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров |
//+------------------------------------------------------------------+
void DelOrder()
{
bool del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()>1) del=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
//| Одна сделка в день |
//+------------------------------------------------------------------+
bool OneDayDeal()
{
bool result=true;
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2 && TimeDay(OrderOpenTime())==Day())
{
result=false;//tp
}
}
}
return(result);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int StartBar=iBarShift(NULL,0,StringToTime((string)StartH+":00"+(string)StartM+":00"));
int EndBar=iBarShift(NULL,0,StringToTime((string)EndH+":00"+(string)EndM+":00"));
double up = High[iHighest(NULL,0,MODE_HIGH,StartBar-EndBar,EndBar)];
double dn = Low[iLowest(NULL,0,MODE_LOW,StartBar-EndBar,EndBar)];
double delta=(up-dn)/Point;
double TargetUP=(up-dn)*(TargetLevel-100)/100+up; // Верхняя цель
double TargetDN=dn-(up-dn)*(TargetLevel-100)/100; // Нижняя цель
PutTrendLine("UP",Time[StartBar],up,Time[EndBar],up,Red);
PutTrendLine("DN",Time[StartBar],dn,Time[EndBar],dn,Blue);
PutTrendLine("tUP",Time[1],TargetUP,Time[EndBar],TargetUP,Yellow);
PutTrendLine("tDN",Time[1],TargetDN,Time[EndBar],TargetDN,Green);
if(CountTrades()<1 && OneDayDeal() && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && delta>MinDelta && delta<MaxDelta)
{
if(CountOrders(4)<1 && Bid<up) PutOrder(4,up+Delta*Point);
if(CountOrders(5)<1 && Bid>dn) PutOrder(5,dn-Delta*Point);
}
if(!isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
{
DelOrder();
if(CloseMarket>0) CloseAll();
}
Comment("\n up: ",up,
"\n dn: ",dn,
"\n start: ",StartBar,
"\n end: ",EndBar,
"\n delta: ",delta);
}
//+------------------------------------------------------------------+
… самый близкий вариант
//+------------------------------------------------------------------+
//| MorningFlat.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 2; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern double TargetLevel = 200; // таргет уровень
extern int StopLoss = 0; // лось
extern int TakeProfit = 0; // язь
extern int Delta = 50; // расстояние от границы канала
extern int MinDelta = 200; // минимальная ширина канала
extern int MaxDelta = 400; // максимальная ширина канала
extern int StartHour = 10; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 50; // минута окончания торговли
extern int StartH = 0; // час начала канала
extern int StartM = 30; // минута начала канала
extern int EndH = 9; // час окончания канала
extern int EndM = 30; // минута окончания канала
extern int CloseMarket = 1; // закрываем позу по окончании торговли
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("");
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 30.04.2009 |
//| Описание : Возвращает флаг разрешения торговли по времени. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| hb - часы времени начала торговли |
//| mb - минуты времени начала торговли |
//| he - часы времени окончания торговли |
//| me - минуты времени окончания торговли |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
{
datetime db, de; // Время начала и окончания работы
int hc; // Часы текущего времени торгового сервера
db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
hc=TimeHour(TimeCurrent());
if(db>=de)
{
if(hc>=he) de+=24*60*60; else db-=24*60*60;
}
if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
else return(False);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
int StartBar=iBarShift(NULL,0,StringToTime((string)StartH+":00"+(string)StartM+":00"));
int EndBar=iBarShift(NULL,0,StringToTime((string)EndH+":00"+(string)EndM+":00"));
double up = High[iHighest(NULL,0,MODE_HIGH,StartBar-EndBar,EndBar)];
double dn = Low[iLowest(NULL,0,MODE_LOW,StartBar-EndBar,EndBar)];
double delta=(up-dn)/Point;
double TargetUP=(up-dn)*(TargetLevel-100)/100+up; // Верхняя цель
double TargetDN=dn-(up-dn)*(TargetLevel-100)/100; // Нижняя цель
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); else sl=up;
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); else tp=TargetDN;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); else sl=dn;
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); else tp=TargetUP;
}
r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",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);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0)
{
lot=OrderLots()*KLot;
}
}
if(lot>MaxLot)lot=Lots;
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
перезалил.
мне интересно узнать на сколько вы обесценили мою работу?
из индикатора непросто вытащить сигнал, а без этого прописывать детали не имеет смысла.
из индикатора непросто вытащить сигнал
готово: www.opentraders.ru/downloads/3850/
За ваши деньги любой каприз...
Marik007