Нужно чтобы отображались открытые позиции разными цветами как на смартфоне. Убыточные красным, прибыльные синим.
В самом МТ4 их не покрасить, но думаю есть индикатор который может разместить это все поверх графика.
Нужно чтобы отображались открытые позиции разными цветами как на смартфоне. Убыточные красным, прибыльные синим.
В самом МТ4 их не покрасить, но думаю есть индикатор который может разместить это все поверх графика.
открытые или уже закрытые ?
Нужно чтобы отображались открытые позиции разными цветами как на смартфоне. Убыточные красным, прибыльные синим.
В самом МТ4 их не покрасить, но думаю есть индикатор который может разместить это все поверх графика.
Если такой устроит, держи.
/********************************************************************\ .mq4 | Copyright 2016, Viktorov | v4forex@yandex.ru | \********************************************************************/ #property copyright "Copyright 2016, Viktorov" #property link "v4forex@yandex.ru" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 10 input color _color1 = clrGreen; // Цвет прибыльных ордеров input color _color2 = clrRed; // Цвет убыточных ордеров int buffers, bars_total; int shift, firstVisibleBar; double Buf_0[]; double Buf_1[]; double Buf_2[]; double Buf_3[]; double Buf_4[]; double Buf_5[]; double Buf_6[]; double Buf_7[]; double Buf_8[]; double Buf_9[]; /**************Custom indicator initialization function**************/ int OnInit() { shift = WindowBarsPerChart()-WindowFirstVisibleBar()+1; for(int i = 0; i < 10; i++) { SetIndexStyle (i, DRAW_SECTION); SetIndexShift(i, shift); SetIndexLabel(i, NULL); } IndicatorDigits(Digits()); return(INIT_SUCCEEDED); }/*******************************************************************/ /****************Custom indicator iteration function*****************/ 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[]) { bars_total = rates_total-1; mine(); return(rates_total); }/*******************************************************************/ void mine() { int i, tickets[]; shift = WindowBarsPerChart()-WindowFirstVisibleBar()+1; firstVisibleBar = fmin(bars_total, WindowFirstVisibleBar()+shift); TotalOrders(tickets); buffers = ArraySize(tickets); MyOnInit(); for(i = 0; i < buffers; i++) { if(OrderSelect(tickets[i], SELECT_BY_TICKET)) colorLevel(i, OrderOpenPrice() , OrderProfit()+OrderCommission()+OrderSwap()); } }/*******************************************************************/ void TotalOrders(int &t[]) { int i, ret = -1, total = OrdersTotal(); ArrayFree(t); for(i = 0; i < total; i++) { if(OrderSelect(i, SELECT_BY_POS)&& OrderSymbol() == _Symbol && OrderType() < OP_SELLLIMIT) { ret++; ArrayResize(t, ret+1); t[ret] = OrderTicket(); } } }/*******************************************************************/ void colorLevel(int i, double openPrice, double profit) { switch(i) { case 0: Buf_0[0] = openPrice; Buf_0[firstVisibleBar] = openPrice; break; case 1: Buf_1[0] = openPrice; Buf_1[firstVisibleBar] = openPrice; break; case 2: Buf_2[0] = openPrice; Buf_2[firstVisibleBar] = openPrice; break; case 3: Buf_3[0] = openPrice; Buf_3[firstVisibleBar] = openPrice; break; case 4: Buf_4[0] = openPrice; Buf_4[firstVisibleBar] = openPrice; break; case 5: Buf_5[0] = openPrice; Buf_5[firstVisibleBar] = openPrice; break; case 6: Buf_6[0] = openPrice; Buf_6[firstVisibleBar] = openPrice; break; case 7: Buf_7[0] = openPrice; Buf_7[firstVisibleBar] = openPrice; break; case 8: Buf_8[0] = openPrice; Buf_8[firstVisibleBar] = openPrice; break; case 9: Buf_9[0] = openPrice; Buf_9[firstVisibleBar] = openPrice; break; default: return; } if(profit > 0) SetIndexStyle(i, DRAW_SECTION, STYLE_DASHDOT, 1, _color1); else SetIndexStyle(i, DRAW_SECTION, STYLE_DASHDOT, 1, _color2); }/*******************************************************************/ void MyOnInit() { IndicatorBuffers(buffers); switch(buffers) { case 10: ArrayInitialize(Buf_9, EMPTY_VALUE); SetIndexBuffer(9, Buf_9, INDICATOR_DATA); case 9: ArrayInitialize(Buf_8, EMPTY_VALUE); SetIndexBuffer(8, Buf_8, INDICATOR_DATA); case 8: ArrayInitialize(Buf_7, EMPTY_VALUE); SetIndexBuffer(7, Buf_7, INDICATOR_DATA); case 7: ArrayInitialize(Buf_6, EMPTY_VALUE); SetIndexBuffer(6, Buf_6, INDICATOR_DATA); case 6: ArrayInitialize(Buf_5, EMPTY_VALUE); SetIndexBuffer(5, Buf_5, INDICATOR_DATA); case 5: ArrayInitialize(Buf_4, EMPTY_VALUE); SetIndexBuffer(4, Buf_4, INDICATOR_DATA); case 4: ArrayInitialize(Buf_3, EMPTY_VALUE); SetIndexBuffer(3, Buf_3, INDICATOR_DATA); case 3: ArrayInitialize(Buf_2, EMPTY_VALUE); SetIndexBuffer(2, Buf_2, INDICATOR_DATA); case 2: ArrayInitialize(Buf_1, EMPTY_VALUE); SetIndexBuffer(1, Buf_1, INDICATOR_DATA); case 1: ArrayInitialize(Buf_0, EMPTY_VALUE); SetIndexBuffer(0, Buf_0, INDICATOR_DATA); break; default: return; } for(int i = 0; i < buffers; i++) { SetIndexStyle (i, DRAW_SECTION); SetIndexShift(i, shift); SetIndexLabel(i, NULL); } }/*******************************************************************/ void OnChartEvent(const int id, // идентификатор события const long& lparam, // параметр события типа long const double& dparam, // параметр события типа double const string& sparam) // параметр события типа string { mine(); }/*******************************************************************/
Можно было сделать горизонтальными линиями, но ...
Обзовите индикатор как вам нравится.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужно чтобы отображались открытые позиции разными цветами как на смартфоне. Убыточные красным, прибыльные синим.
В самом МТ4 их не покрасить, но думаю есть индикатор который может разместить это все поверх графика.