Приятный индикатор, спасибо!
Могли бы Вы уточнить что означает Breakeven?
Я так предполагаю, что это либо просто усреднённая цена открытия позиций по инструменту с учётом объёмов открытых поз, либо тоже самое, но ещё и с учётом накопленного свопа.
Порадовала возможность определения Lock ! Очень удобно!
Хотелось бы чтобы убыточные позы раскрашивались к примеру в красный и зелёный цвета, которые можно самостоятельно задавать в настройках индикатора. То есть символы пусть будут иметь одинаковый цвет как и сейчас, а вот суммы прибыли и убытка по инструменту имели разную раскраску.
Ещё было бы полезно как опцию добавить третью колонку, в которой будет указано соотношение между прибылью (или убытком) и маржей по инструментам. То есть к примеру прибыль по открытым позициям по инструменту составляет 500USD, при этом объём открытых поз по инструменту составляет 200USD, в третью колонку вписываем 2,5. Для убыточных инструментов аналогично, только со знаком минус.
Могли бы Вы уточнить что означает Breakeven?
Я так предполагаю, что это либо просто усреднённая цена открытия позиций по инструменту с учётом объёмов открытых поз, либо тоже самое, но ещё и с учётом накопленного свопа.
Порадовала возможность определения Lock ! Очень удобно!
Хотелось бы чтобы убыточные позы раскрашивались к примеру в красный и зелёный цвета, которые можно самостоятельно задавать в настройках индикатора. То есть символы пусть будут иметь одинаковый цвет как и сейчас, а вот суммы прибыли и убытка по инструменту имели разную раскраску.
Ещё было бы полезно как опцию добавить третью колонку, в которой будет указано соотношение между прибылью (или убытком) и маржей по инструментам. То есть к примеру прибыль по открытым позициям по инструменту составляет 500USD, при этом объём открытых поз по инструменту составляет 200USD, в третью колонку вписываем 2,5. Для убыточных инструментов аналогично, только со знаком минус.
Колонка Breakeven показывает расчетный уровень, где суммарная позиция
по данному инструменту покажет 0.
При открытии одного ордера в течении дня - это OpenPrice. Далее - картину начинают изменять свопы.
Польза наступает, когда открыто много ордеров и без калькулятора не разобраться.
При открытии одного ордера в течении дня - это OpenPrice. Далее - картину начинают изменять свопы.
Польза наступает, когда открыто много ордеров и без калькулятора не разобраться.
Немного его подрихтовал
Добавил раскраску по прибыли/убытку(настраиваемую)
и сделал названия колонок параметрами =так что локализация или там написать себе понятные шапки - дело теперь юзерское ;)
Добавил раскраску по прибыли/убытку(настраиваемую)
и сделал названия колонок параметрами =так что локализация или там написать себе понятные шапки - дело теперь юзерское ;)
//+------------------------------------------------------------------+ //| i-Breakeven.mq4 | //| Copyright © 2007, RickD | //| www.e2e-fx.net | //+------------------------------------------------------------------+ #property copyright "© 2007 RickD" #property link "www.e2e-fx.net" //---- #define major 1 #define minor 0 //---- #property indicator_chart_window #property indicator_buffers 0 //---- extern int Corner = 0; extern int dy = 20; extern string _Symbol = "Symbol"; extern string _ValueName = "Value"; extern string _TotalName = "Total"; extern string _BreakevenName = "Breakeven"; extern color _Header = OrangeRed; extern color _Text = RoyalBlue; extern color _Data = CadetBlue; extern color _DataPlus = Lime; extern color _DataMinus = Red; extern color _Separator = MediumPurple; //---- string prefix = "capital_"; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void init() { Comment(""); clear(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void deinit() { Comment(""); clear(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void clear() { string name; int obj_total = ObjectsTotal(); //---- for(int i = obj_total - 1; i >= 0; i--) { name = ObjectName(i); if(StringFind(name, prefix) == 0) ObjectDelete(name); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void start() { clear(); string Sym[]; double Equity[]; double Lots[]; ArrayResize(Sym, 0); ArrayResize(Equity, 0); ArrayResize(Lots, 0); int cnt = OrdersTotal(); //---- for(int i = 0; i < cnt; i++) { //---- if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; int type = OrderType(); //---- if(type != OP_BUY && type != OP_SELL) continue; bool found = false; int size = ArraySize(Sym); //---- for(int k = 0; k < size; k++) { //---- if(Sym[k] == OrderSymbol()) { Equity[k] += OrderProfit() + OrderCommission() + OrderSwap(); //---- if(type == OP_BUY) Lots[k] += OrderLots(); //---- if(type == OP_SELL) Lots[k] -= OrderLots(); found = true; break; } } //---- if(found) continue; int ind = ArraySize(Sym); ArrayResize(Sym, ind + 1); Sym[ind] = OrderSymbol(); ArrayResize(Equity, ind + 1); Equity[ind] = OrderProfit() + OrderCommission() + OrderSwap(); ArrayResize(Lots, ind + 1); //---- if(type == OP_BUY) Lots[k] = OrderLots(); //---- if(type == OP_SELL) Lots[k] = -OrderLots(); } string name = prefix + "symbols"; //---- if(ObjectFind(name) == -1) { ObjectCreate(name, OBJ_LABEL, 0, 0, 0); } ObjectSet(name, OBJPROP_XDISTANCE, 30); ObjectSet(name, OBJPROP_YDISTANCE, 35); ObjectSetText(name, _Symbol, 10, "Tahoma", _Header); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "equity"; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 130); ObjectSet(name, OBJPROP_YDISTANCE, 35); ObjectSetText(name, _ValueName, 10, "Tahoma", _Header); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "breakeven"; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 220); ObjectSet(name, OBJPROP_YDISTANCE, 35); ObjectSetText(name, _BreakevenName, 10, "Tahoma", _Header); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "tmp1"; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 20); ObjectSet(name, OBJPROP_YDISTANCE, 35+dy); ObjectSetText(name, "-----------------------------------------------------", 10, "Tahoma", _Separator); ObjectSet(name, OBJPROP_CORNER, Corner); double sum = 0; string level0 = ""; size = ArraySize(Sym); //---- for(i = 0; i < size; i++) { //---- if(Lots[i] == 0) { level0 = "Lock"; } else { int dig = MarketInfo(Sym[i], MODE_DIGITS); double point = MarketInfo(Sym[i], MODE_POINT); double COP = Lots[i]*MarketInfo(Sym[i], MODE_TICKVALUE); double val = MarketInfo(Sym[i], MODE_BID) - point*Equity[i] / COP; level0 = DoubleToStr(val, dig); } name = prefix + "symbol"+i; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 30); ObjectSet(name, OBJPROP_YDISTANCE, 35 + dy*(i + 2)); ObjectSetText(name, Sym[i], 10, "Tahoma", _Text); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "equity" + i; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 120); ObjectSet(name, OBJPROP_YDISTANCE, 35 + dy*(i + 2)); string eq = DoubleToStr(Equity[i], 2); //---- if(Equity[i] > 0) eq = "+" + eq; eq = "$" + eq; if(Equity[i] > 0) ObjectSetText(name, eq, 10, "Tahoma", _DataPlus); if(Equity[i] < 0) ObjectSetText(name, eq, 10, "Tahoma", _DataMinus); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "breakeven"+i; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 230); ObjectSet(name, OBJPROP_YDISTANCE, 35 + dy*(i + 2)); ObjectSetText(name, level0, 10, "Tahoma", _Data); ObjectSet(name, OBJPROP_CORNER, Corner); sum += Equity[i]; } name = prefix + "tmp2"; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 20); ObjectSet(name, OBJPROP_YDISTANCE, 35 + dy*(i + 2)); ObjectSetText(name, "-----------------------------------------------------", 10, "Tahoma", _Separator); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "total"; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 30); ObjectSet(name, OBJPROP_YDISTANCE, 35+dy*(i+3)); ObjectSetText(name, _TotalName, 10, "Tahoma", _Text); ObjectSet(name, OBJPROP_CORNER, Corner); name = prefix + "equity_total"; //---- if(ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0); ObjectSet(name, OBJPROP_XDISTANCE, 120); ObjectSet(name, OBJPROP_YDISTANCE, 35+dy*(i+3)); eq = DoubleToStr(sum, 2); //---- if(sum > 0) eq = "+" + eq; eq = "$" + eq; //ObjectSetText(name, eq, 10, "Tahoma", _Data); if(sum > 0) ObjectSetText(name, eq, 10, "Tahoma", _DataPlus); if(sum < 0) ObjectSetText(name, eq, 10, "Tahoma", _DataMinus); ObjectSet(name, OBJPROP_CORNER, Corner); } //+------------------------------------------------------------------+
спасибо!
а он может подавать сигнал (непрерывный, каждую минуту например) о превышении Total Equiti заданного порога?
добавить бы третью колонку с колличеством пунктов + -
Индиктор просто супер!!! Даже цветовая гамма подобрана со вкусом!.
Добавить бы колонки (колонки можно сделать отключаемые в настройках):
1) текущая цена, если много валютных пар
2) % изменения с начала дня (недели, месяца)
А если бы сделать в виде советника, чтобы закрывать ТОЛЬКО определенную пару из портфеля по достижении определенного профита (например в валюте депозита). Я бы даже купил.
Автору респект!
По золоту усредняет почему то ошибками :(
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
i-Breakeven:
Author: RickD2