risk reward box.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «risk reward box.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, отображающий на графике прямоугольные области двух цветов, обозначающие зоны риска и потенциальной прибыли. Области строятся на основе экстремумов цен за определённый период и могут перемещаться пользователем путём перетаскивания за границы. Нажатие кнопки «Reset» сбрасывает отображение и перерисовывает области заново. Индикатор поддерживает работу на текущем таймфрейме или на всех открытых графиках одновременно.
Настройки программы
| Настройка | Описание |
|---|---|
| Draw Box on all opened charts (DrawAllChart) | Рисовать на всех графиках — Переключатель, определяющий, отображать ли прямоугольные области на всех открытых графиках или только на текущем. |
| Cart timeframe (TimeFrame) | Таймфрейм — Выбор таймфрейма, на котором производятся расчёты экстремумов для построения областей. |
Поиск по коду файла
#property version "1.1"
#property strict
#property indicator_chart_window
input bool DrawAllChart = false; // Draw Box on all opened charts
input ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Cart timeframe
string OBJprefix = "Risk_Reward_Box";
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
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();
GlobalSet();
}
}
if(id==CHARTEVENT_OBJECT_DRAG)
{
if(sparam==OBJprefix+".Risk_Reward_Green" )
{
double price = ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1); // low green
int time2 = (int)ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_TIME2);
int time1 = (int)ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_TIME1);
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE2,price); // top pink
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME1,time1); // mid
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME2,time2); // mid
}
if(sparam==OBJprefix+".Risk_Reward_Pink" )
{
double price1 = ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE1); // top pink
double price2 = ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE2); // top pink
int time2 = (int)ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME2);
int time1 = (int)ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME1);
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1,price2); // low green
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_TIME1,time1);
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_TIME2,time2);
if( ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE1) > ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE2) )
{
double gapisze = MathAbs(ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1)-ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2));
price1 = ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1);
price2 = ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2);
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1,price1);
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2,price1-gapisze);
}
if( ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE1) < ObjectGet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE2) )
{
double gapisze = MathAbs(ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1)-ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2));
price1 = ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1);
price2 = ObjectGet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2);
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1,price1);
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2,price1+gapisze);
}
}
GlobalSet();
}
}
void OnTimer()
{
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME1,GlobalVariableGet(OBJprefix+".RiskRewardTime1"));
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME2,GlobalVariableGet(OBJprefix+".RiskRewardTime2"));
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_TIME1,GlobalVariableGet(OBJprefix+".RiskRewardTime1"));
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_TIME2,GlobalVariableGet(OBJprefix+".RiskRewardTime2"));
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE1,GlobalVariableGet(OBJprefix+".Pink.LOW"));
ObjectSet(OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE2,GlobalVariableGet(OBJprefix+".Pink.TOP"));
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE1,GlobalVariableGet(OBJprefix+".Green.LOW"));
ObjectSet(OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE2,GlobalVariableGet(OBJprefix+".Green.TOP"));
}
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 ChartDraw()
{
long chart_ID = ChartFirst();
string symbl = "";
ENUM_TIMEFRAMES chartperiod = 0;
if (DrawAllChart)
while(chart_ID>=0)
{
symbl = ChartSymbol(chart_ID);
chartperiod = ChartPeriod(chart_ID);
string name = OBJprefix+".Risk_Reward_Pink";
double top = iHigh(symbl,chartperiod,iHighest(symbl,chartperiod,MODE_HIGH,20,0));
double low = iLow(symbl,chartperiod,iLowest(symbl,chartperiod,MODE_LOW,20,0));
double mid = SymbolInfoDouble(symbl,SYMBOL_ASK);
if (ObjectFind(chart_ID,name)<0)
{
ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,iTime(symbl,chartperiod,0),low,iTime(symbl,chartperiod,0)+PeriodSeconds()*25,mid);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrPink);
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,2);
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,true);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,false);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
}
name = OBJprefix+".Risk_Reward_Green";
if (ObjectFind(chart_ID,name)<0)
{
ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,iTime(symbl,chartperiod,0),mid,iTime(symbl,chartperiod,0)+PeriodSeconds()*25,top);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrMediumSeaGreen);
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,2);
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,true);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,false);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
}
chart_ID = ChartNext(chart_ID);
}
else {
chart_ID = 0;
symbl = Symbol();
chartperiod = PERIOD_CURRENT;
strПоказано первые 50% кода (символов: 11007)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.