breakout retest pro ea source code.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «breakout retest pro ea source code.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Breakout Retest Pro EA — торговый советник для MetaTrader 4, реализующий стратегию обнаружения пробоев ценовых уровней (neckline) с последующим входом на ретесте. Советник определяет свинг-экстремумы, оценивает импульс через ATR, подтверждает пробой замыканиями цен и открывает позиции при возврате цены в зону neckline.
В состав инструмента входят средства управления рисками: авто-расчёт лота по процентному риску от депозита, стоп-лосс и тейк-профит на базе ATR, ограничение максимального количества открытых позиций. Доступны фильтры торговой сессии по часам серверного времени и фильтр тренда на основе SMA50.
Советник поддерживает обнаружение разворотов для принудительного закрытия позиций: поглощающие свечи, трёхбарный разворот, переворот импульса EMA и ATR-движение против торговли. Визуальная составляющая включает тёмную тему графика, информационную панель с данными аккаунта и рынка, графические уровни neckline и зоны ретеста, а также метки BUY/SELL.
Настройки программы
| Настройка | Описание |
|---|---|
| Buy_SwingLength | Длина периода для обнаружения свинг-максимума при формировании бычьего neckline. |
| Buy_ImpulseMult | Множитель ATR для оценки минимального импульса при формировании бычьего neckline. |
| Buy_BreakConfirm | Количество замыканий свечей выше neckline, необходимых для подтверждения бычьего пробоя. |
| Buy_RetestATR | Ширина зоны ретеста в единицах ATR вокруг neckline для бычьих позиций. |
| Buy_RetestBars | Максимальное количество баров, в течение которых ожидается ретест neckline для бычьих позиций. |
| Buy_SL_Mult | Множитель ATR для расчёта расстояния стоп-лосса от цены входа в бычьей позиции. |
| Buy_TP_Mult | Множитель ATR для расчёта тейк-профита от цены входа в бычьей позиции. |
| Sell_SwingLength | Длина периода для обнаружения свинг-минимума при формировании медвежьего neckline. |
| Sell_ImpulseMult | Множитель ATR для оценки минимального импульса при формировании медвежьего neckline. |
| Sell_BreakConfirm | Количество замыканий свечей ниже neckline, необходимых для подтверждения медвежьего пробоя. |
| Sell_RetestATR | Ширина зоны ретеста в единицах ATR вокруг neckline для медвежьих позиций. |
| Sell_RetestBars | Максимальное количество баров, в течение которых ожидается ретест neckline для медвежьих позиций. |
| Sell_SL_Mult | Множитель ATR для расчёта расстояния стоп-лосса от цены входа в медвежьей позиции. |
| Sell_TP_Mult | Множитель ATR для расчёта тейк-профита от цены входа в медвежьей позиции. |
| Use_Reversal | Включает систему обнаружения разворотов для принудительного закрытия открытых позиций. |
| Rev_ConsecBars | Количество последовательных баров движения против позиции, необходимое для подтверждения разворота при ATR-проверке. |
| Rev_ATR_Move | Минимальное движение ATR против текущей позиции, требуемое для подтверждения разворота при ATR-проверке. |
| Use_Engulf | Включает обнаружение поглощающей свечи как один из сигналов разворота против текущей позиции. |
| Use_ThreeBar | Включает обнаружение трёхбарного разворота (три последовательные свечи против направления позиции) как сигнал разворота. |
| Use_MomentumFlip | Включает обнаружение переворота импульса EMA (быстрая EMA пересекает медленную) как сигнал разворота. |
| EMA_Fast | Период быстрой скользящей средней EMA, используемой для обнаружения переворота импульса. |
| EMA_Slow | Период медленной скользящей средней EMA, используемой для обнаружения переворота импульса. |
| LotSize | Фиксированный размер лота для ручного режима управления позицией. |
| UseAutoLot | Включает автоматический расчёт размера лота на основе процентного риска от баланса счёта. |
| RiskPercent | Процент риска от баланса счёта на одну сделку, используемый при авто-расчёте размера лота. |
| MaxPositions | Максимальное количество одновременно открытых позиций, управляемых советником. |
| Slippage | Допустимое проскальзывание в пунктах при исполнении рыночных ордеров. |
| MagicNumber | Магический номер для идентификации ордеров, открытых данным советником. |
| UseSessionFilter | Включает фильтр торговой сессии, запрещающий открытие позиций вне заданных часов серверного времени. |
| SessionStartHour | Час начала торговой сессии по серверному времени, в пределах которой советник допускает открытие позиций. |
| SessionEndHour | Час окончания торговой сессии по серверному времени, в пределах которой советник допускает открытие позиций. |
| UseTrendFilter | Включает фильтр тренда на основе SMA50: для покупок цена должна быть выше SMA, для продаж — ниже. |
| TrendSMA | Период простой скользящей средней SMA, используемой в фильтре тренда. |
| ApplyTheme | Включает применение тёмной темы «Navy» на графике: тёмный фон, синие бычьи свечи, белые медвежьи свечи, изменение цветов линий и стоп-уровня. |
| ShowDashboard | Отображение информационной панели с данными баланса, эквити, позиции, ATR, спреда и фазы setup. |
| ShowBoxes | Отображение графических прямоугольников neckline и зон ретеста на графике. |
| ShowSignals | Отображение стрелок и меток BUY/SELL с информацией о стоп-лоссе и тейк-профите при открытии позиций. |
Поиск по коду файла
#property version "2.00"
#property strict
extern int Buy_SwingLength = 10; // Buy Swing Length
extern double Buy_ImpulseMult = 1.5; // Buy Impulse ATR Mult
extern int Buy_BreakConfirm = 2; // Buy Break Confirm Bars
extern double Buy_RetestATR = 0.5; // Buy Retest Zone (ATR)
extern int Buy_RetestBars = 40; // Buy Max Retest Bars
extern double Buy_SL_Mult = 1.5; // Buy SL ATR Mult
extern double Buy_TP_Mult = 4.0; // Buy TP ATR Mult
extern int Sell_SwingLength = 10; // Sell Swing Length
extern double Sell_ImpulseMult = 1.5; // Sell Impulse ATR Mult
extern int Sell_BreakConfirm = 2; // Sell Break Confirm Bars
extern double Sell_RetestATR = 0.5; // Sell Retest Zone (ATR)
extern int Sell_RetestBars = 40; // Sell Max Retest Bars
extern double Sell_SL_Mult = 1.5; // Sell SL ATR Mult
extern double Sell_TP_Mult = 4.0; // Sell TP ATR Mult
extern bool Use_Reversal = true; // Enable Reversal Exit
extern int Rev_ConsecBars = 4; // Consecutive Reversal Bars
extern double Rev_ATR_Move = 1.0; // Min ATR Move Against Trade
extern bool Use_Engulf = true; // Detect Engulfing Candle
extern bool Use_ThreeBar = true; // Detect Three Bar Reversal
extern bool Use_MomentumFlip = true; // Detect EMA Momentum Flip
extern int EMA_Fast = 8; // Fast EMA Period
extern int EMA_Slow = 21; // Slow EMA Period
extern double LotSize = 0.5; // Lot Size
extern bool UseAutoLot = true; // Use Auto Lot (% risk)
extern double RiskPercent = 1.0; // Risk % per trade
extern int MaxPositions = 1; // Max open positions
extern int Slippage = 2; // Slippage (points)
extern int MagicNumber = 2026; // Magic Number
extern bool UseSessionFilter = false; // Use Session Filter
extern int SessionStartHour = 8; // Session Start Hour (Server)
extern int SessionEndHour = 22; // Session End Hour (Server)
extern bool UseTrendFilter = true; // Use SMA50 Trend Filter
extern int TrendSMA = 50; // Trend SMA Period
extern bool ApplyTheme = true; // Apply Navy Dark Theme
extern bool ShowDashboard = true; // Show Dashboard Panel
extern bool ShowBoxes = true; // Show Neckline / Retest Boxes
extern bool ShowSignals = true; // Show BUY/SELL Labels
#define BRT "BRT_" // Object name prefix
#define PANEL_X 10
#define PANEL_Y 25
#define PANEL_W 290
#define PAD 10
#define ROW_H 18
#define HDR_H 30
#define SEC_H 16
#define LABEL_X (PANEL_X+PAD)
#define VALUE_X (PANEL_X+145)
#define CLR_PANEL_BG C'25,28,38'
#define CLR_HEADER_BG C'20,55,85'
#define CLR_SECTION_BG C'30,35,48'
#define CLR_BORDER C'55,65,85'
#define CLR_DIVIDER C'45,50,65'
#define CLR_SECTION_TXT C'100,160,220'
#define CLR_LABEL C'160,160,175'
#define CLR_VALUE C'230,230,240'
#define CLR_PROFIT clrLime
#define CLR_LOSS clrTomato
#define CLR_WARN clrOrange
#define CLR_INFO clrDeepSkyBlue
#define CLR_DIMMED C'100,100,115'
#define FONT_TITLE "Segoe UI"
#define FONT_SECTION "Segoe UI"
#define FONT_BODY "Consolas"
#define FSIZE_TITLE 11
#define FSIZE_SECTION 8
#define FSIZE_BODY 9
#define SYM_DIAMOND "◆"
#define SYM_BULLET "●"
#define SYM_UP "▲"
#define SYM_DOWN "▼"
#define SYM_CHECK "✓"
#define SYM_CROSS "✗"
#define CLR_BULL_BOX C'0,191,255' // DodgerBlue tint for bull neckline
#define CLR_BEAR_BOX C'255,68,68' // Red tint for bear neckline
#define CLR_BULL_SIG C'0,255,136'
#define CLR_BEAR_SIG C'255,68,68'
double bull_neck = 0;
int bull_neck_bar = -1;
bool bull_broke = false;
int bull_broke_bar = -1;
bool bull_waiting = false;
double bear_neck = 0;
int bear_neck_bar = -1;
bool bear_broke = false;
int bear_broke_bar = -1;
bool bear_waiting = false;
int consec_down = 0;
int consec_up = 0;
color g_origBG, g_origFG, g_origGrid, g_origVol, g_origUp, g_origDown;
color g_origLine, g_origBull, g_origBear, g_origBid, g_origAsk, g_origStop;
string lastSignal = "None";
int obj_counter = 0;
void SaveOriginalChartColors()
{
g_origBG = (color)ChartGetInteger(0, CHART_COLOR_BACKGROUND);
g_origFG = (color)ChartGetInteger(0, CHART_COLOR_FOREGROUND);
g_origGrid = (color)ChartGetInteger(0, CHART_COLOR_GRID);
g_origVol = (color)ChartGetInteger(0, CHART_COLOR_VOLUME);
g_origUp = (color)ChartGetInteger(0, CHART_COLOR_CHART_UP);
g_origDown = (color)ChartGetInteger(0, CHART_COLOR_CHART_DOWN);
g_origLine = (color)ChartGetInteger(0, CHART_COLOR_CHART_LINE);
g_origBull = (color)ChartGetInteger(0, CHART_COLOR_CANDLE_BULL);
g_origBear = (color)ChartGetInteger(0, CHART_COLOR_CANDLE_BEAR);
g_origBid = (color)ChartGetInteger(0, CHART_COLOR_BID);
g_origAsk = (color)ChartGetInteger(0, CHART_COLOR_ASK);
g_origStop = (color)ChartGetInteger(0, CHART_COLOR_STOP_LEVEL);
}
void RestoreOriginalChartColors()
{
ChartSetInteger(0, CHART_COLOR_BACKGROUND, g_origBG);
ChartSetInteger(0, CHART_COLOR_FOREGROUND, g_origFG);
ChartSetInteger(0, CHART_COLOR_GRID, g_origGrid);
ChartSetInteger(0, CHART_COLOR_VOLUME, g_origVol);
ChartSetInteger(0, CHART_COLOR_CHART_UP, g_origUp);
ChartSetInteger(0, CHART_COLOR_CHART_DOWN, g_origDown);
ChartSetInteger(0, CHART_COLOR_CHART_LINE, g_origLine);
ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, g_origBull);
ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, g_origBear);
ChartSetInteger(0, CHART_COLOR_BID, g_origBid);
ChartSetInteger(0, CHART_COLOR_ASK, g_origAsk);
ChartSetInteger(0, CHART_COLOR_STOP_LEVEL, g_origStop);
ChartRedraw(0);
}
void ApplyDarkNavyTheme()
{
ChartSetInteger(0, CHART_COLOR_BACKGROUND, C'15,15,40');
ChartSetInteger(0, CHART_COLOR_FOREGROUND, C'180,180,195');
ChartSetInteger(0, CHART_COLOR_GRID, C'30,30,60');
ChartSetInteger(0, CHART_COLOR_VOLUME, C'70,130,180');
ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrDodgerBlue);
ChartSetInteger(0, CHART_COLOR_CHART_UP, clrDodgerBlue);
ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, clrWhite);
ChartSetInteger(0, CHART_COLOR_CHART_DOWN, clrWhite);
ChartSetInteger(0, CHART_COLOR_CHART_LINE, clrDodgerBlue);
ChartSetInteger(0, CHART_COLOR_BID, C'0,200,200');
ChartSetInteger(0, CHART_COLOR_ASK, C'255,80,80');
ChartSetInteger(0, CHART_COLOR_STOP_LEVEL, clrOrangeRed);
ChartRedraw(0);
}
void MakeRect(string name, int x, int y, int w, int h, color bg, color border=clrNONE, int bw=0)
{
if(ObjectFind(0,name)<0) ObjectCreate(0, name, OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
ObjectSetInteger(0, name, OBJPROP_XSIZE, w);
ObjectSetInteger(0, name, OBJPROP_YSIZE, h);
ObjectSetInteger(0, name, OBJPROP_BGCOLOR, bg);
ObjectSetInteger(0, name, OBJPROP_BORDER_TYPE, BORDER_FLAT);
ObjectSetInteger(0, name, OBJPROP_COLOR, border);
ObjectSetInteger(0, name, OBJPROP_WIDTH, bw);
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetInteger(0, name, OBJPROP_BACK, false);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
}
void MakeLabel(string name, int x, int y, string text, string font, int size, color clr)
{
if(ObjectFind(0,name)<0) ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetString(0, name, OBJPROP_TEXT, text);
ObjectSetString(0, name, OBJPROP_FONT, font);
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, size);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER);
ObjectSetInteger(0, name, OBJPROP_BACK, false);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
}
bool SetText(string name, string txt, color clr=CLR_VALUE)
{
if(ObjectFind(0,name)<0) return false;
bool changed = false;
if(ObjectGetString(0,name,OBJPROP_TEXT) != txt)
{
ObjectSetString(0, name, OBJPROP_TEXT, txt);
changed = true;
}
if((color)ObjectGetInteger(0,name,OBJPROP_COLOR) != clr)
{
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
changed = true;
}
return changed;
}
void BuildDashboard()
{
int y = PANEL_Y;
int totalH = 400;
MakeRect(BRT+"BG", PANEL_X, PANEL_Y, PANEL_W, totalH, CLR_PANEL_BG, CLR_BORDER, 1);
MakeRect(BRT+"HDR_BG", PANEL_X+1, PANEL_Y+1, PANEL_W-2, HDR_H-1, CLR_HEADER_BG, clrNONE, 0);
y = PANEL_Y;
MakeLabel(BRT+"LOGO", LABEL_X, y+7, SYM_DIAMOND+" Breakout Retest Pro", FONT_TITLE, FSIZE_TITLE, clrWhite);
MakeLabel(BRT+"VER", PANEL_X+PANEL_W-55, y+10, "v2.0", FONT_BODY, 7, CLR_DIMMED);
y += HDR_H + 2;
MakeRect(BRT+"DIV1", PANEL_X+1, y, PANEL_W-2, 1, CLR_DIVIDER);
y += 3;
MakeLabel(BRT+"SEC1", LABEL_X, y, "ACCOUNT", FONT_SECTION, FSIZE_SECTION, CLR_SECTION_TXT);
y += SEC_H;
MakeLabel(BRT+"L_BAL", LABEL_X, y, "Balance:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_BAL", VALUE_X, y, "---", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_EQ", LABEL_X, y, "Equity:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_EQ", VALUE_X, y, "---", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_DPL", LABEL_X, y, "Daily P/L:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_DPL", VALUE_X, y, "---", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H + 2;
MakeRect(BRT+"DIV2", PANEL_X+1, y, PANEL_W-2, 1, CLR_DIVIDER);
y += 3;
MakeLabel(BRT+"SEC2", LABEL_X, y, "MARKET", FONT_SECTION, FSIZE_SECTION, CLR_SECTION_TXT);
y += SEC_H;
MakeLabel(BRT+"L_BIAS", LABEL_X, y, "Bias:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_BIAS", VALUE_X, y, "---", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_ATR", LABEL_X, y, "ATR:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_ATR", VALUE_X, y, "---", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_SPR", LABEL_X, y, "Spread:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_SPR", VALUE_X, y, "---", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H + 2;
MakeRect(BRT+"DIV3", PANEL_X+1, y, PANEL_W-2, 1, CLR_DIVIDER);
y += 3;
MakeLabel(BRT+"SEC3", LABEL_X, y, "BULL SETUP", FONT_SECTION, FSIZE_SECTION, CLR_SECTION_TXT);
y += SEC_H;
MakeLabel(BRT+"L_BPHASE", LABEL_X, y, "Phase:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_BPHASE", VALUE_X, y, "--", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_BNECK", LABEL_X, y, "Neckline:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_BNECK", VALUE_X, y, "--", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H + 2;
MakeRect(BRT+"DIV4", PANEL_X+1, y, PANEL_W-2, 1, CLR_DIVIDER);
y += 3;
MakeLabel(BRT+"SEC4", LABEL_X, y, "BEAR SETUP", FONT_SECTION, FSIZE_SECTION, CLR_SECTION_TXT);
y += SEC_H;
MakeLabel(BRT+"L_SPHASE", LABEL_X, y, "Phase:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_SPHASE", VALUE_X, y, "--", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_SNECK", LABEL_X, y, "Neckline:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_SNECK", VALUE_X, y, "--", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H + 2;
MakeRect(BRT+"DIV5", PANEL_X+1, y, PANEL_W-2, 1, CLR_DIVIDER);
y += 3;
MakeLabel(BRT+"SEC5", LABEL_X, y, "POSITIONS", FONT_SECTION, FSIZE_SECTION, CLR_SECTION_TXT);
y += SEC_H;
MakeLabel(BRT+"L_POS", LABEL_X, y, "Open:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_POS", VALUE_X, y, "0", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_PNL", LABEL_X, y, "P/L:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_PNL", VALUE_X, y, "$0.00", FONT_BODY, FSIZE_BODY, CLR_VALUE);
y += ROW_H;
MakeLabel(BRT+"L_SIG", LABEL_X, y, "Last:", FONT_BODY, FSIZE_BODY, CLR_LABEL);
MakeLabel(BRT+"V_SIG", VALUE_X, y, SYM_BULLET+" Waiting", FONT_BODY, FSIZE_BODY, CLR_WARN);
y += ROW_H + 2;
ObjectSetInteger(0, BRT+"BG", OBJPROP_YSIZE, y - PANEL_Y + PAD);
ChartRedraw(0);
}
void UpdateDashboard(double atr_val, double sma_val, double c1_val)
{
bool redraw = false;
string cur = AccountCurrency();
double bal = AccountBalance();
double eq = AccountEquity();
double prof= AccountProfit();
int spread = (int)MarketInfo(_Symbol, MODE_SPREAD);
redraw |= SetText(BRT+"V_BAL", DoubleToString(bal,2)+" "+cur, CLR_VALUE);
redraw |= SetText(BRT+"V_EQ", DoubleToString(eq,2)+" "+cur, (eq>=bal) ? CLR_PROFIT : CLR_LOSS);
color plClr = (prof>=0) ? CLR_PROFIT : CLR_LOSS;
string plSign = (prof>=0) ? "+" : "";
redraw |= SetText(BRT+"V_DPL", plSign+DoubleToString(prof,2)+" "+cur, plClr);
bool trend_bull = (c1_val > sma_val);
if(trend_bull)
redraw |= SetText(BRT+"V_BIAS", SYM_UP+" BULLISH", CLR_PROFIT);
else
redraw |= SetText(BRT+"V_BIAS", SYM_DOWN+" BEARISH", CLR_LOSS);
redraw |= SetText(BRT+"V_ATR", DoubleToString(atr_val, Digits), CLR_VALUE);
redraw |= SetText(BRT+"V_SPR", IntegerToString(spread)+" pts", (spread>30) ? CLR_LOSS : CLR_VALUE);
string bphase = "--";
color bphClr = CLR_DIMMED;
if(bull_neck > 0 && !bull_broke) { bphase = "Waiting Break"; bphClr = CLR_WARN; }
else if(bull_neck > 0 && bull_broke) { bphase = "Waiting Retest"; bphClr = CLR_INFO; }
redraw |= SetText(BRT+"V_BPHASE", bphase, bphClr);
redraw |= SetText(BRT+"V_BNECK", bull_neck > 0 ? DoubleToString(bull_neck, Digits) : "--", CLR_VALUE);
string sphase = "--";
color sphClr = CLR_DIMMED;
if(bear_neck > 0 && !bear_broke) { sphase = "Waiting Break"; sphClr = CLR_WARN; }
else if(bear_neck > 0 && bear_broke) { sphase = "Waiting Retest"; sphClr = CLR_INFO; }
redraw |= SetText(BRT+"V_SPHASE", sphase, sphClr);
redraw |= SetText(BRT+"V_SNECK", bear_neck > 0 ? DoubleToString(bear_neck, Digits) : "--", CLR_VALUE);
int posCnt = 0;
double totalPnL = 0;
for(int i = OrdersTotal()-1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
{
posCnt++;
totalPnL += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
redraw |= SetText(BRT+"V_POS", IntegerToString(posCnt), CLR_VALUE);
color pnlClr = (totalPnL >= 0) ? CLR_PROFIT : CLR_LOSS;
string pnlSign = (totalPnL >= 0) ? "+$" : "-$";
redraw |= SetText(BRT+"V_PNL", pnlSign+DoubleToString(MathAbs(totalPnL),2), pnlClr);
if(lastSignal != "None" && lastSignal != "")
{
color sigClr = (StringFind(lastSignal, "BUY") >= 0) ? CLR_PROFIT : CLR_LOSS;
redraw |= SetText(BRT+"V_SIG", SYM_BULLET+" "+lastSignal, sigClr);
}
if(redraw) ChartRedraw(0);
}
void DrawNecklineBox(bool isBull, datetime t_start, datetime t_end, double neck, double atr_val)
{
strПоказано первые 50% кода (символов: 23226)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.