Нужно добавить условие деления закрытых ордеров на серии
Расскажите алгоритм или принцип деления
Как сделать чтобы каждый закрытый профит серии был новым, а не плюс предыдущий (5; 5; 5) ?? .....
Надо вместо арифметического суммирования складывать в символьную строку через пробел или через точку с запятой и пробелом, кому как нравится
Хорошая идея
А можно в массив
Профит закрытых ордеров считает правильно, но после закрытия прибавляет значение к предыдущему (5; 5+5=10; 10+5=15)
Как сделать чтобы каждый закрытый профит серии был новым, а не плюс предыдущий (5; 5; 5) ??
В серии закрытых ордеров могут быть buy и sell, или только buy и только sell ордера
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Last Profit", OBJPROP_CORNER, 1);
ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!= Symbol()) continue;
if (OrderMagicNumber()!= magic) continue;
if (OrderType()!= op) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
Сложновато всё, по проще может быть есть что-нибудь?
И примеры можно приводить, а то мозги кипят?
Сложновато всё, по проще может быть есть что-нибудь?
Нет, проще не будет. Вы считаете всегда ВСЕ ордера, в том числе и те, которые были подсчитаны в предыдущие разы применения функции LastProfitCL. А поскольку ордеров всё больше - сумма профита тоже растёт.
Нужно выработать условие, по которому цикл будет прерываться, когда новые ордера закончатся.
Нужно выработать условие, по которому цикл будет прерываться, когда новые ордера закончатся.
Вот, правильный ход мыслей))
Вот, правильный ход мыслей))
Ну, и?
Где условие?
Ну, и?
Где условие?
что то вроде этого:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
и надо как то вычесть cnt новые из прошлых
cnt 1,2,3 прошлые
cnt 4,5,6 новые
что то вроде этого:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
и надо как то вычесть cnt новые из прошлых
cnt 1,2,3 прошлые
cnt 4,5,6 новые
Да не, я не про то как у Вас уже написано.
Расскажите словами - расчет профита по каким закрытым ордерам Вас интересует
например:
- за день
- убыточные
- последний оредер
или как еще?
Серию опишите
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Профит закрытых ордеров считает правильно, но после закрытия прибавляет значение к предыдущему (5; 5+5=10; 10+5=15)
Как сделать чтобы каждый закрытый профит серии был новым, а не плюс предыдущий (5; 5; 5) ??
В серии закрытых ордеров могут быть buy и sell, или только buy и только sell ордера
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Last Profit", OBJPROP_CORNER, 1);
ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}