Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Y dónde existe todo esto? ¿Lo escribes en alguna variable o en un array? Muéstrame primero dónde lo almacenas, y entonces podrás ver qué hacer después.
Bien, entonces desglosémoslo: hay una hora de cierre de los pedidos, hay un ticket o número de pedidos que coincide con la hora de cierre. ¿Cómo combinamos y calculamos el beneficio de estos pedidos?
Parece que es fácil, pero sigo sin entenderlo.
Hasta ahora nadie puede averiguar cuáles son los que están resaltados en rojo. Necesitamos los criterios exactos para encontrar estos pedidos. Así que trata de explicarlo, como dicen en los dedos, con imágenes y demás.
?
¿Por qué nadie puede entender esto, probablemente te refieres a ti mismo?
Está claro desde hace mucho tiempo.
La señora sólo quiere hacerlo por su cuenta, sin alardear de los detalles de su programa.
Hasta ahora nadie puede entender cuáles son los que están resaltados en rojo. Necesitamos criterios precisos para encontrar estos pedidos. Por eso, intenta explicar, como dicen en los dedos, con imágenes y demás
Sí, ya he dado una condición de funcionamiento al 100% y la he adjuntado como código listo. También hay que tener en cuenta que el código utiliza un método que no se ve afectado por los reinicios del terminal, y no se perderá nada cuando se encienda el terminal y seguirá funcionando. Pero aquí inventan una rueda que sólo funcionará en el probador.
Sergey, ten en cuenta también que en el código original de TS cuando cierras una serie de 5 posiciones, la orden en medio del cierre también se borra, esto a su vez no llevará a nada bueno en el trading real. En general, todo está claro para todos, excepto para la ST.
//| Natashe4ka.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
input int Magic=1;//Identification number
double Profit=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
color ProfitColor=0;
// START //
LastProfitCL_1(Profit,TimeCurrent(),-1);
if(Profit<0)ProfitColor=clrRed;
else if(Profit>0)ProfitColor=clrLimeGreen;
else ProfitColor=clrDarkGray;
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(Profit,2)),10,"Arial",ProfitColor);
// END START //
}
//+------------------------------------------------------------------+
//Вариант 1
//+------------------------------------------------------------------+
bool LastProfitCL_1(double &LastProfit,//сюда записываем профит
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderCloseTime()!=timecurent)continue;
if(OrderType()==op || op==-1)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Вариант 2 |
//+------------------------------------------------------------------+
bool LastProfitCL_2(double &LastProfit,//сюда записываем профит
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
if(OrderSelect(total-1,SELECT_BY_POS,MODE_HISTORY))
{
timecurents=OrderCloseTime();
}
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderCloseTime()<timecurents)continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderType()==op || op==-1)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
Corregida la segunda versión de la función
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderType()!=op && op!=-1)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(timecurents==0)timecurents=OrderCloseTime(); // запомним время последнего закрытого ордера
if(OrderCloseTime()<timecurents)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
..........
Corregida la segunda versión de la función
Gracias por su ayuda.
La variante 1 no funciona correctamente
La variante 2 funciona correctamente.
Mi variante también funciona correctamente, pero si las órdenes se trasladan a otro día o más, el valor no es claro Beneficio 190, mientras que debería ser 4,27.
Ver la captura de pantalla #3https://www.mql5.com/ru/forum/162930/page3
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
datetime t=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()||OrderMagicNumber()!=magic) continue;
if (t<OrderCloseTime()) {t=OrderCloseTime();}
if ((op<0||OrderType()==op) && t==OrderCloseTime()) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
Resulta que el problema no es el número de pedidos, sino el traslado de los mismos a otro día o más.
¿Cierras en una serie o qué? ¿Cuál es la prórroga si se cierran todos los pedidos en un ciclo?
Las órdenes se cierran por series, pero si no hay condiciones para el cierre, las órdenes se recogen durante un día o dos, etc.
Aunque el número de pedidos también afecta al valor de los beneficios.
Si hay más de 3 pedidos, el valor se calcula sólo para el último pedido cerrado.