Tenemos que añadir una condición para dividir las órdenes cerradas en series
Díganos el algoritmo o principio de división
¿Cómo hacer que cada beneficio cerrado de una serie sea uno nuevo y no el anterior (5; 5; 5)? .....
En lugar de la suma aritmética, añádela a una cadena de caracteres con un espacio o con un punto y coma y un espacio, lo que prefieras
Buena idea.
O podemos ponerlo en un array.
El beneficio de las órdenes cerradas se considera correctamente, pero tras el cierre añade el valor al anterior (5; 5+5=10; 10+5=15)
¿Cómo hacer que cada beneficio cerrado de una serie sea uno nuevo, en lugar del anterior (5; 5; 5)?
En una serie de órdenes cerradas puede haber órdenes de compra y de venta, o sólo de compra y sólo de venta
// 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);
}
Es complicado, ¿hay algo más sencillo?
¿Y puedes dar ejemplos, porque tu cerebro está hirviendo?
Esto es un poco complicado; ¿hay algo más sencillo?
No, no será más fácil. Siempre se cuentan TODAS las órdenes, incluyendo las que se contaron durante las veces anteriores que se utilizó la funciónLastProfitCL.Y como cada vez hay más pedidos, la cantidad de beneficios también aumenta.
Tenemos que elaborar la condición según la cual el bucle se romperá cuando se completen los nuevos pedidos.
Necesitamos elaborar una condición para que el bucle se interrumpa cuando se agoten los nuevos pedidos.
Ya está, esa es la forma correcta de pensarlo))
Ya está, esa es la forma correcta de pensarlo))
¿Y qué?
¿Dónde está la condición?
¿Y qué?
¿Dónde está la condición?
algo así:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
y hay que restar de alguna manera el cnt nuevo del pasado
cnt 1,2,3 pasado
cnt 4,5,6 nuevo
algo así:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
y hay que restar de alguna manera el cnt nuevo del pasado
cnt 1,2,3 pasado
cnt 4,5,6 nuevo
No, no me refiero a la forma en que ya lo has escrito.
Dígame en palabras - cálculo de beneficios para las órdenes cerradas que le interesan
por ejemplo:
- para el día
- con pérdidas
- último pedido
¿o algo más?
Describa la serie
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
El beneficio de las órdenes cerradas se considera correctamente, pero tras el cierre añade el valor al anterior (5; 5+5=10; 10+5=15)
¿Cómo hacer que cada beneficio cerrado de una serie sea uno nuevo, en lugar del anterior (5; 5; 5)?
En una serie de órdenes cerradas puede haber órdenes de compra y de venta, o sólo de compra y sólo de venta
// 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);
}