Cálculo de beneficios de las órdenes cerradas "AYUDA" - página 3 123456789 Nuevo comentario Renat Akhtyamov 2016.12.11 16:19 #21 Vitaly Muzichenko: No encaja, no hay información para 10 años.Tampoco es lo mismo para ti.La variable t cambiará y te quedarás atónito.Hay que memorizarlo antes de empezar a cerrar la seriecolor ProfitColor;datetime t;// START // //t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров 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) { if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); } } return(LastProfit); } Profit calculation of closed Cualquier pregunta de los ¿Cómo codificar? Vitaly Muzichenko 2016.12.11 16:24 #22 Renat Akhtyamov: Tampoco es lo mismo para ti.La variable t cambiará y te quedarás atónito.Hay que memorizarlo antes de que se cierre la serie.¿Lo has probado? Se memoriza antes del cierre, en el momento de la señal de cierre. Alekseu Fedotov 2016.12.11 16:25 #23 Vitaly Muzichenko: No es adecuado, no hay información para 10 años.Beneficio actual, , todo el historial.Por cierto, se puede ajustar a cualquier fecha y hora. [Eliminado] 2016.12.11 16:26 #24 Vitaly Muzichenko: Prueba conComment( LastProfitCL(-1, 0) );//+----------------------------------------------------------------------------+//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |//+----------------------------------------------------------------------------+double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция) double LastProfit=0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){ if(t<=OrderCloseTime()) { t=OrderCloseTime(); LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); }}}} return(LastProfit);}El beneficio recuerda cada nuevo, pero entonces algo cuenta desconocido. En la captura de pantalla #3 debería ser 4, no 190 Renat Akhtyamov 2016.12.11 16:28 #25 Vitaly Muzichenko: ¿Lo has probado? Recuerda antes de cerrar, en el momento en que se recibe la señal de cierre Sólo hay que leer el código. [Eliminado] 2016.12.11 16:37 #26 Eso, también, 190if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); Vitaly Muzichenko 2016.12.11 16:39 #27 Natashe4ka: El beneficio recuerda cada nuevo, pero entonces algo cuenta desconocido. En la pantalla #3 debería ser 4, no 190Este es el código, a mí me funciona bien, pero quizás porque la serie está cerrada correctamente Archivos adjuntos: info.mq4 9 kb Renat Akhtyamov 2016.12.11 16:40 #28 Natashe4ka: Así que también 190if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();¿Dónde se encuentra el comando para cerrar las órdenes?¿Escribiste la variable t ahí?t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров [Eliminado] 2016.12.11 16:42 #29 Renat Akhtyamov: ¿Dónde se encuentra el comando para cerrar las órdenes?¿Has escrito la variable t ahí? t=TimeCurrent();//colocar en el bloque de señales para cerrar una serie de órdenesTodo está ahí, por supuesto.if(t<=OrderCloseTime()) { t=OrderCloseTime();if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); Renat Akhtyamov 2016.12.11 16:48 #30 Natashe4ka: Todo está ahí, por supuesto.if(t<=OrderCloseTime()) { t=OrderCloseTime();if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();No, esta línea se elimina. Esto ya es un cálculo de beneficios, no funcionará así. Donde el comando para cerrar en el código - allí, pero no una línea de este tipoLea arriba. 123456789 Nuevo comentario
No encaja, no hay información para 10 años.
Tampoco es lo mismo para ti.
La variable t cambiará y te quedarás atónito.
Hay que memorizarlo antes de empezar a cerrar la serie
color ProfitColor;
datetime t;
// START //
//t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров
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)
{
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
return(LastProfit);
}
Tampoco es lo mismo para ti.
La variable t cambiará y te quedarás atónito.
Hay que memorizarlo antes de que se cierre la serie.
¿Lo has probado?
Se memoriza antes del cierre, en el momento de la señal de cierre.
No es adecuado, no hay información para 10 años.
Beneficio actual, , todo el historial.
Por cierto, se puede ajustar a cualquier fecha y hora.
Prueba con
return(LastProfit);Comment( LastProfitCL(-1, 0) );
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
if(t<=OrderCloseTime()) {
t=OrderCloseTime();
LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
}}}}
}
El beneficio recuerda cada nuevo, pero entonces algo cuenta desconocido. En la captura de pantalla #3 debería ser 4, no 190
¿Lo has probado?
Recuerda antes de cerrar, en el momento en que se recibe la señal de cierre
Eso, también, 190
El beneficio recuerda cada nuevo, pero entonces algo cuenta desconocido. En la pantalla #3 debería ser 4, no 190
Este es el código, a mí me funciona bien, pero quizás porque la serie está cerrada correctamente
Así que también 190
¿Dónde se encuentra el comando para cerrar las órdenes?
¿Escribiste la variable t ahí?
¿Dónde se encuentra el comando para cerrar las órdenes?
¿Has escrito la variable t ahí?
t=TimeCurrent();//colocar en el bloque de señales para cerrar una serie de órdenesTodo está ahí, por supuesto.
t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
Todo está ahí, por supuesto.
t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
No, esta línea se elimina. Esto ya es un cálculo de beneficios, no funcionará así.
Donde el comando para cerrar en el código - allí, pero no una línea de este tipo
Lea arriba.