Вот, выбираете номер нужного, не забывайте, первая с индексом "0"
Comment( GetProfitOpenPosInCurrency(_Symbol, OP_SELL, -1, 1) ); // GetProfitOpenPosInCurrency( symbol, бай или селл(-1 - все), Magic(-1 - любой), индекс позиции (1-предпоследняя, 0-последняя))
//===============================================================================================//------------- Возвращает суммарный профит открытых позиций в валюте депозита -----------------+//===============================================================================================double GetProfitOpenPosInCurrency(string symb="0", int type=-1, int mg=-1,int index=0) {
double p[];
int c=-1, pr=0;
if(symb=="0") { symb=Symbol();}
for (int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
c++;
ArrayResize(p, c+1);
p[c]=OrderProfit()+OrderSwap()+OrderCommission();
pr=c>=index?index:c; // если открытых меньше, чем указано в выборе по индексу, то выведет профит самой первой открытой
}}}}
return(c==-1?0:p[pr]);
}
Vladimir Deryagin: Хорошо возьму на вооружение (до первого сбоя), но то что дал Vitaly Muzichenko пока работает как часики. Да, я и не знаю как последний полученный ордер можно проигнорировать при повторном цикле.
Ну тогда так, хотя и первая будет работать:
//===============================================================================================//------------- Возвращает суммарный профит открытых позиций в валюте депозита -----------------+//===============================================================================================double GetProfitOpenPosInCurrency(string symb="0", int type=-1, int mg=-1,int index=0) {
double p[][2];
int c=-1, pr=0;
if(symb=="0") { symb=Symbol();}
for (int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
c++;
ArrayResize(p, c+1);
p[c][0]=OrderTicket();
p[c][1]=OrderProfit()+OrderSwap()+OrderCommission();
}}}}
// если есть позицииif(c>0) {
ArraySort(p, WHOLE_ARRAY, 0, MODE_DESCEND);
pr=c>=index?index:c;
return(c==-1?0:p[pr][1]);
}
return(0);
}
Ненадежный способ. Как ордера сортируются после перезапуска терминала никто не знает, по времени ли, по тикету ли.
Поэтому надо надеться только на себя - сортировать по времени.
Не сортируются они , давно уже.
можно так
При условии что позиции открыты только по этой паре и нет отложек
т.е последний = 0, предпоследний = 1.
Не сортируются они , давно уже.
можно так
При условии что позиции открыты только по этой паре и нет отложек
Отложки есть, ну раз ни сортируются значит вопрос решен. Спасибо!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderProfit() предпоследнего ордера
Vitaly Muzichenko, 2016.08.16 08:10
Вот, выбираете номер нужного, не забывайте, первая с индексом "0"
Не сортируются они , давно уже.
можно так
При условии что позиции открыты только по этой паре и нет отложек
т.е последний = 0, предпоследний = 1.
Отложки есть, ну раз ни сортируются значит вопрос решен. Спасибо!
Хорошо возьму на вооружение (до первого сбоя), но то что дал Vitaly Muzichenko пока работает как часики. Да, я и не знаю как последний полученный ордер можно проигнорировать при повторном цикле.
Ну тогда так, хотя и первая будет работать:
Ну тогда так, хотя и первая будет работать:
имелось ввиду: самая старая позиция по времени , всегда "0"
Вы имеете в виду если ордеров всего 2 то
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderProfit() предпоследнего ордера
pako, 2016.08.16 13:57
Не сортируются они , давно уже.
можно так
При условии что позиции открыты только по этой паре и нет отложек
т.е последний = 0, предпоследний = 1.
я правильно вас понял. Так как если
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderProfit() предпоследнего ордера
pako, 2016.08.16 14:15
имелось ввиду: самая старая позиция по времени , всегда "0"Вы имеете в виду если ордеров всего 2 то
я правильно вас понял. Так как если
без разницы , сколько.
2016.08.16 15:30:30 -------------->"0"
2016.08.16 15:30:31 -------------->"1"
2016.08.16 15:30:38 -------------->"2"
и т д
Ну тогда так, хотя и первая будет работать:
без разницы , сколько.
2016.08.16 15:30:30 -------------->"0"
2016.08.16 15:30:31 -------------->"1"
2016.08.16 15:30:38 -------------->"2"
и т д
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderProfit() предпоследнего ордера
pako, 2016.08.16 13:57
Не сортируются они , давно уже.
можно так
При условии что позиции открыты только по этой паре и нет отложек
т.е последний = 0, предпоследний = 1.
В таком случае предпоследний по времени не 1
____________________________________________________________________
2016.08.16 15:30:30 -------------->"0"
2016.08.16 15:30:31 -------------->"1"
2016.08.16 15:30:38 -------------->"2"
2016.08.16 15:34:38 -------------->"3" предпоследний
2016.08.16 15:39:38 -------------->"4"
и т д