могите пожалуйста, как прописать код в советнике что бы стоп сова ставила за хай-лой сигнального треугольника?
//+------------------------------------------------------------------+
//| BuySell11.mq4 |
//| Copyright 2019, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, 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 = 600; // язь
extern bool TrailingStop = 0; // включение трала
extern int Count = 1; // свеча для трала
extern int Delta = 20; // расстояние от хай лоу
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern string Name="Triangle1";
double tri[3];
double sl=0,tp=0,max=0,min=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
PutButton("B",100,120,"BUY");
PutButton("S",100,80,"SELL");
PutButton("C",100,40,"CLOSE");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete(0,"B");
ObjectDelete(0,"S");
ObjectDelete(0,"C");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
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);
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*_Point,_Digits); else sl=max;
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*_Point,_Digits); else sl=min;
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
{
double pr=0;
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))
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double p1=NormalizeDouble(ObjectGetDouble(0,Name,OBJPROP_PRICE1),_Digits);
double p2=NormalizeDouble(ObjectGetDouble(0,Name,OBJPROP_PRICE2),_Digits);
double p3=NormalizeDouble(ObjectGetDouble(0,Name,OBJPROP_PRICE3),_Digits);
tri[0]=p1;tri[1]=p2;tri[2]=p3;
max=tri[ArrayMaximum(tri,3,0)];
min=tri[ArrayMinimum(tri,3,0)];
if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
{
PutOrder(0,Ask);
ObjectSetInteger(0,"B",OBJPROP_STATE,false);
}
if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
{
PutOrder(1,Bid);
ObjectSetInteger(0,"S",OBJPROP_STATE,false);
}
if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
{
CloseAll();
ObjectSetInteger(0,"C",OBJPROP_STATE,false);
}
Comment("\n Pr1: ",p1,
"\n Pr2: ",p2,
"\n Pr3: ",p3,
"\n Max: ",max,
"\n Min: ",min);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Triangles.mq4 |
//| Copyright 2019, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 333; // лось
extern int TakeProfit = 444; // язь
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern string IndName="Semafor+123Triangles_Robo";
int tri=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;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
}
r=OrderSend(NULL,type,Lots,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);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int Count()
{
int count=0;
for(int i=0;i<ObjectsTotal();i++)
{
if(ObjectType(ObjectName(i))==OBJ_TRIANGLE) count++;
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string Name()
{
string nm=ObjectName(1);
for(int i=ObjectsTotal()-1;i>0;i--)
{
if(ObjectType(ObjectName(i))==OBJ_TRIANGLE) nm=ObjectName(i);
break;
}
return(nm);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double ind=iCustom(NULL,0,IndName,0,1);
Comment("\n Tri: ",Count(),
"\n Name: ",Name());
}
//+------------------------------------------------------------------+
stochastic-mtf-with-alert XAUUSD,H1: indicator is too slow, 1841 ms. rewrite the indicator, please
Перед открытием ордера все показания были по нолям.
Как только открыл ордер осталась только индикация времени.
Дождался закрытия текущей свечи. Но и потом данные не появились.
Кроме того очень маленький шрифт и не в том месте, где хотелось бы наблюдать за индикатором.
apologetest