sl&tp values.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «sl&tp values.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Программа представляет собой пользовательский индикатор для MetaTrader 4, который отслеживает открытые торговые ордера по текущему символу и отображает на графике текстовые объекты с информацией о значениях стоп-лосса и тейк-профита. Для каждого активного ордера с установленными SL/TP рассчитывается расстояние в пунктах и стоимость в валюте счёта, после чего эти данные выводятся рядом с соответствующими ценовыми уровнями на графике.
Индикатор работает на основе таймера с интервалом 250 миллисекунд, периодически обновляя текстовые метки при изменении цен или времени. При закрытии ордеров программа автоматически удаляет соответствующие текстовые объекты с графика. Доступны настройки цвета отображения (красный/зелёный или цвет переднего плана графика) и смещения текстовых меток относительно ценовых уровней.
Настройки программы
| Настройка | Описание |
|---|---|
| Colors (Colors) | Colors — Определяет цвет отображения текстовых объектов SL и TP. При значении COLOR_RED_GREEN стоп-лосс отображается красным цветом, а тейк-профит — зелёным. При значении COLOR_FOREGROUND используется цвет переднего плана графика. |
| Offset (Offset) | Offset — Целочисленный параметр, задающий смещение текстовых меток SL и TP в пунктах относительно ценовых уровней стоп-лосса и тейк-профита на графике. |
Поиск по коду файла
#property version "1.01"
#property strict
#property indicator_chart_window
enum ColorSelect
{
COLOR_RED_GREEN,//Red/Green
COLOR_FOREGROUND,//Foreground
};
input ColorSelect Colors=COLOR_RED_GREEN;//Colors
input int Offset=25;//Offset
color COLOR_SL=clrNONE;
color COLOR_TP=clrNONE;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
EventKillTimer();
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol)
{
if(ObjectFind(0,"#"+IntegerToString(OrderTicket(),0,0)+" sl")==0)ObjectDelete(0,"#"+IntegerToString(OrderTicket(),0,0)+" sl");
if(ObjectFind(0,"#"+IntegerToString(OrderTicket(),0,0)+" tp")==0)ObjectDelete(0,"#"+IntegerToString(OrderTicket(),0,0)+" tp");
}
}
}
}
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[])
{
// код доступен только после оплаты
}
void OnTimer()
{
double sl_dist=0,sl_val=0,tp_dist=0,tp_val=0,tick_val=0;
string sl_name="", tp_name="", sl_pn="";
ENUM_ANCHOR_POINT anchor=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol)
{
tick_val=MarketInfo(_Symbol,MODE_TICKVALUE);//GetTickValue
if(ChartGetInteger(0,CHART_SHIFT,0))anchor=ANCHOR_LEFT;else anchor=ANCHOR_RIGHT;//SetAnchor
if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
{
sl_name="#"+IntegerToString(OrderTicket(),0,0)+" sl";//SetName
if(OrderStopLoss()>0)//StopLoss is active
{
if(OrderStopLoss()<=OrderOpenPrice())sl_pn=" +";else sl_pn=" -";//SetPos/Negative
sl_dist=(OrderStopLoss()-OrderOpenPrice())/_Point;//CalcDistance
sl_val=(sl_dist*tick_val)*OrderLots();//CalcValue
TextCreate(0,sl_name,0,Time[0],OrderStopLoss()+Offset*_Point,sl_pn+DoubleToString(MathAbs(sl_val),2)+_AccountCurrency()+" / "+DoubleToString(MathAbs(sl_dist),0)+"p","Tahoma",8,COLOR_SL,0,anchor,false,false,true,0);//ObjectCreate
if(ObjectFind(0,sl_name)==0)//Object is present
{
if((ObjectGetDouble(0,sl_name,OBJPROP_PRICE,0)-(OrderStopLoss()+Offset*_Point))!=0 || ObjectGetInteger(0,sl_name,OBJPROP_TIME,0)!=Time[0])//Price or Time has changed
{
ObjectSetDouble(0,sl_name,OBJPROP_PRICE,OrderStopLoss()+Offset*_Point);//SetPrice
ObjectSetString(0,sl_name,OBJPROP_TEXT,0,sl_pn+DoubleToString(MathAbs(sl_val),2)+_AccountCurrency()+" / "+DoubleToString(MathAbs(sl_dist),0)+"p");//SetText
ObjectSetInteger(0,sl_name,OBJPROP_TIME,Time[0]);//SetTime
}
}
}
else if(ObjectFind(0,sl_name)==0)ObjectDelete(0,sl_name);//Canceled
tp_name="#"+IntegerToString(OrderTicket(),0,0)+" tp";//SetName
if(OrderTakeProfit()>0)//TakeProfit is active
{
tp_dist=(OrderOpenPrice()-OrderTakeProfit())/_Point;//CalcDistance
tp_val=(tp_dist*tick_val)*OrderLots();//CalcValue
TextCreate(0,tp_name,0,Time[0],OrderTakeProfit()-Offset*_Point," +"+DoubleToString(tp_val,2)+_AccountCurrency()+" / "+DoubleToString(tp_dist,0)+"p","Tahoma",8,COLOR_TP,0,anchor,false,false,true,0);//ObjectCreate
if(ObjectFind(0,tp_name)==0)//Object is present
{
if((ObjectGetDouble(0,tp_name,OBJPROP_PRICE,0)-(OrderTakeProfit()-Offset*_Point))!=0 || ObjectGetInteger(0,tp_name,OBJPROP_TIME,0)!=Time[0])//Price or Time has changed
{
ObjectSetDouble(0,tp_name,OBJPROP_PRICE,OrderTakeProfit()-Offset*_Point);//SetPrice
ObjectSetString(0,tp_name,OBJPROP_TEXT,0," +"+DoubleToString(tp_val,2)+_AccountCurrency()+" / "+DoubleToString(tp_dist,0)+"p");//SetText
ObjectSetInteger(0,tp_name,OBJPROP_TIME,Time[0]);//SetTime
}
}
}
else if(ObjectFind(0,tp_name)==0)ObjectDelete(0,tp_name);//Canceled
}
if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)
{
sl_name="#"+IntegerToString(OrderTicket(),0,0)+" sl";//SetName
if(OrderStopLoss()>0)//StopLoss is active
{
if(OrderStopLoss()>=OrderOpenPrice())sl_pn=" +";else sl_pn=" -";//SetPos/Negative
sl_dist=(OrderOpenPrice()-OrderStopLoss())/_Point;//CalcDistance
sl_val=(sl_dist*tick_val)*OrderLots();//CalcValue
TextCreate(0,sl_name,0,Time[0],OrderStopLoss()-Offset*_Point,sl_pn+DoubleToString(MathAbs(sl_val),2)+_AccountCurrency()+" / "+DoubleToString(MathAbs(sl_dist),0)+"p","TahПоказано первые 50% кода (символов: 7997)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.