risk-reward-box-totalview-bt.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «risk-reward-box-totalview-bt.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный индикатор отображает на графике интерактивные графические ячейки для анализа соотношения риска и прибыли. Он создаёт два перетаскиваемых прямоугольника, обозначающих зоны риска и награды, и отображает текстовые метки с ключевыми ценовыми уровнями.
Индикатор рассчитывает и выводит отношение риск/прибыль (R/R), цены тейк-профита и стоп-лосса, расстояние в пунктах и процент риска от баланса счёта. Результаты отображаются как в виде подписей на графике, так и в виде отдельной метки в углу экрана.
Предусмотрены две кнопки для сброса и удаления графических объектов. Настройки позволяют управлять размером позиции, таймфреймом анализа, цветами, размерами шрифтов и положением элементов на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| RiskLotSize | Размер лота риска — Размер лота для расчёта процента риска от баланса |
| Chart timeframe to get H/L (TimeFrame) | Таймфрейм — Таймфрейм для получения максимумов и минимумов цен |
| Delete_When_Chart_Change | Удаление при смене графика — Удаление графических объектов при смене символов или таймфрейма |
| ButtonConfig | Настройка текста кнопок — Текстовый заголовок группы настроек кнопок |
| Button_X_Position | Позиция кнопок по X — Горизонтальная позиция кнопок на графике |
| Button_Y_Position | Позиция кнопок по Y — Вертикальная позиция кнопок на графике |
| Button_Font_Color | Цвет шрифта кнопок — Цвет текста на кнопках управления |
| BoxTextConfig | Настройка текста ячеек — Текстовый заголовок группы настроек информационных ячеек |
| Box_Text_Font_Color | Цвет шрифта ячеек — Цвет текста информационных подписей на графике |
| Box_Text_Font_Size | Размер шрифта ячеек — Размер шрифта информационных подписей на графике |
| Label_Text_Config | Настройка текста меток — Текстовый заголовок группы настроек меток |
| Show_RR_To_Screen | Показать R/R на экране — Отображение отношения риск/прибыль в виде метки в углу графика |
| RR_coner | Угол расположения R/R — Угол привязки метки отношения риск/прибыль на графике |
| RR_Font_Size | Размер шрифта R/R — Размер шрифта метки отношения риск/прибыль в углу экрана |
Поиск по коду файла
???#property copyright "Copy right 2020 ZiWox Group && BlueRain"
#property version "1.00"
#property strict
#property indicator_chart_window
#property description "Modified by BlueRain 8/20/2022"
input double RiskLotSize = 1;
input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; //Chart timeframe to get H/L
input bool Delete_When_Chart_Change = false;
input string ButtonConfig = "-------Button Location -----";
input int Button_X_Position = 20;
input int Button_Y_Position = 30;
input color Button_Font_Color = clrRed;
input string BoxTextConfig = "------Box Text Config-----";
input color Box_Text_Font_Color = clrRed;
input int Box_Text_Font_Size = 8;
input string Label_Text_Config = "-------Label Text Config --";
input bool Show_RR_To_Screen = true;
input ENUM_BASE_CORNER RR_coner = CORNER_LEFT_LOWER;
input int RR_Font_Size = 20;
string LabelID = "RR";
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if (Delete_When_Chart_Change)
{
deleteObjects();
ObjectDelete("Reset");
ObjectDelete("Remove");
}
}
void deleteObjects()
{
string lookFor = LabelID;
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK)
{
if(sparam=="Reset") // Pause forwarder
{
ChartClean();
WriteRR();
}
if(sparam=="Remove") // P
{
RemoveBox();
}
}
if(id==CHARTEVENT_CHART_CHANGE)
{
WriteRR();
}
if(id==CHARTEVENT_OBJECT_DRAG)
{
if(sparam==LabelID+".RR_Green" )
{
double price = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1); // low green
int time2 = (int)ObjectGet(LabelID+".RR_Green",OBJPROP_TIME2);
int time1 = (int)ObjectGet(LabelID+".RR_Green",OBJPROP_TIME1);
ObjectSet(LabelID+".RR_Pink",OBJPROP_PRICE2,price); // top pink
ObjectSet(LabelID+".RR_Pink",OBJPROP_TIME1,time1); // mid
ObjectSet(LabelID+".RR_Pink",OBJPROP_TIME2,time2); // mid
}
if(sparam==LabelID+".RR_Pink" )
{
double price1 = ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1); // top pink
double price2 = ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2); // top pink
int time2 = (int)ObjectGet(LabelID+".RR_Pink",OBJPROP_TIME2);
int time1 = (int)ObjectGet(LabelID+".RR_Pink",OBJPROP_TIME1);
ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE1,price2); // low green
ObjectSet(LabelID+".RR_Green",OBJPROP_TIME1,time1);
ObjectSet(LabelID+".RR_Green",OBJPROP_TIME2,time2);
if( ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1) > ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2) )
{
double gapisze = MathAbs(ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1)-ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2));
price1 = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1);
price2 = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2);
ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE1,price1);
ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE2,price1-gapisze);
}
if( ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1) < ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2) )
{
double gapisze = MathAbs(ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1)-ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2));
price1 = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1);
price2 = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2);
ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE1,price1);
ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE2,price1+gapisze);
}
}
WriteRR();
WindowRedraw();
}
}
void start()
{
// код доступен только после оплаты
}
void WriteRR()
{
double balance = AccountBalance();
double riskper = 0;
double PointValue=(((MarketInfo(Symbol(),MODE_TICKVALUE)*Point)/MarketInfo(Symbol(),MODE_TICKSIZE))*RiskLotSize);
double PipValue=PointValue*10;
double point = MarketInfo(Symbol(), MODE_POINT);
double RewardBaseprice = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1); // low green
double RewaredTPprice = ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2); // low green
double RiskBaseprice = ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1); // low green
double RiskSLprice = ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2); // low green
double RewardH = MathAbs(RewardBaseprice - RewaredTPprice);
double RiskH = MathAbs(RiskBaseprice - RiskSLprice);
double RRratio = (RewardH/RiskH);
datetime LocationTime = (datetime) ObjectGet(LabelID+".RR_Green",OBJPROP_TIME1);
int x,y;
ChartTimePriceToXY(0, 0, LocationTime, RewaredTPprice, x, y);
if ( RewaredTPprice < RiskSLprice ) y=y-15;
double range = MathAbs(RewaredTPprice - RewardBaseprice)/Point/10;
riskper = (PipValue*range)/balance*100;
DrawLabel( "TPPrice",x,y, "TP : " + DoubleToStr(RewaredTPprice,Digits) + " / " + DoubleToString(range,0) + " / " + DoubleToStr(PipValue*range,2) + " / " + DoubleToStr(riskper,2) + "%",Box_Text_Font_Size,"Arial Rounded MT Bold",Box_Text_Font_Color);
ChartTimePriceToXY(0, 0, LocationTime,RewardBaseprice, x, y);
y = y - 15;
DrawLabel( "Ratio",x,y, "R/R 1: " + DoubleToStr(RRratio,2) + " / " + DoubleToString(RewardBaseprice,Digits) + " / " + DoubleToStr(RiskLotSize,2) + " / " + DoubleToStr(PipValue,2) ,Box_Text_Font_Size,"Arial Rounded MT Bold",Box_Text_Font_Color);
ChartTimePriceToXY(0, 0, LocationTime,RiskBaseprice, x, y);
if ( RewaredTPprice > RiskBaseprice ) y=y-15;
range = MathAbs(RiskSLprice - RiskBaseprice)/Point/10;
riskper = (PipValue*range)/balance*100;
DrawLabel( "SLPrice",x,y, "SL: " + DoubleToStr(RiskBaseprice,2) + " / " + DoubleToString(-range,0) + " / " + DoubleToStr(PipValue*-range,2) + " / " + DoubleToStr(-riskper,2) + "%", Box_Text_Font_Size,"Arial Rounded MT Bold",Box_Text_Font_Color);
if ( Show_RR_To_Screen )
{
string id = LabelID + "RR";
if (ObjectFind(0,id)<0) ObjectCreate(id,OBJ_LABEL,0,0,0,0,0);
ObjectSet(id,OBJPROP_CORNER,RR_coner);
ObjectSet(id,OBJPROP_XDISTANCE,10);
ObjectSet(id,OBJPROP_YDISTANCE,10);
ObjectSetText(id, "R/R 1: " + DoubleToStr(RRratio,2),RR_Font_Size,"TAHOMA",Tomato);
}
else
{
ObjectDelete(LabelID + "RПоказано первые 50% кода (символов: 11260)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.